May 11, 2013

FuelPHP v1.6でtmhOAuthを使ってTwitter認証と投稿をしてみる

2013/05/13 追記:
tmhOAuth依存のTwitterパッケージを作りました。 http://madroom-project.blogspot.jp/2013/05/fuelphptwitter.html

--

各種FWで使えそうなTwitter用のライブラリを再考していて、Twitterのライブラリ一覧を見てみると"tmhOAuth"というのがありました。
https://dev.twitter.com/docs/twitter-libraries
https://github.com/themattharris/tmhOAuth

試しに、Composerでインストールして使ってみます。

composer.jsonに以下を追記します。
"themattharris/tmhoauth": "0.*"
インストールします。
$ php composer.phar update # またはinstall
以下を参考にした、認証コントローラのサンプルです。
https://github.com/themattharris/tmhOAuth-examples/blob/master/oauth_flow.php
<?php

class Controller_Oauth extends Controller
{

    public function action_login()
    {
        // OAuth用のSessionを削除
        Session::delete('oauth');

        // tmhOAuthのインスタンスを生成
        $twitter = new tmhOAuth(array(
            'consumer_key'    => 'YOUR_CONSUMER_KEY',
            'consumer_secret' => 'YOUR_CONSUMER_SECRET',
        ));

        // Request Tokenの取得
        $code = $twitter->request('POST', $twitter->url('oauth/request_token', ''));
        if ($code != 200)
        {
            throw new Exception('Invalid code.');
        }
        $params = $twitter->extract_params($twitter->response['response']);

        // OAuth用のSessionをセット
        Session::set('oauth.params', $params);

        // 認証画面にリダイレクト
        $url = $twitter->url('oauth/authorize', '')."?oauth_token={$params['oauth_token']}";
        Response::redirect($url);
    }

    public function action_callback()
    {
        // OAuth用のSessionを取得
        $params = Session::get('oauth.params');

        // tmhOAuthのインスタンスを生成
        $twitter = new tmhOAuth(array(
            'consumer_key'    => 'YOUR_CONSUMER_KEY',
            'consumer_secret' => 'YOUR_CONSUMER_SECRET',
        ));
        $twitter->config['user_token']  = $params['oauth_token'];
        $twitter->config['user_secret'] = $params['oauth_token_secret'];

        // Access Tokenの取得
        $code = $twitter->request(
            'POST',
            $twitter->url('oauth/access_token', ''),
            array(
                'oauth_verifier' => Input::get('oauth_verifier'),
            )
        );
        if ($code != 200)
        {
            throw new Exception('Invalid code.');
        }

        // データの確認
        $access_token = $twitter->extract_params($twitter->response['response']);
        print(' [user_id] : '.           $access_token['user_id']);
        print(' [screen_name] : '.       $access_token['screen_name']);
        print(' [oauth_token] : '.       $access_token['oauth_token']);
        print(' [oauth_token_secret] : '.$access_token['oauth_token_secret']);

        // OAuth用のSessionを削除
        Session::delete('oauth');

        exit();

        // 以下、投稿のサンプル
//        $twitter = new tmhOAuth(array(
//            'consumer_key'    => 'YOUR_CONSUMER_KEY',
//            'consumer_secret' => 'YOUR_CONSUMER_SECRET',
//            'user_token'      => $access_token['oauth_token'],
//            'user_secret'     => $access_token['oauth_token_secret'],
//        ));
//
//        $twitter->request('POST', $twitter->url('1.1/statuses/update'), array(
//            'status' => 'Test'
//        ));
//
//        print_r($twitter->response['response']);
//
//        exit();
    }

}
とりあえず、"tmhOAuth"で良いかなー。

No comments:

Post a Comment