忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/11/23 14:11 |
PECL::OAuthでtwitterログイン
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"を有効にします。
<?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


2011/01/24 21:45 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2011/01/30 | HOME | 買ったものリスト 2011/01/23>>
忍者ブログ[PR]