ホーム » ブログ » [CakePHP] TwitterのOAuth認証を利用するライブラリ

[CakePHP] TwitterのOAuth認証を利用するライブラリ

[CakePHP] TwitterのOAuth認証を利用するライブラリ

CakePHPでTwitterのOAuth認証を利用するライブラリが公開されています。


上記サイトからコンポーネントファイルをダンロードして、vendorsディレクトリ下に配置します。

以下、OAuth認証後につぶやきを投稿するサンプルコードです。
(コードは上記サイトのExampleより引用しています。)

app/controllers/example_controller.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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');
    }
}

ライブラリの作者様に感謝します。


追記 2012/01/27

OAuth認証後にTwitterのユーザーデータを取得する方法

OAuth認証後に取得したアクセストークンと一緒に以下の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

取得できましたね。


追記 2012/01/25

HttpSocketクラスが読み込めないエラーの対策

CakePHP 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');
前の記事 «
次の記事 »