Googleスプレッドシートで外部のAPIからデータを取得したいと思ったことはありませんか。天気情報や株価、SNSのデータなどをスプレッドシートに取り込めると、業務の自動化が一気に進みます。この記事では、Apps ScriptのUrlFetchAppを使ってHTTPリクエストを送信し、外部APIと通信する基本手順を解説します。実際のコード例とともに、データの取得方法やエラーハンドリングまで丁寧に説明しますので、初心者の方でも安心して進められます。
【要点】UrlFetchAppを使えば、スプレッドシートから直接外部APIを呼び出せる
- UrlFetchApp.fetch(url, params): 指定したURLにHTTPリクエストを送信し、レスポンスを取得します。
- GETリクエストの実装: パラメータ付きのURLを組み立てて、APIからデータを取得します。
- JSONのパース: レスポンスをJSON.parse()で変換し、シートに書き出します。
- POSTリクエストの実装: method:’post’とpayloadを指定して、データを送信します。
- エラーハンドリング: ステータスコードや例外をキャッチして、安定した処理を実現します。
ADVERTISEMENT
目次
UrlFetchAppの概要とHTTPリクエストの仕組み
UrlFetchAppは、Google Apps Scriptに組み込まれたサービスで、外部のURLに対してHTTPリクエストを送信できます。これにより、スプレッドシート上からREST APIを呼び出し、データの取得や送信が可能になります。HTTPリクエストには主にGETとPOSTという2つのメソッドがあります。GETはデータを取得する際に使い、POSTはデータを送信する際に使います。UrlFetchApp.fetch()関数の第1引数にURLを渡し、第2引数にオプションとしてメソッドやヘッダー、ペイロードを指定します。返り値はHTTPResponseオブジェクトで、getContentText()などで本文を取得します。
UrlFetchAppでGETリクエストを実行する手順
まずは基本的なGETリクエストの手順を、実際のコードを交えて解説します。例として、公開APIのJSONPlaceholderからユーザー情報を取得します。
- Apps Scriptエディタを開く
スプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。新しいスクリプトファイルが作成されます。 - コードを記述する
以下のコードをエディタに貼り付けます。function fetchUsers() {
var url = 'https://jsonplaceholder.typicode.com/users';
var response = UrlFetchApp.fetch(url);
var data = JSON.parse(response.getContentText());
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.clear();
data.forEach(function(user, i) {
sheet.getRange(i+1, 1).setValue(user.name);
sheet.getRange(i+1, 2).setValue(user.email);
});
} - 実行する
関数を選択して実行ボタンを押します。初回は権限の確認画面が表示されるので、承認してください。シートにユーザー名とメールアドレスが書き込まれます。
このように、UrlFetchApp.fetch()でレスポンスを取得し、JSON.parse()でオブジェクトに変換してからシートに書き出すのが基本パターンです。
POSTリクエストでデータを送信する方法
次に、POSTリクエストを使って外部APIにデータを送信する方法を説明します。例として、JSONPlaceholderの/postsエンドポイントに新しい記事を投稿します。
- 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);
var result = JSON.parse(response.getContentText());
Logger.log(result);
} - オプションの指定
methodに’post’、contentTypeに’application/json’、payloadにJSON文字列を指定します。重要なので必ずJSON.stringify()で変換してください。 - 実行と確認
関数を実行後、ログに作成されたオブジェクトのIDなどが表示されます。スプレッドシートに書き込む場合は、同様にrangeにsetValueしてください。
ADVERTISEMENT
UrlFetchApp使用時の注意点とよくあるトラブル
認証が必要なAPIを呼び出す場合
APIキーやアクセストークンが必要なAPIでは、ヘッダーに付与します。optionsにheadersオブジェクトを追加します。headers: { 'Authorization': 'Bearer YOUR_TOKEN' }
キーをコードに直接書くと漏洩リスクがあるので、スクリプトプロパティやスプレッドシートのセルに保存し、取得する方法をおすすめします。
タイムアウトとレート制限
UrlFetchApp.fetch()のデフォルトタイムアウトは30秒です。大規模データの処理にはmuteHttpExceptionsオプションやfollowRedirectsの調整が必要な場合があります。また、多くの無料APIには1分あたりのリクエスト数制限があるので、ループ内で呼び出す場合はUtilities.sleep()などで間隔を空けてください。
エラーハンドリングの実装
ネットワークエラーやAPIエラーに対応するため、try…catch構文を使います。以下のようにレスポンスコードも確認します。try {
var response = UrlFetchApp.fetch(url);
var code = response.getResponseCode();
if (code !== 200) throw new Error('HTTP error ' + code);
} catch(e) {
Logger.log(e.message);
}
GETとPOSTの違い比較表
| 項目 | GET | POST |
|---|---|---|
| 目的 | データの取得 | データの送信や作成 |
| パラメータの指定 | URLのクエリ文字列 | ペイロード(リクエストボディ) |
| オプションの例 | method:’get'(省略可)、muteHttpExceptions:true | method:’post’、contentType:’application/json’、payload:JSON.stringify(data) |
| データの制限 | URL長に制限あり(通常2048文字程度) | ペイロードのサイズは比較的大きく可能 |
| キャッシュ | ブラウザ等でキャッシュされる可能性あり | 基本的にキャッシュされない |
まとめ
この記事では、GoogleスプレッドシートのApps Scriptが持つUrlFetchAppを使って外部APIと連携する基本を解説しました。GETリクエストでデータを取得し、POSTリクエストでデータを送信する手順を実装しました。また、認証やエラーハンドリングなどの注意点も押さえました。次は、実際に天気APIや株価APIを呼び出して、定期的にデータを自動更新する仕組みを作ってみましょう。UrlFetchAppをマスターすれば、スプレッドシートが強力なデータ連携ツールに変わります。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】複合グラフで棒と折れ線を同時表示!2軸グラフの作り方
- 【Googleスプレッドシート】FILTER関数で条件に合う行だけ抽出!数式1つで動的な絞り込み
- 【Googleスプレッドシート】フィルタ表示で他の人の表示を変えずに絞り込み!共有時の使い分け
- 【Googleスプレッドシート】重複データを抽出して表示!COUNTIFと条件付き書式の併用
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】ARRAYFORMULAで列全体に数式を一括適用!セル分の入力を不要に
- 【Googleスプレッドシート】データ範囲を動的に伸縮させる!INDIRECTと参照範囲のコツ
- 【Googleスプレッドシート】共有解除と権限の取り消し!アクセスを完全に閉じる手順
