2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Python + GoogleChat(webhook) で天気予報を送信したい

Last updated at Posted at 2021-07-19

はじめまして。
たまにPythonに関する記事を書くことにしました。
難しい記事を書いてプロフェッショナルムーブをしようかと思いましたが、
まだまだ:hatching_chick:なので自身の復習も兼ねて、簡単な内容についてまとめます。

最近とても暑いので、今回はあると活躍するかもしれない「天気予報を送信するモノ」を作っていこうと思います。


1.チャットルーム作成

まずはGoogleChatのチャットルームを作成します。
このルームでwebhookが天気予報を送信してくれます。
画像とかチェックボックスとかご用意されていますが、今回は名前だけ入力します。

step_1.png

(切り抜き下手ですみません…:upside_down:

2.Webhookの作成

次に、天気予報を送信してくれるwebhookを作成します。
webhook君をざっくり説明すると、外部からのリクエストを受けることが可能なシステムのようなものです。
今回はPythonのrequests.postを用いて、テキストベースでこのwebhook君に天気予報をプレゼントしていきます。

作成したチャットルーム名の 「▼ボタン」→「Webhookを管理」 の順でクリックします。

step_2.png

クリック後、以下のようなダイアログが表示されるので、Webhook君に名前を付けて差し上げます。
名前を付けたら「保存」ボタンをクリックします。
アバターURLを入力することが可能ですが、こちらはトプ画設定のようなものなので、
あってもなくても大丈夫です。

step_3.png

保存後、画面が切り替わるのでURLをコピーしておきます。
このURLに対して、Pythonから天気予報(リクエスト)を送信していきます。

step_4.png

GoogleChat側の準備はこれでばっちしです:clap:

3.いざPython側での実装

前項でも少し触れましたが、今回はrequestsというライブラリを用いて、天気予報を送信していきます。
requestがお使いの環境に存在しない場合は、pip等でインストールしてください。

まずは簡単にテキストを送信してみましょう。

weather.py
# encoding: utf-8
import requests

# メイン処理
def main():

    # コピーしたwebhookのurlを記入
    webhook_url = 'https://chat.googleapis.com/---以下略---'

    # webhook経由で送信するメッセージ
    send_text = "おはこんばんにちは!"

    # 送信
    response = requests.post(
        webhook_url,
        json={"text": send_text}
    )

if __name__ == "__main__": main()

これを実行すると…

step_5.png

おてんきくんに心が芽生えます。めでたい。


問題なく送信されることが分かったので(茶番)
天気予報のAPIから情報を取得→パースして送信していきましょう。

今回はtsukumijima様の天気予報API(livedoor 天気互換)をお借りいたしました。
こちらのAPIをご利用になる際は、注意事項等をよくご確認の上ご利用ください。
(tsukumijima様、APIを公開していただきありがとうございます。)

weather.py
# encoding: utf-8
import requests

# 天気予報を取得してテキストで返す
def GetWeatherInfo():

    endpoint = "https://weather.tsukumijima.net/api/forecast/city/130010"

    # 天気予報のAPIに接続
    weather_data = requests.get(endpoint).json()

    # ここに送信する内容が格納される
    ret_info = []

    # ↓----------欲しい天気の情報を取得してret_infoに情報を格納----------↓

    # どの地域の天気か知りたい…!
    ret_info.append(weather_data['title'])

    ret_info.append("")

    # 細かい内容を知りたい…!
    ret_info.append(weather_data['description']['text'].replace("\n\n", "\n"))

    ret_info.append("")

    # 明日と明後日の天気が一度に見れたいい
    for forecast in weather_data['forecasts']:
        if "今日" in forecast['dateLabel']:
            continue
        ret_info.append("-----" + forecast['dateLabel'] + "--------------------")
        ret_info.append("最高気温:" + str(forecast['temperature']['max']['celsius']))
        ret_info.append("最低気温:" + str(forecast['temperature']['min']['celsius']))
        ret_info.append("天気  :" + forecast['detail']['weather'])
        ret_info.append("")
    
    return "\n".join(ret_info)


# メイン処理
def main():

    # コピーしたwebhookのurlを記入
    webhook_url = 'https://chat.googleapis.com/---以下略---'

    # webhook経由で送信するメッセージ
    send_text = GetWeatherInfo()

    # 送信
    response = requests.post(
        webhook_url,
        json={"text": send_text}
    )

if __name__ == "__main__": main()

空行を入れて見栄えをよくするため
ret_info.append("")
をちょくちょく挟んでいます。
これを実行すると…

step_7.png

無事明後日までの予報を送信することが出来ました!

近頃のチャットツールは絵文字も充実しているので、
置換処理を用いて「晴れ→:sunny:
みたいに置き換えるとオシャレベルが上がるかもしれませんね。

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?