🔍

【GAS】特定のキーワードで検索すると表示されるWebサイトをスプシに書き出す

2024/06/06に公開

はじめに

お疲れ様です。
おおくまです。

今回は、「【GAS】特定のキーワードで検索すると表示されるWebサイトをスプシに書き出す」ということで、GASCustomSearchAPIProgrammableSearchEngineについてまとめてみました。

少しでも皆様の参考になりますと幸いです。

対象読者

注意点

GASとは

GASとは、GoogleAppsScriptの略で、Googleによって開発されたスクリプトプラットフォームです。
Googleが提供する各種サービスの自動化や連携を行うためのアプリケーションを開発するためのツールとして活用されます。
GASで使用するスクリプト言語は、JavaScriptをベースに作られています。
基本的な文法はJavaScriptと同じなので、JavaScriptを使ったことのある方であれば比較的簡単に使いこなせると思います。

https://satori.marketing/marketing-blog/gas-introduction/

弊社でもGASを使用して、様々な業務の自動化・効率化を行っています。

CustomSearchAPIとは

CustomSearchAPIとは、Googleが提供する検索エンジンのAPIです。
CustomSearchAPIを使用することで、特定のキーワードで検索すると表示されるWebサイトを取得することができます。

ProgrammableSearchEngineとは

ProgrammableSearchEngineとは、Googleが提供するカスタム検索エンジンです。
ProgrammableSearchEngineを使用することで、特定のキーワードで検索すると表示されるWebサイトをカスタマイズすることができます。

実践

では、実際にGASを使用して、特定のキーワードで検索すると表示されるWebサイトをスプシに書き出すように実装してみましょう。

1. CustomSearchAPIProgrammableSearchEngineの設定

まずは、CustomSearchAPIProgrammableSearchEngineの設定を行います。
以下の記事を参考に設定を行い、CustomSearchAPIのAPIキーと、ProgrammableSearchEngineのカスタム検索エンジンIDを取得してください。

https://qiita.com/zak_y/items/42ca0f1ea14f7046108c

https://zenn.dev/yyoshioka/articles/fa0e0a8cc480b6

2. Googleスプレッドシートの作成

次に、Googleスプレッドシートを作成します。
今回は、以下のようなシートを作成しました。

3. GASプロジェクトの作成

まずは、GASプロジェクトを作成します。
コードはサクッとChatGPTに書いてもらいました。

function getGoogleSearchResults() {
  // Google Custom Search APIのAPIキーを入力
  const apiKey = '**********';
  // カスタム検索エンジンIDを入力
  const searchEngineId = '**********';
  // 検索キーワードを入力
  const keyword = 'プログラミング';
  // APIリクエストURLを作成
  const apiUrl = `https://www.googleapis.com/customsearch/v1?q=${encodeURIComponent(keyword)}&cx=${searchEngineId}&key=${apiKey}`;

  // Google SheetsのIDを入力
  const spreadsheetId = '**********';
  // オリジナルのシート名
  const originalSheetName = '【原本】';

  try {
    // APIリクエストを送信
    const response = UrlFetchApp.fetch(apiUrl);
    const data = JSON.parse(response.getContentText());

    // Google Sheetsを取得
    const spreadsheet = SpreadsheetApp.openById(spreadsheetId);

    // 現在の日付を取得してシート名を作成
    const now = new Date();
    const formattedDate = Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyy/MM/dd');
    const newSheetName = formattedDate;

    // 元のシートをコピーして新しいシートを作成、既に存在する場合は削除して再作成
    let sheet = spreadsheet.getSheetByName(newSheetName);
    if (sheet) {
      spreadsheet.deleteSheet(sheet);
    }
    const originalSheet = spreadsheet.getSheetByName(originalSheetName);
    if (originalSheet) {
      sheet = originalSheet.copyTo(spreadsheet).setName(newSheetName);
    } else {
      throw new Error(`Sheet "${originalSheetName}" not found.`);
    }

    // シートの範囲をクリア(必要に応じて)
    sheet.getRange('C5:D').clearContent();

    // 検索結果トップ10をシートに書き込む
    if (data.items && data.items.length > 0) {
      const results = data.items.slice(0, 10);
      results.forEach((result, index) => {
        sheet.getRange(5 + index, 3).setValue(result.title); // C列にタイトル
        sheet.getRange(5 + index, 4).setValue(result.link);  // D列にリンク
      });
    } else {
      Logger.log('No search results found.');
    }

    // 更新時間をB2に記入
    const formattedDateTime = Utilities.formatDate(now, Session.getScriptTimeZone(), 'yyyy/MM/dd HH:mm:ss');
    sheet.getRange('B2').setValue(`更新時間:${formattedDateTime}`);
  } catch (e) {
    Logger.log(`Error: ${e.message}`);
  }
}

4. 実行結果

実行結果は以下のようになりました。

最後に

今回は、CustomSearchAPIProgrammableSearchEngineを用いてGASの使用例をご紹介しましたが、他にも様々な活用方法がありますので、ぜひ活用してみてください。
最後まで読んでいただきありがとうございました。

GitHubで編集を提案
株式会社リンクエッジ

Discussion