rhaco: rhacoでTwitter OAuthを実現する方法

oauth.zipをダウンをロード
oauth.zip

library/oauth/に内容を展開。内容はOAuth.php, TwitterOAuth.php

Twitter OAuth Clientで( http://twitter.com/oauth_clients )アプリケーションを登録。登録内容は簡単。アプリケーション名とアプリケーションのURLを入力する。Request URLは下記index.phpのURLを入力すること。Request URLだけは間違えずに。後ほど登録内容は変更も可能なので気軽に。

登録するとconsumer keyconsumer secretが表示されるのでこれをメモっておく。ここまでが前準備。

index.php

require('__init__.php');
Rhaco::import('oauth.TwitterOAuth');
Rhaco::import('network.http.Request');

$consumer_key = 'ここにconsumer keyを入力する';
$consumer_secret = 'ここにconsumer secretを入力する';

$req = new Request();
$req->usesession();

$to = new TwitterOAuth($consumer_key, $consumer_secret);
$tok = $to->getRequestToken();

$state = $req->getSession('oauth_state');

if ($req->getVariable('oauth_token') != NULL && $req->getSession('oauth_state')) {
	$req->setSession('oauth_state', 'returned');
	$state = 'returned';
}
switch($state){
	
	case 'returned':
		
		if ($req->getSession('oauth_access_token') === NULL && $req->getSession('oauth_access_token_secret') === NULL) {
			$to = new TwitterOAuth($consumer_key, $consumer_secret, $req->getSession('oauth_request_token'), $req->getSession('oauth_request_token_secret'));
			$tok = $to->getAccessToken();
			$req->setSession('oauth_access_token', $tok['oauth_token']);
			$req->setSession('oauth_access_token_secret', $tok['oauth_token_secret']);
		}
		$to = new TwitterOAuth($consumer_key, $consumer_secret, $req->getSession('oauth_access_token'), $req->getSession('oauth_access_token_secret'));
		$content = $to->OAuthRequest('https://twitter.com/account/verify_credentials.xml', array(), 'GET');
		
		var_dump($content);

		/* この2つの変数でOAuthでアクセスする
		echo $req->getSession('oauth_access_token');
		echo $req->getSession('oauth_access_token_secret');
		*/
		$req->clearSession();
		
	break;
	
	default:
		$req->setSession('oauth_request_token', $tok['oauth_token']);
		$token = $tok['oauth_token'];
		$req->setSession('oauth_request_token_secret', $tok['oauth_token_secret']);
		$req->setSession('oauth_state', 'start');
		$request_link = $to->getAuthorizeURL($token);
		echo 'Clickr for Twitter OAuth <a href="'.$request_link.'">'.$request_link.'</a>';
	
	break;
	
}

考え方は簡単。Twitterにconsumer keyとconsumer secretを送り、twitterへブラウザからアクセス。ログインしているtwitterユーザの情報からoauth_access_tokenとoauth_access_token_secretをGETで取得というもの。上記ではその2つの情報からOAuthがしっかりと通るかの確認も兼ねて https://twitter.com/account/verify_credentials.xml を取得。

アプリケーション登録時のconsumer keyとconsumer secret、ユーザそれぞれのoauth_access_tokenとoauth_access_token_secretのがあればOAuthでTwitterの操作が可能。

仕組みが分かればそんなにも難しくは無い。

OAuthでTwitterへは下記のようにアクセスする。下記ではTest OAuth update.の1行をOAuth経由でポストする。

Rhaco::import('oauth::TwitterOAuth');

$consumer_key = 'consumer key';
$consumer_secret = 'consumer secret';
$oauth_access_token = 'oauth_access_token';
$oauth_access_token_secret = 'oauth_access_token_secret';

$to = new TwitterOAuth(
	$consumer_key, $consumer_secret,
	$oauth_access_token, $oauth_access_token_secret
);

$req = $to->OAuthRequest("https://twitter.com/statuses/update.xml",array("status"=>"Test OAuth update."),"POST");