本章では、一定間隔で気象情報をツイートする bot を実装します。天気や気温を呟くには気象情報を得なければなりません。
ちょうど良い事に、全世界の気象情報を無料で返してくれるサーバがあります。それが wttr.in です。
このサイトはブラウザから参照した際には綺麗な画面を表示しますが、curl コマンドからアクセスすると端末専用のレスポンスを返してくれます。
実はこのサイトにはオプションが用意されており、format パラメータを付ける事で色々なフォーマットで出力する事ができます。例えば format 3 は以下の様に出力されます。
$ curl -s wttr.in/Tokyo?format=3
Tokyo: ⛅️ +20°C
あとはこれを twty コマンドを使ってツイートする様なスクリプトに仕立て上げれば完成です。
set -e
RESULT=$(curl -fs 'wttr.in/Tokyo?format=3&m')
twty "$RESULT"
curl を使ったコマンドを実行する際に気を付けるべき事は -s
フラグを使って本文以外のコンテンツを表示しない様にする事と、-f
フラグを使って HTTP のエラーを curl コマンドのエラーにする事です。
また wttr.in は JSON フォーマットで色々な情報を得られる様になっています。独自のコンテンツを作るには便利です。
$ curl -s 'wttr.in/Tokyo?format=j1'
現在の気温を得るのであれば以下のコードになります。
#!/bin/sh
set -e
RESULT=$(curl -fs wttr.in/Tokyo?format=j1 | jq -r '.current_condition[0].temp_C')
twty "東京の現在の気温は $RESULT ℃ です。"
if
文を使って気温によって投稿する内容を変えても面白いと思います。twty
コマンドはテキストだけでなく、画像や動画ファイルもアップロード可能ですので是非活用下さい。
出来上がったシェルスクリプトを1時間置きに実行するには crontab で以下の様に設定します。
0 * * * * /home/mattn/bin/weather.sh
※シェルスクリプトに実行権限を付けるのをお忘れなく
簡単ですね。