Home

技術日記
Zend_Service_TwitterでBASIC認証からOAuthに切り替える方法Edit

古い(BASIC認証用の)ZendServiceTwitterを使ってTwitterのbotをいろいろ動かしていたんだけど、そのまま放置していたらBASIC認証が使えなくなって動かなくなっていた。

ZendServiceTwitterも今のバージョンはOAuthに対応しているんで、それに切り替えようと思ったんだけど、OAuthってことはアプリケーション登録してConsumerKeyとConsumerTokenを設定するだけじゃなく、自分のアカウントがそのアプリケーションにアクセスを許可(権限を移譲)するためのAccessTokenとかSecretTokenとかを発行してもらう必要があり、それってめんどくさ、と思ってそのまま放置していた。

けど、Twitterでめんどくさとつぶやいたら、bot用のキー入手方法が用意されてるよ、と教えてもらったので、その情報を利用してOAuth対応したついでに、そのやり方をオンラインにフィードバックしておく。

従来のBASIC認証対応のZendServiceTwitterだと、

$userName = ''; // twitterのアカウント
$password = ''; // twitterのパスワード
$twitter = new ZendServiceTwitter($userName, $password);
みたいな感じでZendServiceTwitterオブジェクトを生成していたけど、OAuth対応にする場合は、
  • まずbotアカウントでログインした状態で、http://twitter.com/appsにアクセスして、bot用のアプリケーション登録を行う。Default Access TypeはbotならばRead & Writeにすることを忘れない。→Consumer keyとConsumer secretが得られる。
  • 続いて、http://dev.twitter.com/apps/にアクセスして、該当アプリケーションのMy Access Tokenを見る。→Access Token(oauthtoken)とAccess Token Secret(oauthtokensecret)が得られる。
という下準備をしておいてから、
$accessToken = ''; // Access Token
$accessTokenSecret = ''; // Access Token Secret
$token = new ZendOauthTokenAccess();
$token->setToken($accessToken);
$token->setTokenSecret($accessTokenSecret);
$config = array(
  'consumerKey' => '', // Consumer key
  'consumerSecret' => '', // Consumer secret,
  'accessToken' => $token,
);
$twitter = new ZendServiceTwitter($config);
といった感じになる。

ZendServiceTwitterとかZend_Oauthとかのドキュメントを読んでも、OAuth対応のWebアプリケーションを作る場合の書き方(Twitterでの認証結果をコールバックURLで受け取って……みたいなの)はサンプルにあるんだけど、botみたいにあらかじめAccess TokenとかAccess Token Secretとかが分かっている場合の使い方が書いてなくて、結局ソース読んで試行錯誤する羽目になったんで、ここにやり方をまとめておく。

ひとまずこれで動いているけど、お作法が美しくないとか、無駄があるとかの問題はあるかもしれない。

Published At2010-09-17 18:53Updated At2019-12-30 15:31