Python3 + Flask + py-trello + slackerでTrelloの更新情報をslackに流す(1)
弊チーム(https://github.com/SSL-Roots/Roots_home/wiki)では、タスクの管理にTrelloを使っています。 また、最近チャットツールとしてslackを導入したので、チームの活動に関する全情報をslack上に集約したいと思っています。
そこで、TrelloでタスクがDoneリストに入ったらslackで報告してくれるbotを作ります。 Trelloとslackの連携は公式でサポートされていますが、通知が英語だし味気ないので、タスク完了したら可愛い女の子が褒めてくれる仕組みにしたいです… ちなみに、RaspberryPi3 上で動かします。
というわけで。
ゴール
Trelloのウェルカムボードのカードの移動を、Flaskで作ったサーバにWebhookで通知させる。 サーバに通知がきたら、slackにPostする。
今回の記事では、Flaskでサーバを立てて、そこにTrello Webhookの通知がくるところまでを目指します。
インストール
Python3, pip3は入ってるという前提です。
sudo pip3 install flask py-trello slacker
Flaskでサーバを用意
Trello Webhookを受け取るためのサーバをFlaskで用意します。
webhook_server.py
from flask import Flask, request, abort import pprint app = Flask(__name__) @app.route('/webhook', methods=['POST']) def webhook(): if request.method == 'POST': pprint.pprint(request.json) return '', 200 else: abort(400) @app.route("/webhook", methods=["HEAD"]) def webhook_creation(): if request.method == "HEAD": return "", 200 else: abort(400) if __name__ == '__main__': app.run(port=5000, host="0.0.0.0")
Trello Webhookの登録
Trello Webhookに、作ったサーバを登録します。 py-trelloを用いてTrello APIにアクセスしますが、その際にAPIキーとトークンが必要になります。 APIキーとトークンの取得方法は、以下のページを参考にしてください。
Trello の Webhook API をPHPで受け取ってみた - きじとら
APIキーとトークンの情報をまとめたsecret_tokens.py
を作っておきましょう。
secret_tokens.py
trello_api = "#Your API Key HERE#" trello_token = "#Your token HERE#"
さて、Webhookの登録をします。 Webhookの登録には、WebhookサーバのURLと、通知をもらいたいアイテム(ボードだったり、カードだったり)のIDが必要です。 py-trelloを使ってアイテムのIDを取得する方法は以下のページに詳しいです。
Python + py-trelloで、Trello APIを使ってみた - メモ的な思考的な
今回は、Trelloに登録したときに必ず存在するはずの、ウェルカムボードを登録します。
trello_regist_webhook.py
from trello import TrelloClient import secret_tokens def main(): server_url = "http://[自分のグローバルIP]:5000/webhook" client = TrelloClient( api_key=secret_tokens.trello_api, token=secret_tokens.trello_token ) all_boards = client.list_boards() for board in all_boards: if board.name == "ウェルカムボード": welcome_board = board break webhook = client.create_hook(callback_url = server_url, id_model = welcome_board.id) if webhook == False: print("Failed webhook registration") else: print("Success!") if __name__ == "__main__": main()
先程作ったwebhook_server.pyを実行させた状態でtrello_regist_webhook.pyを実行すると、Webhookが登録されます。
python3 webhook_server.py & python3 trello_regist_webhook.py
Success!と表示されればWebhookの登録が正しく完了しています。
実験
さて、webhook_server.pyを起動している状態で、Trelloのウェルカムボード上で何かしてみましょう。 試しに、一番左の「やってみる」リストから、真ん中の「やったこと」リストにカードを移動させてみましょう。 すると…
Trelloの更新情報がJSONで送られてきました!
実際は、Python内部では送信されたJSONをパースして辞書形式で持っています。 あとは、必要な情報をその辞書から抜き出してやればOKです。
今回はここまで。 次回はslackに投稿する部分を作って、システムを完成させます。
参考
Python + py-trelloで、Trello APIを使ってみた - メモ的な思考的な
Trello の Webhook API をPHPで受け取ってみた - きじとら
GitHub - sarumont/py-trello: Python API wrapper around Trello's API
trelloのboardにwebhookを登録する - pblog
2017/09/22 記事修正
slackbotライブラリの代わりにslackerライブラリを使うことにしましたので、タイトルを修正。