IT Office Nishimiyahara

個人用スマホから商用プログラミングまでなんでもお任せ下さい

Perl入学式に関するツイートをIdobataに通知するボットを作った

   

@nqounetです。

最近、IdobataというツールをPerl入学式のサポーターたちで使い始めました。

Idobataはチャットツールなのですが、webhookを経由して色々と通知を受け取れるのでなかなか快適です。

しかもなかなか充実しています。

折角なので、Perl入学式についての発言があったら通知するようなbotを作ってみました。

だいたいこんな感じ

メインスクリプトの全体像は大体こんな感じです。

まずはアプリケーションを登録

TwitterはAPIが充実していますが、使う場合は登録が必要です。

登録は英語ですが、日本語の解説を読みながらだと簡単です。

アクセストークンが必要なのでアクセストークンも発行しておきます。

発行後、しばらく待っていると発行されてページに情報が表示されるようになります。

OAuthしましょう

各種トークンの読み込みはConfig::Pitを使っていますが、パスワードを書かないようにしているだけですので、ハッシュで指定してもかまいません。

OAuthを使用するので、Net::OAuthもインストールが必要です。

Payload URL

Idobataで任意のwebhookを受信するためには、Genericを選択します。

設定にあるEndpoint URLに対してデータを送信することになります。

通信にはFurlを使用することにします。

慣れているならばLWP::UserAgentなどでも全く問題ありません。

httpsでの通信になるのでIO::Socket::SSLLWP::Protocol::httpsもインストールが必要な場合があります。

ツイートをフィルタリング

ここではAnyEvent::Twitter::Streamを使うことにします。

インスタンスを生成する時にmethodfilterを指定し、フィルタリングする内容をtrackに指定すると、該当するツイートが流れてきた時に、on_tweetが実行されます。

また、Twitterでは、HTTPSでの接続を推奨しているため、AnyEvent::Twitter::StreamのドキュメントにあるとおりNet::SSLeayもcpanfileに書いてインストールするようにしておきましょう。

サーバーに常駐させる

このまま実行するとターミナルを開けたままにしておかないといけないので、デーモン化してサーバーに常駐させます。

デーモン化するのはApp::Daemonがとてもお手軽です。

これが書いてあるスクリプトでstart,stop,statusなどのコマンドが使えるようになります。

また、デーモン化しないためには-Xというオプションをつけるとデーモン化しないので動作確認ができます。

また、不意のエラーから復活させるためProcletで監視させることにしたので、デーモン化するのはProcletの方です。

つまり、デーモン化したProcletによってロボットを監視する構成です。

また、Procletでloggerを指定することで、プログラム本体はログの出力を意識する必要がなくなりますので、非常に便利です。

サーバーに常駐させるスクリプトを作るときには、この構成が手軽で良さそうな気がします。

このファイルも加えた結果、cpanfileはこうなりました。

なお、デバッグ用にData::Printerも追加しています。

carton installでインストールされたモジュールは98個になっていました。

…多いですね。

しばらくはこの構成で様子を見てみようと思います。

参考になる資料

respo

respo link

ZenBackWidget

 - 情報技術について , , , , ,