INFRA

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画面