Hangouts Chatの雨通知botを爆速で作る
:warning:この記事は2019/12/06 にQiita に投稿したものです
@murs313 さんのSlackの雨通知botを爆速で作る【メッ●●】を読み、 早速同じ物を作ろうと思いましたが、弊社はSlackが使えませんでした。
というわけでHangouts Chat版雨通知botを作ってみました。 GASだと真似しすぎで作っててつまらないのでPythonとcronで実装してみました。
※ なおHangouts ChatはG Suiteでのみ使用でき、個人のGoogleアカウントでは現在使用できません。
つくったもの
テストで送信してみたものがこちら。 実際は時間を合わせて17:00に送信されるように設定しています。 Hangouts ChatはMarkdownっぽい記法が使えるのが良いですね。 (画像では強調表示がうまいこといってませんが……)
つかったもの
- CentOS 8
cronで定期実行します。 - Python 3.6.8
- Hangouts Chat の incoming webhook
- livedoorお天気API
Hangouts ChatへのPOST
Hangouts Chat は incoming webhook が使用できます。 @iitenkida7 さんの [超簡単]Hangouts Chat の incoming webhooks を使ってAPIから簡単にメッセージを投稿するを参考にさせて頂きました。
Pythonのソースコード
import requests weather_url = 'http://weather.livedoor.com/forecast/webservice/json/v1?city=130010' # Tokyo resp = requests.get(weather_url) data = resp.json() # 一部ぼかしていますがコピペでおk webhook_url = "https://chat.googleapis.com/v1/spaces/HOGEHOGE/messages?key={YOUR_KEY}&token={YOUR_TOKEN}" tomorrow_weather = data['forecasts'][1] telop = tomorrow_weather['telop'] max_temp = tomorrow_weather['temperature']['max'] min_temp = tomorrow_weather['temperature']['min'] image = tomorrow_weather['image']['url'] text = '' text += '明日の天気は' text += '*' + telop + '*' text += 'です。\n' # なぜかmaxとminが時々取得できない if max_temp is not None: text += '最高気温' text += max_temp.get('celsius') text += '℃' if min_temp is not None: text += '/最低気温' text += min_temp.get('celsius') text += '℃\n' text += image content = {"text": text} response = requests.post(webhook_url, json=content)
cronの設定
cronの設定はこちらが参考になると思います。
cronの設定を行うにはcrontab -e
を叩きましょう。
$ crontab -e
するとVimで設定ファイルが開くので、実行する時間と実行するコマンドを入力しましょう。 今回はホームディレクトリ直下に置いたという設定です。
0 17 * * * python3 ~/weather.py
ファイルを保存してVimを閉じた時にcrontab: installing new crontab
と表示されれば設定完了です。
動作確認する場合は、再度crontab -e
を開き、
*/1 * * * * python3 ~/weather.py
のように記述すれば1分おきにコマンドが実行されるようになります。
感想
参考にさせていただいたリンクがわかりやすかったので特に詰まることなく設定できました。