ADVERTISEMENT

【Googleスプレッドシート】UrlFetchAppでAPI呼び出し!外部APIへのHTTPリクエスト

【Googleスプレッドシート】UrlFetchAppでAPI呼び出し!外部APIへのHTTPリクエスト
🛡️ 超解決

Googleスプレッドシートで外部のAPIからデータを取得したいと思ったことはありませんか。通常の関数だけではリアルタイムの株価や天気、外部サービスの情報を取得するのは難しいものです。Google Apps ScriptのUrlFetchAppを使えば、スプレッドシートから直接HTTPリクエストを送信でき、様々なAPIを呼び出せます。この記事では、UrlFetchAppの基本的な使い方から、APIキーの設定、エラーハンドリングまでを解説します。

【要点】UrlFetchAppでAPIを呼び出すための基本手順と注意点

  • UrlFetchApp.fetch(url) でGETリクエスト: 指定したURLからデータを取得し、レスポンスをテキストやJSONとして扱えます。
  • paramsオプションでPOSTやヘッダー指定: methodやheaders、payloadを設定することで、様々なHTTPメソッドや認証に対応します。
  • JSON.parse()でレスポンスをパース: APIから返ってくるJSON形式のデータをスプレッドシートのセルに展開できます。

ADVERTISEMENT

UrlFetchAppができることと基本の仕組み

UrlFetchAppは、Google Apps Scriptで提供されるHTTPクライアントです。スプレッドシートのセルに計算式を書くのではなく、スクリプトエディタでコードを記述して実行します。これにより、任意の外部API(天気予報、為替レート、SNSデータなど)にアクセスし、結果をシートに出力できます。基本的な流れは、スクリプトエディタを開き、UrlFetchApp.fetch()でリクエストを送り、レスポンスを処理してシートに書き込むという手順です。なお、普通のワークシート関数とは違い、トリガーやボタンで実行する必要があります。

外部APIを呼び出すための事前準備

APIを呼び出す前に、いくつかの準備が必要です。まず、利用したいAPIのエンドポイントURLと認証情報(APIキーなど)を確認します。APIキーはサービスごとに取得方法が異なりますが、多くの場合は無料で発行できます。次に、Googleスプレッドシートでスクリプトエディタを開く必要があります。メニューの「拡張機能」→「Apps Script」をクリックすると、別タブでエディタが開きます。ここでコードを記述します。

UrlFetchAppを使ったAPI呼び出しの手順

基本のGETリクエスト(JSONデータを取得)

  1. スクリプトエディタを開く
    スプレッドシートのメニューから「拡張機能」→「Apps Script」を選択します。新しいプロジェクトが作成されます。
  2. 関数を記述する
    以下のコードをエディタに貼り付けます。この例では、JSONPlaceholderのサンプルAPIから投稿データを取得します。
    function getPosts() {
    var url = 'https://jsonplaceholder.typicode.com/posts';
    var response = UrlFetchApp.fetch(url);
    var json = JSON.parse(response.getContentText());
    var sheet = SpreadsheetApp.getActiveSheet();
    // ヘッダー行を追加
    sheet.getRange(1,1,1,3).setValues([['userId','id','title']]);
    // データをシートに書き込み
    for (var i=0; i sheet.getRange(i+2,1,1,3).setValues([[json[i].userId, json[i].id, json[i].title]]);
    }
    }
  3. 関数を実行する
    ツールバーの再生ボタン(▶)をクリックし、初回は権限の承認を求められます。承認後、シートにデータが書き込まれます。

POSTリクエストでデータを送信する

  1. POST用の関数を作成
    以下のコードは、新しい投稿を作成するPOSTリクエストの例です。
    function createPost() {
    var url = 'https://jsonplaceholder.typicode.com/posts';
    var payload = {
    title: 'foo',
    body: 'bar',
    userId: 1
    };
    var options = {
    method: 'post',
    contentType: 'application/json',
    payload: JSON.stringify(payload)
    };
    var response = UrlFetchApp.fetch(url, options);
    Logger.log(response.getContentText());
    }
  2. 実行と結果確認
    実行後、メニューの「表示」→「ログ」でレスポンスを確認できます。

APIキーを使用した認証付きリクエスト

  1. ヘッダーにAPIキーを設定
    例えば、OpenWeatherMapのAPIを呼び出す場合、以下のようにheadersオプションを追加します。
    function getWeather() {
    var apiKey = 'YOUR_API_KEY';
    var city = 'Tokyo';
    var url = 'https://api.openweathermap.org/data/2.5/weather?q=' + city + '&appid=' + apiKey;
    var response = UrlFetchApp.fetch(url);
    var json = JSON.parse(response.getContentText());
    Logger.log(json.main.temp);
    }
  2. APIキーを安全に管理
    スクリプト内にキーを直接書くと漏洩リスクがあります。スクリプトのプロパティサービスを利用し、PropertiesService.getScriptProperties()で保存・取得すると安全です。

ADVERTISEMENT

UrlFetchApp使用時の注意点とよくあるエラー

リクエスト制限に注意する

UrlFetchAppには1日あたりの呼び出し制限があります。Googleアカウントの種類によって異なりますが、無料アカウントでは1日あたり20,000回までです。大量のリクエストが必要な場合は、Utilities.sleep()で間隔を空けるなどの対処が必要です。

エラーハンドリングを実装しよう

APIがダウンしている場合や、ネットワークエラーが発生した場合、UrlFetchApp.fetch()は例外をスローします。try…catch文を使ってエラーを補足し、ユーザーに分かりやすいメッセージを表示することをおすすめします。

CORS制約は関係ない

ブラウザのJavaScriptではCORS制約がありますが、UrlFetchAppはサーバー側で実行されるため、CORSの影響を受けません。そのため、任意のドメインのAPIにアクセスできます。ただし、API側でIP制限をかけている場合は、GoogleのサーバーIPが許可されているかを確認してください。

UrlFetchAppとIMPORTDATA関数の比較

機能 UrlFetchApp IMPORTDATA関数
実行環境 スクリプトエディタでコード実行 セルに数式を入力
対応メソッド GET, POST, PUT, DELETEなど GETのみ
認証・ヘッダー 自由に設定可能 設定不可
戻り値の形式 テキスト、JSONなど自由にパース CSV形式のみ
リクエスト制限 1日あたりの呼び出し回数制限あり 1日あたりの読み込み制限あり

まとめ

UrlFetchAppを使えば、Googleスプレッドシートから外部APIに柔軟にアクセスできます。基本的なGETリクエストから、POST、認証付きリクエストまで、コードを書くことで自由にデータを取得・送信できます。最初はサンプルコードを動かしながら、徐々に自分の用途に合わせてカスタマイズしてみてください。特にAPIキーの管理やエラーハンドリングを適切に行うことで、安定した自動化が実現します。次は、スクリプトをトリガーで定期実行する方法や、他のGoogleサービス(Gmail、カレンダー)との連携にも挑戦してみましょう。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。