TwitterApiComponentを作った

October 19, 2010,
tags: cakephp component php twitterapicomponen


このエントリーをはてなブックマークに追加

cakePHPで良い感じのTwitterコンポーネントが見つからなかったので自分で作ってみました。
TwitterApiComponent

OAuthに対応しており、かつTwitterに気軽にツイートとかできてしまいます。

ということで使い方を説明しておきます。
まず、今回必要なものは以下の通りです。
consumerKeyとconsumerSecret
OAuth consumer component

1.アプリ登録して、OAuth consumer componentを入手する

consumerKeyとconsumerSecretはTwitterからアプリケーションを登録する際に入手できます。
OAuth consumer componentは下記のURLから取得してください。

http://code.42dh.com/oauth/

※OAuth consumer classのダウンロードではなく、OAuth consumer componentほうだけダウンロード大丈夫です。

2.OAuth consumer compoonentをアプリケーションに設置する

ダウンロード後解凍し、OAuthディレクトリを「app/vendors」に入れてください。
oauth_consumersフォルダと、oauth_consumer.phpを「app/controllers/conponents」に入れてください。

次にapp/controllers/components/oauth_consumers」にtwitter_consumer.phpを作成してください。

<?php
class TwitterConsumer extends AbstractConsumer {
function __construct() {
parent::__construct('YOUR_CONSUMER_KEY', 'YOUR_CONSUMER_SECRET');
}
}

※ちなみにこの辺は「CakePHPでTwitterマッシュアップを作る#4」を参考にいたしました。

3.TwitterApiComponentを設置

tiwtter_api.phpを「app/controllers/components」に入れてください。
git@github.com:polidog/TwitterApiComponent.git
4.適当にコントローラを用意する
以下のように記載するだけでtwitterAPIが気軽に使えてしまいます。

``` <?php class TwitterController extends AppController {

var $name = “Twitter”; var $components = array(‘TwitterApi’);

function beforeFilter() {

$this->TwitterApi->autoStartAction[‘oauthStart’] = “/twitter/oauth”; //oauth認証を開始するためのアクションの指定 $this->TwitterApi->autoStartAction[‘oauthCallback’] = “/twitter/callback”; //oauth認証時のコールバックアクションを指定 $this->TwitterApi->redirectUrl[‘oauth_denied’] = “/”; //認証が拒否された場合のリダイレクトする先(nullだとリダイレクトしない) $this->TwitterApi->redirectUrl[‘oauth_noauthorize’] = “/”; //認証に失敗した場合のリダイレクト先(nullだとリダイレクトしない) $this->TwitterApi->redirectUrl[‘oauth_authorize’] = null; //認証成功の場合のリダイレクト先

}

function oauth() {

}

function callback() { // 認証に成功したら、ユーザー情報を取得する $data = $this->TwitterApi->apiAccountVerify_credentials(); var_dump($data); exit(“stop”); } }

        
    5.twitterAPIのコールメソッドについて
    :   TwitterAPIをコールする際のメソッドは以下のような命名規則になっています。  
        たとえばacount/verify_credentialsというapiをコールした場合は命名規則は以下のようなメソッド名になります。</p> ```
apiAcountVerity_credentials();
    頭にapiという名前を付ける。  
    「/」の後に来る文字は大文字を指定する。

    の2つになります。

    また、以下のようにコールしてもapiをコールできます。

    ```

api(‘/acount/verify_credentials’);

            
        また、何かしらapiコール時にパラメータが必要な場合は以下のように指定します。
            
        ```
'value'));
    というかたちで指定ができます。

    例:twitterに投稿する

    ```

‘ツイートのテスト!!’,‘post’);

            
        ※post形式の場合のapiは必ず2番名の引数にpostを指定してください。</dd> 
        6.apiコール時の戻り値について
        :   apiコールした際の戻り値は基本的に配列となっています。  
            また、デフォルトではjson形式で取得し、配列に変換してから返り値として返ってきます。  
            json形式で値を受け取りたい場合は以下のようにします</p> ```
apiAccountVerify_credentials(array(),'get','json',false);
        ちなみにxml形式での値を受け取ることもできます。  
        その場合は以下の通りです。

        ```

apiAccountVerify_credentials(array(),‘get’,‘xml’,false);

            
        まだまだ、バグとかあるかもしれないので、いろいろと試してみてもらえると助かります。
            
        ## 追記 2010/10/24
            
        OAuth認証時のcallbackのURLの指定について
        :   Twitterにアプリケーション登録する際に、callbackのURLを指定するのですが、beforeFilter時にそのcallbackのURLを指定してください。  
            ちなみに、OAuth認証を行うアクションのみで、大丈夫です。  
            また、指定をしない場合は、デフォルトで$_SERVER['SEVER_NAME']と$this->autoStartAction['oauthCallback']のアクションの指定部分から自動的に設定されます。</p> ```
<?php
class TwitterController extends AppController
{

	var $name = "Twitter";
	var $components = array('TwitterApi');

	function beforeFilter() {

		$this->TwitterApi->autoStartAction['oauthStart'] = "/twitter/oauth"; //oauth認証を開始するためのアクションの指定
		$this->TwitterApi->autoStartAction['oauthCallback'] = "/twitter/callback"; //oauth認証時のコールバックアクションを指定
		$this->TwitterApi->redirectUrl['oauth_denied'] = "/"; //認証が拒否された場合のリダイレクトする先(nullだとリダイレクトしない)
		$this->TwitterApi->redirectUrl['oauth_noauthorize'] = "/"; //認証に失敗した場合のリダイレクト先(nullだとリダイレクトしない)
		$this->TwitterApi->redirectUrl['oauth_authorize']  = null; //認証成功の場合のリダイレクト先

		$this->TwitterApi->oauthCallbackUrl = "http://twittertest.polidog.jp/twitter/callback";


	}

	function oauth() {

	}

	function callback() {
		// 認証に成功したら、ユーザー情報を取得する
		$data = $this->TwitterApi->apiAccountVerify_credentials();
		var_dump($data);
		exit("stop");
	}
}
comments powered by Disqus