SlackとTwitterのAPIで「「進捗煽り」煽りBot」を作る

この記事はSYSKEN Advent Calendar 2017,3日目の記事です。

はじめに

ふぃらっはです。

まだ始まって3日しか経っていないSYSKEN Advent Calendar 2017ですが,なぜか私が募集担当になっていて,12月になる直前まで色んな人に参加のお願いをして回っていました。幾度もの土下座や,先輩方のご助力のおかげもあって,なんとか全日程を埋めることができました。

しかしながら,Advent Calendarの仕事は人を集めただけで終了ではありません。遅刻や投稿忘れがないよう,毎日投稿者を煽る必要があります。

そこで,進捗煽りをもっと効率的に行えるよう,「「進捗煽りをしろ」と煽ってくるBot」,略して「「進捗煽り」煽りBot」をPHP+Slack API+Twitter APIで制作することにしたので,制作の過程を紹介していきたいと思います。

1. Slack側で設定

まずはAPIを叩くための設定をします。AppディレクトリからIncoming Webhookを見つけだし,さっくり設定すると,Webhook URLがもらえます。

このURLに向けてPOSTリクエストを投げつけるスクリプトを書くと,

任意のチャンネルに好きなメッセージを投稿することができます。すごく簡単ですね。

 

2. Twitterから情報を取得する

シス研のTwitterアカウント(@sysken)は当しすけんぶろぐ♪と連携していて,こっちで記事を投稿すると自動で記事のURLがつぶやかれるようになっています。なので,@syskenの最新のつぶやきを取得し,ツイート日時を見ることで,その日の投稿が既にされているかどうか判別できます。

詳細は省きますが,PHPでTwitter APIを叩いて@syskenの最新ツイートを取得すると,こんな感じのレスポンスが得られます。

なんか文字化けしてますが,投稿日時以外の情報は必要じゃないので無問題です。

さて,投稿日時の情報は,レスポンスボディの一番上にある”created_at”に格納されています。画像を見るとFri Dec 01 08:40:15 +0000 2017 となっていますが,これは罠で,本来の投稿日時から9時間遅れた日時になっています。単純にこの日時を9時間進ませた上で比較する必要があります。

いい感じに処理をかまして,現在の日時との比較を行うスクリプトをパパっと書いちゃいます。

実行時,その日の記事がまだ投稿されてなかったら「やばい」と出力するスクリプトが出来上がりました。

 

3.組み合わせる

記事が投稿されていなかったとき,「やばい」と出力する代わりにSlackで煽るようにすれば完成です。先ほどのスクリプトを組み合わせて,

  1. @sysken の最新ツイートを取得
  2. 現在の日時と最新ツイートの投稿日時(当ブログの最新記事の投稿日時と等しい)を比較
  3. もし最新ツイートの投稿日が1日前ならSlackのAPIを叩きメッセージを飛ばす

ようにします。

最終的にこんなメッセージが送られてくるようになります。

あとはこのスクリプトをcronとかで毎日21時くらいに実行すれば「「進捗煽り」煽りBot」の完成です。

 

おわりに

……という感じでBotを作ったはいいんですが,スクリプトを設置するサーバーがないので実際に動かすのは険しそうです。残念です。

今回は締切の関係で「「進捗煽り」煽り」という間接的な煽りしかできませんでしたが,Slack APIを使えば普通に記事投稿者本人を煽ることも可能です。さらに,Twitter APIを活用することで,「締切2時間前にも関わらずTwitterやってるのんきな投稿者を煽る」という最高に意地の悪いBotも作れます。時間があれば作ってみようと思います。

制作工程を見ればわかるように,Slack APIもTwitter APIもかなり簡単に触れるようになっています。みなさんもぜひAPIを活用して日常の不便を解決してみてください。

 

参考にさせていただいたサイト

PHP から Slack の Incoming WebHooks を叩く – Qiita
GET statuses/user_timeline — Twitter Developers
PHP: DateTime – Manual


コメントを残す

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