3連休中ですがボッチなので、せめてボットと戯れようと Twitter の公開タイムラインを監視&応答ツイートする Hubot のアダプターを試してみました。
ちなみに、Hubot のアダプター一覧はここで参照できます。
⇒ https://github.com/github/hubot/blob/master/docs/adapters.md
今回の大まかな方針としては、次のとおりです。
- Hubot は Heroku で動かします。
- どれくらい CPU を使うか未検証なので、無料枠に収まるかは分かりませんw
- ただ今回のもの程度であれば、私の環境では無料枠で動いています。
- ボットは Twitter の 公開タイムライン を監視します。
- よって、とりこぼしがあっても仕方なし、とします。
- ボット用の Twitter アカウントを用意します。
- Twitter へのアプリケーション登録もします。
ボットの作成で必要なものは、Mac、Yeoman の環境、Heroku のアカウントです。これらの環境を用意する手順については先日、似たようなものをこちらに書いたので、宜しければ参考にしてください。
⇒ Yoeman で Hubot を作成して Heroku へデプロイし Slack と連携する
雛形ボットの作成と動作確認
ボットの作成
-
適当な作業用のディレクトリを作成して、ジェネレータを起動。
- ジェネレータのインストールについては、上記リンクの手順をご覧ください。現在のバージョンは
0.1.4です。
$ mkdir hubot_twitter $ cd hubot_twitter $ yo hubot - ジェネレータのインストールについては、上記リンクの手順をご覧ください。現在のバージョンは
-
Bot nameとDescriptionを適当に入力し、Bot adapterはtwitterと入力します。-
Bot nameは Hubot の起動オプション-nで指定するので、ここでは適当でいいです。
-
-
次のようにファイルが展開されました。
package.jsonはこんな感じ。 -
まずは、この状態で動作するか、ローカルで動作確認します。
$ cd hubot_twitter $ ./bin/hubot -
Hubot>コンソールで、次のように応答が返ってこればOK。動作確認したらexitで抜けます。
Twitter 側でアプリケーション登録
適当なボット用の Twitter アカウントを用意し、ログイン状態で https://apps.twitter.com/ にアクセスします。
適当にアプリケーション名や説明、ウェブサイトを記載し、
Premissions タブにて、権限を Read and Write に変更します。
Keys and Access Tokens タブにて、Access Token/Secret を新たに発行します。後の為に控えておくのは次の4つの情報です。
Consumer Key (API Key)Consumer Secret (API Secret)Access TokenAccess Token Secret
ローカルで動作確認
次のように Hubot の起動スクリプトを作成し、
# !/bin/sh
export HUBOT_TWITTER_KEY="控えていた情報"
export HUBOT_TWITTER_SECRET="控えていた情報"
export HUBOT_TWITTER_TOKEN="控えていた情報"
export HUBOT_TWITTER_TOKEN_SECRET="控えていた情報"
bin/hubot -a twitter -n HogeTweetBot
※ 上記の例でいうと HobeTweetBot が語りかけ対象のボット名になります。
起動スクリプトに実行権限を付与して、実行します。
$ cd hubot_twitter
$ chomod +x local_run.sh
$ ./local_run.sh
Twitterで、確認してみます。世界中の誰がつぶやいても応答するのですが、今回はボット自らのアカウントでつぶやきます。
Heroku へのアップロードし動作確認
- 先ほどの
local_run.shと同じ立ち上げ方を Heroku 上で出来るようProcfileを修正します。
web: bin/hubot -a twitter -n HogeTweetBot
-
Git でコミットします。
$ cd hubot_twitter $ git init $ git add . $ git commit -m "firs comment"先ほどの
local_run.shには トークン等を記載してしまっているため、ファイル名を.gitignoreに追記して、コミットされないようにしてください! -
Heroku へプッシュします。
$ heroku create $ git push heroku master -
Heroku が動いているか確認します。
$ heroku openエラー出ますが、とりあえずはOK。
-
Heroku へ環境変数を追加し、もう一度
$ heroku openしてみます。$ heroku config:add HUBOT_TWITTER_KEY="控えていた情報" $ heroku config:add HUBOT_TWITTER_SECRET="控えていた情報" $ heroku config:add HUBOT_TWITTER_TOKEN="控えていた情報" $ heroku config:add HUBOT_TWITTER_TOKEN_SECRET="控えていた情報"次のように表示されればエラーは出てません。
-
Twitterで動作確認してみます。
ボットを作成してみる
ここまで出来てたら、あとは適当なボットを作成するのみです。簡単な例で、あいうえお に対して「こんにちわ!」、かきくけこ に対して「こんばんわ!」を応答するには次のようにします。
module.exports = (robot) ->
robot.respond /あいうえお/i, (msg) ->
msg.send "こんにちわ!"
robot.respond /かきくけこ/i, (msg) ->
msg.send "こんばんわ!"
上記のファイルをコミット、Heroku へ反映した後、つぶやいてみます。
また当然、Hubot の組み込みスクリプト(external-scripts.json で組み込んでいるもの)も利用できますので、試しに猫の画像を探してもらいます。
いろいろ出来そうですね^^
補足:今回の Twitter 用アダプターについて
アダプターのソースは node_modules/hubot-twitter/src/twitter.coffee です。ソースの中身をみてみると、Twitter の API名で言うと Streaming API の Public streams の statuses/filter で track(検索キーワード) を指定して、ボット名を抽出しています。
Twitter の APIリファレンス(statuses/filter)
⇒ https://dev.twitter.com/streaming/reference/post/statuses/filter
Twitter の仕様上、全タイムラインの監視はできず取りこぼしが発生し、またこのアダプターの仕様上、ボットに指示を出す場合はボット名で呼びかける必要があります。(チャットのタイムラインを robot.hear でだらっと眺める、ということが出来ない。)
もし、本格的に Twitter ボットのようなものを実現したい場合は、Node.js 用の Twitter ライブラリである twit を利用したり、上記の Twitter アダプターのソースを参考にしたり、hubot-scripts にある Twitter 系のソースを参考にしたりして、自分で作るのが良いかと思います。
また、ボットの Twitter アカウントと フォロー/フォロワー の関係を作れば、Twitter の Streaming API を利用したとしても、より取りこぼしが少ない抽出の仕方ができるかと思いますし、もしくは Streaming API を使わず、普通に Twitter クライアントアプリケーションのようなものを作ることも可能かと思います。
Twitter の APIリファレンス(Streaming API)
⇒ https://dev.twitter.com/streaming/overview
おまけ:Hubot に hubot-scripts を組み込む方法
Hubot の組み込みスクリプト(external-scripts.json で組み込んでいるもの)以外にも、「hubot-scripts」とうのも予め用意されていますので、これらも簡単に利用することが出来ます。
hubot-scripts
⇒ https://github.com/github/hubot-scripts
結構な量があるので、何がどういうものか分かりませんね^^;
今回の環境でいうと node_modules/hubot-scripts/ 配下に各ソースが格納されています。これらを Hubot へ組み込むには hubot-scripts.json に利用するものを追記して、Hubot を起動するだけです。
["twitter.coffee"]
※ .coffee も書くのに注意。
もし依存するモジュールがあれば(だいたい各ソースの先頭に説明が記載されています)、package.json に追記して $ npm install してください。
おわりに
今回のソースは GitHub に置きました。
⇒ https://github.com/hkusu/Hubot_Twitter_sample
Hubot は Heroku に簡単に載せられ(= グローバルにインターネット公開できる)、アクションを定期実行でき、各種サービス連携のアダプターも豊富、HTTPリクエストの受け取り/発行もできるしで、「チャット連携」にかぎらず、何かちょっとしたツールやサービスを作るのにも手軽でいいのかなと思います。











