都市ごとの天気予報をスプレッドシートにまとめて管理したいと思ったことはありませんか。天気予報のデータを手作業で入力するのは手間がかかり、更新も大変です。WeatherAPIという無料の天気APIを利用すれば、Googleスプレッドシートに自動で天気予報を取り込むことができます。この記事では、Apps Scriptを使ってWeatherAPIからデータを取得し、複数都市の予報を一覧表示する方法を詳しく解説します。
【要点】WeatherAPIのデータをスプレッドシートに取り込む3つのステップ
- WeatherAPIのAPIキーを取得: 無料登録でAPIキーを発行し、スクリプト内で認証に使います。
- Apps ScriptでURL Fetchを使う: UrlFetchApp.fetch関数でWeatherAPIのエンドポイントにリクエストを送り、JSONレスポンスを取得します。
- ループ処理で複数都市を一覧化: 都市コードのリストを用意し、forEachで繰り返し取得してシートにまとめます。
ADVERTISEMENT
目次
WeatherAPIとスプレッドシート連携の概要
WeatherAPIは世界中の天気予報を提供するクラウドサービスです。無料プランでも1日あたり1000回のAPI呼び出しが可能で、個人利用には十分な容量です。スプレッドシートから直接APIを呼び出すには、Apps Script(Googleが提供するJavaScriptベースのスクリプト環境)を使います。Apps ScriptのUrlFetchAppクラスを使うと、HTTPリクエストを送信して外部APIのデータを取得できます。
事前に必要なものは、WeatherAPIのアカウント登録とAPIキーの発行、および取得したい都市のID(例:東京は “Tokyo”、ロンドンは “London”)です。APIキーは無料で取得でき、取得したキーはスクリプト内で定数として保存します。
WeatherAPIで天気予報を取得する手順
ここでは、シングル都市の天気予報を取得してシートに書き出す基本的な手順を説明します。まずは1都市で動作を確認し、その後複数都市に対応させます。
- WeatherAPIのアカウントを作成しAPIキーを取得する
WeatherAPIの公式サイト(weatherapi.com)にアクセスし、無料プランでサインアップします。ダッシュボードからAPIキーをコピーし、メモしておきます。このキーはスクリプト内で使用します。 - スプレッドシートでスクリプトエディタを開く
取得したデータを表示するスプレッドシートを開き、メニューから「拡張機能」→「Apps Script」を選択します。スクリプトエディタが新しいタブで開きます。 - コード.gsにスクリプトを記述する
デフォルトのコードを削除し、以下のコードを貼り付けます。APIキーと都市名は自分のものに置き換えてください。function getWeather() { var apiKey = 'YOUR_API_KEY'; // 取得したAPIキーに置き換え var city = 'Tokyo'; // 取得したい都市 var url = 'http://api.weatherapi.com/v1/forecast.json?key=' + apiKey + '&q=' + city + '&days=3&aqi=no&alerts=no'; var response = UrlFetchApp.fetch(url); var json = JSON.parse(response.getContentText()); var sheet = SpreadsheetApp.getActiveSheet(); sheet.getRange('A1').setValue('都市'); sheet.getRange('B1').setValue('日付'); sheet.getRange('C1').setValue('最高気温(℃)'); sheet.getRange('D1').setValue('最低気温(℃)'); sheet.getRange('E1').setValue('天気'); var forecasts = json.forecast.forecastday; for (var i = 0; i < forecasts.length; i++) { var date = forecasts[i].date; var maxTemp = forecasts[i].day.maxtemp_c; var minTemp = forecasts[i].day.mintemp_c; var condition = forecasts[i].day.condition.text; sheet.getRange(i + 2, 1).setValue(city); sheet.getRange(i + 2, 2).setValue(date); sheet.getRange(i + 2, 3).setValue(maxTemp); sheet.getRange(i + 2, 4).setValue(minTemp); sheet.getRange(i + 2, 5).setValue(condition); } } - スクリプトを保存し実行する
スクリプトエディタで保存アイコンをクリックし、関数名「getWeather」を選択して実行ボタンをクリックします。初回は権限の承認を求められます。内容を確認して「許可」をクリックします。 - シートにデータが表示されるのを確認する
実行後、スプレッドシートに戻ると、A列からE列に都市名、日付、最高気温、最低気温、天気が3日分表示されます。これで1都市の取得は完了です。
複数都市の予報を一覧化する手順
上記のコードを改良して、複数の都市をループ処理で取得し、一覧シートにまとめます。都市リストはシート上にあらかじめ用意しておくと便利です。
- シートに都市リストを用意する
スプレッドシートの「都市リスト」という名前のシートを作成し、A列に都市名(例:Tokyo, London, New York)を入力します。見出し行は「都市」としておきます。 - 複数都市対応のスクリプトを記述する
既存のコードを以下のように変更します。都市リストを読み込み、各行の都市に対してAPIを呼び出し、結果を「天気予報」シートに追記します。function getWeatherMulti() { var apiKey = 'YOUR_API_KEY'; var ss = SpreadsheetApp.getActiveSpreadsheet(); var citySheet = ss.getSheetByName('都市リスト'); var cities = citySheet.getRange(2, 1, citySheet.getLastRow()-1).getValues().flat(); var outputSheet = ss.getSheetByName('天気予報'); if (!outputSheet) { outputSheet = ss.insertSheet('天気予報'); } else { outputSheet.clear(); } // 見出し行 outputSheet.getRange(1,1,1,5).setValues([['都市','日付','最高気温','最低気温','天気']]); var row = 2; cities.forEach(function(city) { var url = 'http://api.weatherapi.com/v1/forecast.json?key=' + apiKey + '&q=' + city + '&days=3&aqi=no&alerts=no'; try { var response = UrlFetchApp.fetch(url); var json = JSON.parse(response.getContentText()); var forecasts = json.forecast.forecastday; forecasts.forEach(function(forecast) { outputSheet.getRange(row,1).setValue(city); outputSheet.getRange(row,2).setValue(forecast.date); outputSheet.getRange(row,3).setValue(forecast.day.maxtemp_c); outputSheet.getRange(row,4).setValue(forecast.day.mintemp_c); outputSheet.getRange(row,5).setValue(forecast.day.condition.text); row++; }); } catch(e) { outputSheet.getRange(row,1).setValue(city); outputSheet.getRange(row,2).setValue('エラー'); row++; } }); } - スクリプトを保存し実行する
関数「getWeatherMulti」を実行します。権限が既に許可されていれば、そのまま処理が進みます。 - 「天気予報」シートに一覧が表示される
都市ごとに3日分の予報が縦に並び、全都市のデータが一覧で確認できます。都市リストの都市を追加・削除すれば、次回実行時に反映されます。
ADVERTISEMENT
注意点と制限事項
APIキーの管理に注意する
APIキーはスクリプト内に直接記述しますが、第三者に見られないようスクリプトエディタのアクセス権限を適切に設定してください。また、スクリプトを共有する場合は、キーを別のシークレットシートに保存し、getValueで読み込む方法も検討します。
無料プランの呼び出し制限を超えない
WeatherAPIの無料プランは1日1000回のAPI呼び出しまでです。都市数×予報日数が1000を超えると制限に引っかかります。例えば、20都市×3日分=60回程度なら問題ありませんが、大規模な場合は有料プランへのアップグレードを検討してください。
エラーハンドリングを実装する
ネットワーク障害や不正な都市名でAPIがエラーを返すことがあります。上記のコードではtry-catchで例外を捕捉し、エラー行を記録しています。さらに詳細なエラー内容をログに出力するには、console.log(e.message)を追加します。
データの更新は手動またはトリガーで
上記のスクリプトは手動実行が前提です。定期的に自動更新したい場合は、スクリプトエディタの左メニューから「トリガー」を設定し、時間主導型(例:毎日午前8時)でgetWeatherMultiを実行するようにします。これで最新の天気予報が自動取得されます。
WeatherAPIの無料プランと有料プランの比較
| 項目 | 無料プラン | 有料プラン(例:Pro) |
|---|---|---|
| API呼び出し回数/日 | 1000回 | 50000回 |
| 履歴データ | なし | 過去7日間 |
| 予報日数 | 最大3日 | 最大14日 |
| リアルタイムデータ | あり | あり |
| 月額料金 | 0円 | 約5ドル~ |
個人で複数都市の天気予報を管理するなら無料プランで十分です。大量のデータが必要な場合や過去データを分析する場合は有料プランを検討してください。
まとめ
この記事では、WeatherAPIを使ってGoogleスプレッドシートに天気予報を取り込み、複数都市の予報を一覧化する方法を解説しました。Apps ScriptのUrlFetchAppとループ処理を組み合わせることで、手軽に自動化できます。次は、トリガーを設定して毎朝自動更新する仕組みを導入すると、さらに便利になります。また、同様の手法で他のAPI(例えば為替レートやニュース)にも応用できるので、ぜひ活用してみてください。
ADVERTISEMENT
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
