Category Archives: Cakephp

みなさんこんにちはこんばんは。イッシーです:.゚٩(・ิᴗ・ิ๑)۶:.。+゚

androidのトピックになる予定ですがCakeになりました。さて、日本人はtwitterが大好きですね。そんなご時世なのでtwitterと連携したアプリケーションの開発なんてお話もいっぱいあります。では早速実装しましょう。

【ステップ1】

車輪の再発明は面倒なので既存のモジュールをダウンロードして以下のディレクトリ構成となるように配置します。

[cc lang="php"]
./vendors/OAuth/OAuth.php
./vendors/OAuth/oauth_consumer.php
./vendors/OAuth/LICENSE.txt
[/cc]

【ステップ2】

コントローラクラスにインポートします。

[cc lang="php"]
App::import(‘Vendor’, ‘oauth’, array(‘file’ => ‘OAuth’.DS.’oauth_consumer.php’));
[/cc]

require_once的な感じです。

【ステップ3】

twitterで登録して取得した情報を元にして以下のメソッドをコントローラに準備します。

[cc lang="php"]
class HogeController extends AppController {
/**
* _createConsumer
*/
protected function _createConsumer()
{
return new OAuth_Consumer(
‘アプリケーションのコンシューマーキー’,
‘アプリケーションのコンシューマーシークレット’
);
}
}
[/cc]

【ステップ4】

いよいよtwitterの認証を使います。まず、HogeControllerにリダイレクト用のtwitterアクションを作ります。未認証のリクエストトークンをURLにつけてユーザをリダイレクトさせる部分です。

[cc lang="php"]
/**
* twitter
* リダイレクトします
*/
public function twitter()
{
$requestToken = $this->_createConsumer()->getRequestToken(
‘https://api.twitter.com/oauth/request_token’,// エンドポイントとも言うんでしょうかね
‘http://hogehoge.plusr.co.jp/users/register’// 自分のサイトのユーザ登録用のURL…(a)
);
$this->Session->write(‘request_token’, $requestToken);// セッションにリクエストトークンを保存
$this->redirect(‘https://api.twitter.com/oauth/authorize?oauth_token=’ . $requestToken->key);// twitter側にリダイレクト
}
[/cc]

【ステップ5】

twitterの(未認証のリクエストトークンをクエリにつけて訪問した)画面でユーザがOKすると(リクエストトークンが認証され)自分のサイト(a)に戻ってきます。自前サーバで(コンシューマ)承認済みのリクエストトークン、コンシューマキー、コンシューマシークレットで生成したサイン値などをパラメータとして送信し、アクセス・トークンの発行をtwitter(https://api.twitter.com/oauth/access_token)に要求します。このトークンを保存してあげればいいわけです。

[cc lang="php"]
/**
* register
* 登録
*/
public function register()
{
$consumer = $this->_createConsumer();
$token = $consumer->getAccessToken(
‘https://api.twitter.com/oauth/access_token’,
$this->Session->read(‘request_token’)
);// セッションに保存してあるリクエストトークンをセットしてアクセストークンを要求
if($token != ”){
$twitter = $consumer->get(
$token->key,
$token->secret,
‘http://twitter.com/account/verify_credentials.json’,
array()
);// twitter上におけるユーザの情報を取得(optional)
$twitter = json_decode($twitter, true);

// 登録 or 更新 (内部でどちらか判定して保存)…(b)
$registeredId = $this->User->register(array(
‘twitter_id’ => $twitter['id_str'],
‘twitter_name’ => $twitter['screen_name'],
‘token_key’ => $token->key,// ユーザのトークン
‘token_secret’ => $token->secret,// ユーザのシークレット
));

$user['User']["token_key"] = $token->key;
$user['User']["token_secret"] = $token->secret;
$this->Auth->login($user);
}
}
[/cc]

上述のようにすることでログインができるようになります。

【ステップ6】

あとは上述の(b)でDBに保存したキーとシークレットを元にしてtwitterのAPIを利用します。

情報をポストする場合

以下のようにすることでユーザの代わりに投稿ができます。

[cc lang="php"]
$consumer = $this->_createConsumer();
$consumer->post(
$token_key,// DBに保存したキー
$token_secret,// DBに保存したシークレット
‘http://api.twitter.com/1/statuses/update.json’,
array(
‘status’ => $content
)
);
[/cc]

情報を取得する場合

以下のようにすることでユーザがフォローしている人を取得できます。

[cc lang="php"]
$consumer = $this->_createConsumer();
$friends = $consumer->get(
$token_key,// DBに保存したキー
$token_secret,// DBに保存したシークレット
“http://api.twitter.com/1/statuses/friends.json?id={$id}”// ユーザのtwitter id
);
[/cc]

いかがでしょうか?既存のプラグインを使うことですごく簡単に実装できました。リファレンスを見るとRESTful APIのURLが載ってますので参考にしてみてください。