[Slack+Mesh] DjangoでAPI作ってTodoistの内容をSlackに表示する

題名のとおり。
Meshのオリジナルタグを作成して、
「指定の場所に近づいたら、SlackにTodoistを通知する」
を試しに作ってみました。

やりたいこと

日頃、いろんなタスクやらをTodoistで管理するようにしているのですが
その中でもスーパーに行ったときに買うものリストなどもTodoistにて管理しています。

プロジェクトはこんな感じになっています。

そのプロジェクトに、タスクとして買いたいものを積んでおきます。
ここに入れておくものは、いわゆる「行ったついでに買おうかな」程度の
「絶対買うつもり」のものではなくてゆるーく積んであるもの。
なので、近くに寄ったらついでに買うかーと、思い出せればよいLvのものになります。

一応、Todoistの機能としても、範囲に近づいたら通知する・・・というのはできるのですが
1項目ごとに場所をいちいち設定するのはめんどくさい。
どちらかというと、プロジェクトに対して近づいたらお知らせする・・・というのが
できたほうが便利だよなぁと常々思っていました。

そこで登場したのがSlack。

こんな感じで、指定の範囲に近づいたら、Todoistの内容をSlackに通知して
URLをクリックすれば中身を見れるようにできそうだったので
作ってみました。

前置きおわり。

まず、今回使用するのは 通知用のSlack。
そして、TodoistからTaskを取得してSlackに流すためのDjangoのAPI。
最後に、いろいろサービスをつなげてくれるMesh。

一応今回のはMeshなしで、
IFTTTのLocation -> WebHooks でもOKなのですが
Djangoにアクセス制限かけたりセキュリティ的にいろいろやるのがめんどくさかったので
Meshを経由する方法にしています。
(Meshのカスタムタグをためしたかったというのもあるけど)

まずは、Slackに対して通知を送れるようにするURLを作成します。

https://slack.com/services/new/incoming-webhook

Slackのページからインカミングウェブフックのページにて

どのチャンネルに投稿するのかを指定して、フック用のURLを取得します。

取得したら、あとはPython側からrequestsでPOSTしてあげればOKです。
超簡単です。

成功すると、こんな感じで投稿ができます。

続いて、Todoistからのタスク取得。

Todoistは公式でPythonからのモジュールを公開している(pytodoist)それを利用して
タスクを取得します。

Todoistの公式HPの設定>連携>APIトークンをコピーしておいて、

api_tokenを使用してログインして、タスクを取得してきます。
プロジェクトへのURLは、todoist.comにプロジェクトIDを入れることで取得できるので
今回はこのURLをSlackに投稿するようにします。

次に、Djangoのプロジェクトを作成してあげて、Views.pyを編集します。
それ以外のURLやらはほかの同じなので省略。

URLにアクセスすると、Todoistのタスクをチェックして、タスクが1つでもあればSlackに通知するようにします。
GETでTodoistのプロジェクト名を取得して、それをもとにゴニョゴニョしていきます。

このURL自体はローカルにあるサーバーPCで実行するもので外には公開しません。

一応土台はできたので、Meshを使用してこのURLを実行します。

流れは

IFTTT(Location -> Mesh) — Mesh( IFTTTで受信 -> カスタムタグ ) — オリジナルTagでDjangoのAPIを実行 —> Slackに通知

になります。

https://meshprj.com/sdk

Meshのカスタムタグを作るには、SDKのページにログインして設定を行います。

マイページでNewTagを選択して、タグを作成します。

プロパティでどのTodoistのプロジェクトを実行するのかを指定できるようにします。
Connectorは、Locationが実行されたら~なのでなくてもOKかもしれませんが念のため。

そして、CodeのExecuteに

先ほど作ったDjangoのURLを指定します。
Meshは、ローカル環境内にあるラズパイで実行しているものなので、
URLもローカルIPでOKです(192.168.0.100 がローカル内のDjangoを実行しているIP)

Meshのプロパティは、 properties.XXXX で取得してからGETのDATAにセットしておきます。

ハマった点は、getの後ろに/がないと正しく動かなかったのと
data としてGETのパラメーターを入れなかった場合、Django側での
UnicodeErrorになってしまったりしたところ。この辺のHTTP回りの挙動は
いまいちよくわかりません(汗

セットが終わったら、Saveで保存して iPadのMeshアプリを起動します。

Meshのカスタム内の 追加 を押して、先ほど作成したカスタムタグを選択すると
Mesh上で使用できるようになります。

プロパティでTodoistのプロジェクトを指定して

Locationタグで、場所を指定してから作成したカスタムタグに接続します。

無事送信できると、こんな感じでSlackに通知が届きます。

クリックすると、Todoistのページが表示されて、中身のチェックができます。

Slackの使い方とMeshのカスタムタグの勉強とDjangoおさらいを兼ねて作ってみましたが
なかなかいい感じになりました。
応用しようとするといろいろできそうなのが良いですね。

もっといろいろ試してみたいな~

コメントを残す

メールアドレスが公開されることはありません。

*