今回はPythonでSlackに天気を定期配信する方法について紹介します。

手順は以下の3つです。

・天気を取得するPythonコードの実装例
・天気をSlackに配信するPythonコードの実装例
・天気をタスクスケジュールで配信するPythonコードの実装例

天気を取得するPythonコードの実装例

以下のコードで天気の結果を取得することができます。
下記は東京の天気を取得例。

◆記述内容(weather.py)

テスコードを実行すると以下の結果が得られます。

今日
2019-01-04
晴れ

Pythonでインターネットを取得する手順については「Slackbotで今日の天気を確認する」にて詳しく説明しています。

◆東京以外の天気を取得する
都市ごとに割り振られた番号は「全国の地点定義表(RSS) 」から確認できます。

都市ごとに、

city title=”〇〇” id=”xxxxxxx” source=”http://weather.livedoor.com/forecast/rss/area/xxxxxxx.xml”

のように定義されています。idの部分が都市ごとに割り振られた番号です。

天気をSlackに配信するPythonコードの実装例

Slackに天気を配信するコードは以下の通りです。

◆記述内容(cronweather.py)

天気をタスクスケジュールで配信するPythonコードの実装例

タスクスケジュールで配信する方法には「OSのタスクスケジューラーを使用する方法」と「Pythonでタスクスケジュールを制御する方法」があります。
いずれの方法を使用する場合でもBotのAPIトークンを取得しておく必要があります。

◆APIトークンの取得手順
1.ワークスペースのAPPフォルダに移動します
https://xxxxxxxxx.slack.com/apps

2.サイドメニューの「カテゴリ」から「Bot関連を選択」します
3.「Hubot」を選択します
4.「設定の追加」ボタンをクリックします
5.名前を入力して「Hubotインテグレーションの追加」を押します
6.「API トークン」に書かれている内容をコピーします

既にSlackbotのAPIを取得している場合は併用することも可能です。

OSのタスクスケジューラーを使用する方法

多くのOSには特定の時刻になったら処理を実行する機能(以下、タスクスケジューラーと呼称)が備わっています。
今回は代表的なタスクスケジューラーであるcrontabを使用して天気を制御する方法について説明します。

ターミナルを開いて「crontab -e」と入力することで、タスクスケジューラーの設定を編集することが可能です。
設定ファイルを開いたら以下の内容を記述します。

BOT_API_TOKEN=xoxb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
PATH=$PATH:/Library/Frameworks/Python.framework/Versions/3.7/bin
0 11 * * * python3 /Users/user/PycharmProjects/botTest/cronweather.py

1行目と2行目は環境変数の設定です。それぞれAPIトークンとpython3のパスを指定しています。
3行目はタスクスケジュールの設定です。
「0 11 * * *」は実行する時間、「python3〜」の部分は実行するコマンドを意味します。

上記例では毎日11時丁度に天気を配信するスクリプトを実行する例です。
「0 11 * * *」の見方は後ほど説明します。

記述したら「:wq」で保存して終了します。

◆実行結果
時間になると以下の内容で表示されます。

11:00に天気を配信する

Pythonでタスクスケジュールを制御する方法

python-crontab」というライブラリを使用する方法です。

◆記述内容(regularly.py)
まずはライブラリをインストールします。

pip install python-crontab

Pythonで以下の内容を記述します。

◆このクラスの使い方
●Jobを生成する
1.インスタンスを生成します。
2.コマンド、スケジュール、ファイル名を指定してwrite_job()メソッドをコールします。
※ファイル名は任意です。スケジュールの記述方法はOSのcrontabと同じです。

●スケジュールを開始する
1.タスクスケジュールを記述したファイルを指定してread_jobs()をコールします。
2.monitor_start()をコールします。

これで監視状態となり、指定した時刻になるとコマンドが実行されます。

◆実行結果
テストコードを実行した場合、時間になると以下の内容で表示されます。

10:50に天気を配信する

◆関連記事
python-crontabライブラリの使い方

◆スケジュールの見方
「0 11 * * *」の部分は「[分] [時] [日] [月] [曜日]」の並びとなっています。
アスタリスクを指定すると毎回実行します。

例1) 毎月10日の12:30に処理を実行したい場合
「30 12 10 * *」

例2) 12月20日の9:00に処理を実行したい場合
「0 9 20 12 *」

例3) 金曜日の15:00に処理を実行したい場合
「0 15 * * 5」

曜日は曜日対応した数字(0〜6)または英語の略字(sun,mon,satなど)を使用できます。
曜日に使用できる数字・英字は以下の通りです。

日曜日 0 sun
月曜日 1 mon
火曜日 2 tue
水曜日 3 wed
木曜日 4 thu
金曜日 5 fri
土曜日 6 sat

以上、Pythonで天気を定期配信する方法でした。

関連記事>>Slackの活用方法まとめ

関連記事>>SlackのRSS機能を活用してブログ記事や天気予報を定期購読する