この記事は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で煽るようにすれば完成です。先ほどのスクリプトを組み合わせて,
- @sysken の最新ツイートを取得
- 現在の日時と最新ツイートの投稿日時(当ブログの最新記事の投稿日時と等しい)を比較
- もし最新ツイートの投稿日が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
コメントを残す