作業効率化

PythonでSlackに天気を定期配信する〜crontabを使用したタスクスケジュール処理〜

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

手順は以下の3つです。

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

Pythonで天気を取得する方法

Pythonは「requests」ライブラリを活用して天気サイトにアクセスし、情報をダウンロードすることで取得することができます。

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の部分が都市ごとに割り振られた番号です。

調べた番号をget_weather()の引数に渡すことで他の都市の天気を取得することができます。

PythonでSlackに天気を通知する方法

Slackにメッセージを通知する場合は「Slacker」というライブラリを活用します。

天気を配信するコードの記述例は以下の通りです。
◆記述内容(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など)を使用できます。
曜日に使用できる数字・英字は以下の通りです。

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

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

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

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

Pythonでスケジュール管理する方法については以下の記事にまとめています。
Pythonでスケジュール管理する方法まとめ

おすすめ記事>>PythonにおすすめのノートPC4選+パソコンの選び方

こちらの記事も読まれています

  • この記事を書いた人
miyabikno

みやびの

住んでいるところ:神奈川県。 プログラミング歴は13年ほど。 ※プログラミングに関する無料相談・質問への回答は行っていません。

-作業効率化
-

Copyright© みやびのどっとぴーわい , 2020 All Rights Reserved Powered by AFFINGER5.