Twitter4jとGAE-jでTwitterボット作成

※この記事の内容は更に古くなっています。今はTwitterアプリ設定で「Create my access token」だけでこんなややこしいことしなくてもOKです。

※こちらはTwitterのBasic認証の記事になります。OAuthを利用した記事はTwitterボットアプリとTwitterアカウントをつなぐためだけの簡単なOAuth認証になります。

だいぶご無沙汰ですが、個人的なバタバタもだいぶ落ち着きましたので、またブログ更新もぼちぼちやっていきたいと思います。最近はSocialWeb、クラウド系の開発が多く、いろんな技術の連携、マッシュアップ的な開発手法が身につきました。ネタ的にもそろそろ充実してきましたので積極的にアウトプットしていきたいと思ってます。

今回はTwitter4jとGAE/j(Google App Engine for Java)でTwitterボットを作成します。事の発端は趣味のスノボーのコミュニティをTwitterで作りたくて、最初「ついっこ」で作ろうとしたんですが、どういうわけか認証が通らないとかなんかで申請が拒否られて、問い合わせても音沙汰が無いので、じゃあ同じもの自分で作りますか、ということで作ることになりました。

だから仕様はついっこの真似です。以下のような仕様を実装します。

  • フォロワーがボットにリプライすると、それと同じ内容をポストする
  • その際、発言者のユーザーIDとコミュニティのハッシュタグを付与する
  • ポストした内容は一応BigTableに永続化しておく(これはやりたかっただけ)

まあ、思いつきで作るならこれくらいの仕様がちょうど良いでしょう。

では早速コードを紹介。ちなみにJava屋ではありません。ほぼ学習目的です。

はい、ホント一気に書いちゃった感の強いコードなので突っ込み歓迎です。参考になればどうぞ。

一応解説しますと、まずJavaでTwitter APIを扱うのに便利なTwitter4jというライブラリがありましたので、これを含めてGAE開発環境を整えます。この辺はGAEでTwitterのbotを作る のまとめページが詳しいです。ていうか半分はここの手順どおりやるだけでできちゃいますね。

やってることはこんな感じ。

  • リプライ内容を取得する
  • リプライ内容を回しフォロワーのリプライなら処理を続ける
  • Low level APIでフィルタをかけてBigTableからポスト内容と合致するデータを取得
  • 合致するデータが存在しなければリプライ内容をポストすると同時にBigTableに登録する

多分、重複チェック的ロジックでポスト済みデータかどうか判断している部分はBigTableなんか使わなくても他にも良い方法がたくさんあると思いますが、今回は単純にLow level APIを学習目的で使いたかっただけです。Low level APIに関しては#appengine JavaのLow-Level API(低レベルAPI)入門が詳しいです。

あとはTwitter APIについて理解が薄いとよくわかりません。私みたいに勢いで始めるとFriendとFollowerとかReplyとMentionsとか言葉に惑わされる部分が多々ありました。事前にTwitter API 仕様書 (勝手に日本語訳シリーズとかTwitter4jサポートAPIなどは目を通しておいた方が良いでしょう。

で、これをcronの設定をしてGAEにデプロイすれば完成です。cronの設定方法はcron(定期的にプログラムを起動する)を設定してみようが詳しいでしょう。ちなみにコード中の「username」と「password」はそれぞれ自分のアカウントのやつですよ。