2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GASでスプレッドシートをDBにGPTs(カスタムChatGPT)を作成する方法

Last updated at Posted at 2023-12-15

YouTube で解説

  • 2023年12月15日18時に公開

はじめに

OpenAI社が2023年11月に発表したGPTs、スプレッドシートをデータベースに活用できたら最強だし、できそうだよなと思っていて、下記の記事を参考に私もやってみました。
Google Apps ScriptでGPTsのCustom ActionsのAPIを作ってみた

やること

2年以上も前だけど、YouTubeでGoogle Apps Script で Webスクレイピングしてconnpassのイベントを1位から50位まで毎日更新するスプレッドシートの作り方を配信して今でも数十人に毎日見ていただいているので、そのシートを使って読み込ませたいな。

完成品:https://chat.openai.com/g/g-91qFME0aH-connpass-jin-norankingu-gpt

スプレッドシート

スクリーンショット 2023-12-15 14.25.38.png

下記のスプレッドシートをコピーして頂ければ、プログラムもご利用いただけます。
https://docs.google.com/spreadsheets/d/1Wey4cde2H_SFDs4ZvuWWYWfB0hImZ2WoY0PiGTK1r5k/copy

プログラム

独自でゼロから作りたい方は、下記の2つのプログラムをご参考ください。

GPTsとの連携部分

コード.gs
// https://script.google.com/macros/s/*************/exec
const SHEET = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('スクレイピング');

function doGet(e) {
  // リクエストからパラメータを取得
  console.log("start GPTs Custom Actions API test");
  console.log("e: " + JSON.stringify(e));
  var searchQuery = e.parameter.id;
  // var searchQuery = 400;
  console.log("e.parameter.id: " + e.parameter.id);

  // 1桁or2桁の数字かどうかをチェック
  if (!searchQuery || (!/^\d{1}$/.test(searchQuery) && !/^\d{2}$/.test(searchQuery))) {
    console.log("bad format: " + searchQuery);
    return ContentService.createTextOutput(
      JSON.stringify({ "error": "Invalid request. Please provide a 1-50 number." })
    ).setMimeType(ContentService.MimeType.JSON);
  }

  // スプレッドシートの準備
  var data = SHEET.getDataRange().getValues();
  console.log("format OK");

  // スプレッドシートを検索
  for (var i = 1; i < data.length; i++) {  // 2行目から開始
    if (data[i][0].toString() === searchQuery) {
      console.log("hit: " + i);
      console.log("title: " + data[i][1]);
      console.log("url: " + data[i][2]);
      // 見つかった場合、JSONとして返す
      return ContentService.createTextOutput(
        JSON.stringify({ "title": data[i][1], "url": data[i][2] })
      ).setMimeType(ContentService.MimeType.JSON);
    }
  }
  console.log("not found");
  // 一致するデータが見つからない場合
  return ContentService.createTextOutput(
    JSON.stringify({ "error": "No data found for the provided number." })
  ).setMimeType(ContentService.MimeType.JSON);
}

スプレッドシートの更新部分

スクレイピング.gs
function perserTest() {
  deleteTest()
  const url = 'https://connpass.com/ranking/'
  const html = UrlFetchApp.fetch(url).getContentText('utf-8')
  const events_title = Parser.data(html).from('<p class="event_title">\n').to('</p>').iterate()
  let event_title, event_url

  deleteTest()

  for (i in events_title) {

    event_title = events_title[i].replace(/<a.*">/, "")
    event_title = event_title.replace(/    /g, "")
    event_title = event_title.replace(/ /g, "")
    event_title = event_title.replace('</a>', "")
    event_title = event_title.replace('\n', "")

    event_url = events_title[i].replace(/<a href="/, "")
    event_url = event_url.replace(/">.*<\/a>/g, "")
    event_url = event_url.replace(/    /g, "")
    event_url = event_url.replace(/ /g, "")
    event_url = event_url.replace('\n', "")

    SHEET.appendRow([Number(i) + 1, event_title, event_url])

  }

}

function deleteTest() {

  SHEET.deleteRows(2,50)

}

作ったGPTsのプライバシーポリシー

さいごに

可能性が無限大だし、何より難しいことがわからなくてもスプレッドシートさえ分かれば誰でもカスタムできてしまうのがいいなぁと思っているので、他にもまた作っていきたい。来年のGPT Store で億り人になりたい。

最後までご覧いただき、誠にありがとうございました!

宣伝

Udemy講座、出してます。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?