Zend_Oauthでリダイレクトを行いつつのTwitterログイン、twitterauthでリダイレクト無しでのTwitterログインに成功しました。
何が障害になっていたかというとアクセストークンです。
TiwitterAPIを利用するアプリにはパスワードを知らせず、アクセストークンだけを教えることでパスワード漏洩を防ぐのがoAuthの目的です。
逆にパスワードを登録してもいいから直接投稿したいんだという場合でも直接の投稿はできず、一旦アクセストークンを入手し、それを利用して投稿する必要があります。
そのアクセストークンを入手するためにブラウザを経由してパスワードを入力したのが前々回で、直接アクセストークンを突っ込んだのが前回となります。
では、PHPだけでパスワードから直接アクセストークンを拾ってこれないのかというと、Zend_OauthやZend_Service_Twitterには何故かそういう機能が見あたらないんですよね。
実はPecl::OAuthという拡張モジュールがしれっと対応していたりします。
標準では入っていないのでLinuxであれば"pecl install oauth-beta"、XAMPPであれば"extension=php_oauth.dll"を有効にします。
完成しました。
さっそく実行
Fatal error: Uncaught exception 'OAuthException' with message 'Invalid auth/bad request (got a 401, expected HTTP/1.1 20X or a redirect)'
おうふ!
実はこのプログラムはOAuthではなく、xAuthという認証機構を使用しています。
内容は似たようなものですが、OAuthがアプリ側にパスワードを一切知らせることがないのに対し、xAuthはアプリにパスワードを知らせるという大きな違いがあります。
で、このxAuthはパスワードを扱える性質上、OAuthに比べて使用の敷居が高くなっています。
具体的には、Twitterにメールで許可を取らないとxAuth認証できません。
http://written.4403.biz/archives/2010/03/twitter-xauth.html
めんどくせー。
許可を取りさえすれば、$oauthTokenと$oauthTokenSecretを突っ込むだけで簡単に投稿ができるようになります。
めでたし。
何が障害になっていたかというとアクセストークンです。
TiwitterAPIを利用するアプリにはパスワードを知らせず、アクセストークンだけを教えることでパスワード漏洩を防ぐのがoAuthの目的です。
逆にパスワードを登録してもいいから直接投稿したいんだという場合でも直接の投稿はできず、一旦アクセストークンを入手し、それを利用して投稿する必要があります。
そのアクセストークンを入手するためにブラウザを経由してパスワードを入力したのが前々回で、直接アクセストークンを突っ込んだのが前回となります。
では、PHPだけでパスワードから直接アクセストークンを拾ってこれないのかというと、Zend_OauthやZend_Service_Twitterには何故かそういう機能が見あたらないんですよね。
実はPecl::OAuthという拡張モジュールがしれっと対応していたりします。
標準では入っていないのでLinuxであれば"pecl install oauth-beta"、XAMPPであれば"extension=php_oauth.dll"を有効にします。
<?php //xAuthオプション //アプリ認証 $oauth_consumer_key = 'hogehoge'; $oauth_consumer_secret = 'fugafuga'; //ユーザ認証 $x_auth_username = '********'; $x_auth_password = '********'; //固定 $oauth_signature_method = 'HMAC-SHA1'; $oauth_version = '1.0'; $x_auth_mode = 'client_auth'; //URL $xAuthAccessTokenUrl = 'https://api.twitter.com/oauth/access_token'; $oAuthStatusesUpdateUrl = 'http://twitter.com/statuses/update.xml'; //xAuth認証 //変数纏め $x_auth_params = array('x_auth_mode'=>$x_auth_mode, 'x_auth_username'=>$x_auth_username, 'x_auth_password'=>$x_auth_password); //PECL::oAuthを利用してxAuthもできる $oauth = new OAuth($oauth_consumer_key, $oauth_consumer_secret, OAUTH_SIG_METHOD_HMACSHA1, OAUTH_AUTH_TYPE_URI); $oauth->disableSSLChecks(); $oauth->fetch($xAuthAccessTokenUrl, $x_auth_params, OAUTH_HTTP_METHOD_POST); $response = $oauth->getLastResponse(); //oAuthトークンを取得 //URLそのままになってるのでパースが必要 parse_str($response, $accessTokenInfo); $oauthToken = $accessTokenInfo['oauth_token']; $oauthTokenSecret = $accessTokenInfo['oauth_token_secret']; //投稿 $status_string = '投稿てすと'; //変数纏め $parameters = array('status'=>$status_string); //認証トークンセット $oauth->setToken($oauthToken, $oauthTokenSecret); //送信実行 $oauth->fetch($oAuthStatusesUpdateUrl, $parameters, OAUTH_HTTP_METHOD_POST); $response = $oauth->getLastResponse();
完成しました。
さっそく実行
Fatal error: Uncaught exception 'OAuthException' with message 'Invalid auth/bad request (got a 401, expected HTTP/1.1 20X or a redirect)'
おうふ!
実はこのプログラムはOAuthではなく、xAuthという認証機構を使用しています。
内容は似たようなものですが、OAuthがアプリ側にパスワードを一切知らせることがないのに対し、xAuthはアプリにパスワードを知らせるという大きな違いがあります。
で、このxAuthはパスワードを扱える性質上、OAuthに比べて使用の敷居が高くなっています。
具体的には、Twitterにメールで許可を取らないとxAuth認証できません。
http://written.4403.biz/archives/2010/03/twitter-xauth.html
めんどくせー。
許可を取りさえすれば、$oauthTokenと$oauthTokenSecretを突っ込むだけで簡単に投稿ができるようになります。
めでたし。
PR
トラックバック
トラックバックURL: