TwitterボットアプリとTwitterアカウントをつなぐためだけの簡単なOAuth認証

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

一昨年のTwitter4jとGAE/jでTwitterボット作成がだいぶ古くなってて「このソース今でも使えますか?」とメールで質問をいただきましたのでフォロー記事を書いておきます。

あれからTwitter4jも結構バージョンアップされてますが最新バージョンでもビルドパス通せばとりあえずコンパイルは通りますね。基本的に一昨年から変わった点と言えばやはりBasic認証からOAuthに切り替えることだけです。

ちなみにあの時作ったボットは今は存在してません。ついっこ的なボットにあんまり需要がないと感じたのとコミュニティとして一切成り立たなかったので停止しました。まあ非コミュな僕がコミュニティとは笑い話にもなりませんが。

で、とりあえずOAuth対応する最低限の修正は以下の通り。

※コード中の“daibentter”はご自分のボットアカウントに変更してください。

“各キー情報”と“Twitterオブジェクトを生成”のとこ以外はほぼ前回と同じです。[@daibentter](http://twitter.com/#!/daibentter)で実際動いています。“Eclipseのコンソールで取得”ってなんやねんって感じですが次のサイトを参考にしました。Twitter4Jを使ったTwitterのOAuth認可サンプル

OAuthって言うと一旦Twitterにリダイレクトされて「許可しますか?」的な画面でユーザーが許可するとアプリからそのユーザーの情報にアクセスできるといったイメージが強いですがこのボットの場合はそれ要らないんですよ。

このボットの仕様はボットをフォローしてリプライ飛ばせばボットが代わりにつぶやいてくれる仕様です。利用したいユーザーはボットをフォローすればいいだけだから。他にもリダイレクト云々なOAuthする必要のない仕様のボットってたくさんあります。あるキーワード拾ってリツィートするボットだってリダイレクト云々いらないですよね。

つまり“ボット作者がTwitterボットアプリとTwitterアカウントをつなぐためだけの認証”はもっと簡単で良いんですよね。Twitter4Jを使ったTwitterのOAuth認可サンプルのTwitterOAuthAccessTokenGetterのmainメソッドをEclipseで実行すればEclipseのコンソールとブラウザで認証作業ができます。そこで得たキーを先ほどのコードに書くと言うわけです。

※Twitterアプリを登録するにはTwitterボットをOAuthに対応させてみた - Google App Engine(Python)など参考にしてください。また、アプリケーションの種類は必ず“クライアントアプリケーション”にしてください。

Twitterのトークンの有効期限は良く知らないですが僕の古い記憶だと特になかった気がします。だから最初に1回TwitterボットアプリとTwitterアカウントをつなぐためだけの簡単なお仕事をすれば良いだけです。

※有効期限あったらごめんなさい、その時は期限が切れたらこの作業を手動で繰り返すか期限切れは再認証処理を自動で行うコードを書いたら良いと思います)

Javaで標準入出力とかよくわからんけどGAE/jでWebアプリケーションなら解るから

Twitter4Jを使ったTwitterのOAuth認可サンプル

のTwitterOAuthAccessTokenGetterのmainメソッドをどう書いたらええのん?ってゆー方は以下のコードを別で書いてください。

web.xmlに上記を足せばローカルでhttp://localhost:8888/signinとやるだけで起動できます。

その後はあくまで“Eclipseコンソール上”で操作しますので間違えないように。ブラウザ上ではレスポンス待ってる状態っぽくグルングルン回ってますがそれはEclipseコンソール上で入力を待ってるんです。

あとこの認証作業はデプロイする必要ありません。アクセストークンもらったらGAE上では用無しなんでweb.xmlは元に戻してデプロイしましょう。アクセストークンもらうまではローカルで充分ってゆーことです。