edo1z blog

プログラミングなどに関するブログです

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=&quot;<?php echo $user_data->profile_image_url;?>&quot; width=&quot;24&quot; height=&quot;24&quot; />
<?php echo $user_data->screen_name; ?>
 ( <a href=&quot;./logout&quot;>Logout?</a> )



login.ctp(login用のview)

<h1>Hoge!</h1>
<h2><a href=&quot;./twitter&quot;>Please Login!</a></h2>



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


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



ログインした後のindex画面