2011年12月13日火曜日

cakePHP - twitterAPIを使う

cakePHPでtwitterAPIを使う。超分かり易くて簡単なライブラリがあった。

Consuming OAuth-enabled APIs with CakePHP

このページからライブラリをダウンロードして、vendorsに、OAuthフォルダをそのまま格納する。
そして、controllerとviewにそれぞれ下記のようなコードを書く。
※コールバック用URLとコンシューマーキー、コンシューマーシークレットは状況に合わせて入力する必要がある


hoge_controller.php
<?php 
App::import('Vendor', 'oauth', array('file' => 'OAuth'.DS.'oauth_consumer.php'));

class HogeController extends AppController{
    public $name = 'Hoge';
    public $uses = Null;
 
    function index(){
        //セッションからアクセストークンの取得
        $accessToken = $this->Session->read('twitter_access_token');
        if(!empty($accessToken)){
            $consumer = $this->createConsumer();
            //認証情報の確認
            $user_data = $consumer->get($accessToken->key, $accessToken->secret,
                'http://api.twitter.com/1/account/verify_credentials.json');
            $user_data = json_decode($user_data);
            if(!$user_data->id){
                $this->redirect('./login');
            }
            $this->set('user_data',$user_data);
        }else{
            $this->redirect('./login');
        }
    }

    public function login(){
  
    }
 
    public function logout(){
        $this->Session->delete('twitter_access_token');
        $this->redirect('./login');
    }
 
    public function twitter() {
        $consumer = $this->createConsumer();
        $requestToken = $consumer->getRequestToken('https://api.twitter.com/oauth/request_token', 'http://コールバックURL');
        $this->Session->write('twitter_request_token', $requestToken);
        $this->redirect('https://api.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('https://api.twitter.com/oauth/access_token', $requestToken);
        $this->Session->write('twitter_access_token', $accessToken);
        $this->redirect('./');
    }

    private function createConsumer() {
        return new OAuth_Consumer('コンシューマーキー', 'コンシューマーシークレット');
    }
}
?>


index.ctp(index用のview)
<h1>Hoge!</h1>
<img src="<?php echo $user_data->profile_image_url;?>" width="24" height="24" />
<?php echo $user_data->screen_name; ?>
 ( <a href="./logout">Logout?</a> )


login.ctp(login用のview)
<h1>Hoge!</h1>
<h2><a href="./twitter">Please Login!</a></h2>


これで、下記のようにtwitterAPIを使ってログインできるようになり、ログインすると、twitterアカウントのアイコンとscreen_nameが表示される。


ログインしていないと、下記のログイン画面が表示される。


ログインした後のindex画面

0 件のコメント:

コメントを投稿