前はGAE/JRuby/Sinatraで書いていたんだけど、全部のbotが4月くらいに止まってた。Webからの認証も通らないし手も足も出ない。なので、アカウント取り直して、せっかくだから別の言語で、せっかくだからちゃんとOAuth対応botにして書き直したら意外と時間がかかった。
ちなみに書き直して復活させたのは以下の三人。
- ホモ http://twitter.com/abe_taka_kazu
- ロノウェ http://twitter.com/ronouee
- 夏妃 http://twitter.com/ushiro_nappie
同じ機能のbotを別の言語で書き直すって意味あんの?botなんて書いてどうすんの?っていう人もいるだろうが、実は(GAE上で動く)Twitterのbotを書くのは新しい言語のお勉強としてはなかなかいい「慣らし」になる。なんでかっていうと、当該言語における以下の機能をフォローする必要があるから。
- Twitter用の外部ライブラリを使う場合、そのinstall/includeの仕方
- 特定の言葉/文章に反応させるための正規表現
- protectedなユーザをフォローしようとした場合等に投げられる例外の処理
- 設定ファイルを使う場合、外部ファイルの読み込み/パース
- (GAEの場合)外部への通常のhttp通信は禁止されているので、標準httpライブラリをurlfetchに差し替えるハック
とかとか。ちなみに今回はこのへん(http://d.hatena.ne.jp/yuroyoro/20090701/1246448458)とかこのへん(http://d.hatena.ne.jp/RKTM/20091203/p1)を参考にしてmavenでGAE/Scala/Lift環境を作ったのでmavenべったり。以前はmavenって何それおいしいの状態だったけど、仕事で一日に数十回mvnコマンド打ってたらそりゃpom.xmlファイルくらいはいじれるようになる。
でまあ、今回は設定ファイル(といっても.scalaだけど)とその他機能が前のものより分離できているのでgithubにあげてみた。
http://github.com/zentooo/gae-scala-twitter-bot
git clone git://github.com/zentooo/gae-scala-twitter-bot.git
して、Twitterにアプリ登録して、consumer keyとconsumer secretもらって、何らかの方法でbotに認証通してoauth tokenとoauth token secret手に入れて(このへん参考 http://iyouneta.blog49.fc2.com/blog-entry-446.html)、それをsrc/main/scala/com/zentooo/bot/Config.scalaのそれっぽいところに書いて、その他ランダム投稿とか正規表現によるリプライの部分を書き換えて
mvn package appcfg.sh target/gae-scala-twitter-bot-1.0
でGAEにアップロード完了。ちなみにテストの中にTwitterにマジ投稿するコードが含まれているため、botのアカウントにテスト用発言をさせたくない人はmvn package -Dmaven.test.skip=trueで。でも、これだとConfig.scalaの設定部分がおかしい場合でもパスされちゃうけどね。
これだけだとあまりに意味不明かつ価値のない記事なので、もっと詳細なやつをそのうち書く、かも。