[CakePHP] TwitterのOAuth認証を利用するライブラリ
OAuth consumers for CakePHP – by cakebakerCakePHPでTwitterのOAuth認証を利用するライブラリが公開されています。
上記サイトからコンポーネントファイルをダンロードして、vendorsディレクトリ下に配置します。
以下、OAuth認証後につぶやきを投稿するサンプルコードです。
(コードは上記サイトのExampleより引用しています。)
app/controllers/example_controller.php
App::import('Vendor', 'oauth', array('file' => 'OAuth'.DS.'oauth_consumer.php'));
class ExampleController extends AppController {
public $uses = array();
public function twitter() {
$consumer = $this->createConsumer();
$requestToken = $consumer->getRequestToken('http://twitter.com/oauth/request_token', 'http://test.localhost/example/twitter_callback');
$this->Session->write('twitter_request_token', $requestToken);
$this->redirect('http://twitter.com/oauth/authorize?oauth_token=' . $requestToken->key);
}
public function twitter_callback() {
$requestToken = $this->Session->read('twitter_request_token');
$consumer = $this->createConsumer();
$accessToken = $consumer->getAccessToken('http://twitter.com/oauth/access_token', $requestToken);
$consumer->post($accessToken->key, $accessToken->secret, 'http://twitter.com/statuses/update.json', array('status' => 'hello world!'));
}
private function createConsumer() {
return new OAuth_Consumer('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');
}
}
ライブラリの作者様に感謝します。
OAuth認証後にTwitterのユーザーデータを取得する方法
追記 2012/01/27OAuth認証後に取得したアクセストークンと一緒に以下のAPIを叩きます。
JSON形式
http://twitter.com/account/verify_credentials.json
XML形式
http://twitter.com/account/verify_credentials.xml
上記サンプルコードのtwitter_callbackメソッドを変更して、Twitter IDとスクリーンネームを出力してみます。
public function twitter_callback() {
$requestToken = $this->Session->read('twitter_request_token');
$consumer = $this->createConsumer();
$accessToken = $consumer->getAccessToken('http://twitter.com/oauth/access_token', $requestToken);
// Twitterのユーザーデータを取得
$json = $consumer->get($accessToken->key, $accessToken->secret, 'http://twitter.com/account/verify_credentials.json');
$users = json_decode($json, true);
// Twitter ID
pr("id_str=".$users['id_str']);
// スクリーンネーム
pr("screen_name=".$users['screen_name']);
}
出力結果
id_str=55865686 screen_name=happytrap
取得できましたね。
HttpSocketクラスが読み込めないエラー
追記 2012/01/25CakePHP 2.x で使用すると以下のエラーが表示されます。
Fatal error: Class ‘HttpSocket’ not found in /path/to/app/Vendor/OAuth/oauth_consumer.php on line 111
この場合は、OAuth/oauth_consumer.phpの15行目付近の以下のコードを変更します。
変更前
App::import('Core', 'http_socket');
変更後
App::uses('HttpSocket', 'Network/Http');
前の記事 « ImageMagickとRMagickのインストール
次の記事 » Ruby on Rails Routing Error