見出し画像

業務自動化のためのお勉強 (API呼出編)

前書

ノーコード開発やローコード開発などが流行っている中で今更ではありますが、「手動でやってる業務をAPI呼び出してプログラム書いて自動化してみてえ~」となったので、とりあえず独学で勉強してみることにしました。

実装したいこと

OpenWeatherMapからAPIを使って取得した東京の現在の天気をスプレッドシートに記載。記載した内容をGoogle Chatにて通知する、といった内容を実装することにしました。
窓の外見れば? って話なので別に業務に使えるものではないですが、まあ、お勉強として。

事前作業

実装にあたって、いくつか事前に実施する必要がありましたので以下に記載します。

1.OpenWeatherMapの登録とAPI取得
OpenWeatherMapとは、各種気象情報をWEB APIとして提供しているサービスです。今回はこのサービスを利用して、東京の現在の天気を取得することにしました。
こちらのページなどを参考に、アカウント発行から自分のAPIキーの発行を行いました。アカウント発行からAPIキーを利用できるまでに少し時間がかかりましたので、急ぎすぎないようにするのがよさそうです。

2.スプレッドシートのID取得
天気を転記するスプレッドシートを事前に作成し、ID情報を取得します。
URL中の以下の箇所ですね。
https://docs.google.com/spreadsheets/d/スプレッドシートID/edit

3.Google ChatのWebhook取得
外部からGoogle Chatに対してメッセージを送付できるようにするよう、Webhookの機能を使いました。有償版Workspaceじゃないと使えないみたいですね。

ソース

なんやかやで色んなページを参照に作成したソースが以下となります。


// OpenWeatherMapから東京の天気を取得しスプレッドシートに記載、記載された内容をChatに送る

function postChatWeatherForecast() {  

// APIによる気象情報の取得(東京)
 const url = 'OpenweatherMapのAPI情報'; 
 const res = UrlFetchApp.fetch(url);

// JSONデータのパース(読み込み)
 const object = JSON.parse(res.getContentText()); 

// 今日の日付の取得 
 const date = new Date();

// WebhookのURL
// 参考:https://webree.jp/article/hangouts-webhook/
 const webhookurl = 'https://chat.googleapis.com/v1/spaces/******';

// 対象スプレッドシートの指定
 const id = "スプレッドシートのID"
 const ss = SpreadsheetApp.openById(id)
// シートの名前で指定
 const sheet = ss.getSheetByName("シート1")

// シートのB列の最終行に日付を挿入(yyyy/mm/dd) 列番号1、範囲行数2

 const lastRow = sheet.getLastRow();
 sheet.getRange(lastRow + 1, 2).setValue(Utilities.formatDate(date, 'JST', 'yyyy/MM/dd (E) HH:mm'));

// シートのC列に天気情報を挿入。
 const wtnow = "現在の天気は"+object.weather[0].description+"です";
 sheet.getRange(lastRow + 1, 3).setValue(wtnow);

// 今回取得したいセルの場所(天気情報)を指定
 const nowweather = sheet.getRange(lastRow + 1, 3).getValue()

// 送信内容を生成
// 参考:https://webree.jp/article/gas-hangoutchat/
// セルの値をテキスト形式に変更
 const message = {'text' : nowweather}
// おまじない
 const options = {
   'method': 'POST',
   'headers' : {
     'Content-Type': 'application/json; charset=UTF-8'
   },
   'payload':JSON.stringify(message)
 };

// 送信を実行
 const result = UrlFetchApp.fetch(webhookurl, options);

}

結果

スクリプトを実行すると、以下の通りチャットに送信されます。

画像1

あとは、GASのトリガー機能を使って、定期的に発砲させるなどいい感じにタイミング調整して実行するようにすればOKかなと。
APIについてはなんとなく知ってたものの、JSON形式のデータがどう格納されてどうやって指定してその情報を拾ってくるのか、といったことが学べてよかったと思います。特に「object.weather.description」とするだけだと天候情報が拾えず、「object.weather[0].description」と指定する必要があったこととか。多分入れ子の形式の問題だと思うんですが、詳しいことはよくわかってないです。なんかこうしたらうまくいった。
これを使えば、同じようにAPIを公開しているサービスであれば、今の状態を定期的にスプレッドシートに記録でき、Chatでの報告ができるようになるんじゃないかなと思います。例えば…ライセンスの使用数とか?

この記事が気に入ったらサポートをしてみませんか?