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