Emotion Wave Tech Blog

福岡にあるエモーションウェーブ株式会社のエンジニアが書いています。

FuelPHPでYammerのAPIを叩いてみた #FuelPHP #yammer

どうも僕です。

タイトルの通りなんですが、FuelPHPでYammerに接続してみました。 ついでにpackageの作り方も気になったので、packgeを使って実装してみました。

APIの仕様は、http://developer.yammer.com/authentication/#a-oauth2この通り実装しました。 処理フローはTwitterとかFacebookとかと同じような感じだと思います。

packageの構成は、下記の感じにしました。

 fuel
 ├─ packages
     ├─ yammer
        ├─ classes
        │    ├ yammer.php
        ├─ config
        │    ├ yammer.php
        └─ bootstrap.php

まず、APIへアクセスするクラス fuel/packages/classes/yammer.php

<?php
namespace Yammer;
class Yammer  
{
    public static function _init()
    {
        \Session::get('yammer.access_token','');
        \Config::load('yammer', true);
    }
    
    public static function forge()
    {   
        return new \Yammer\Yammer;
    }
    
    /**
   * 認証用URLの生成
   *
   * @param string $redirect_uri リダイレクト先のURL
   * @return string Yammer認証用(アプリ認証画面)のURL
   */
    public static function get_authentication_url($redirect_uri = null)
    {
        if (is_null($redirect_uri))
        {
            $redirect_uri = \Config::get('yammer.redirect_uri','');
        }
        $client_id = \Config::get('yammer.client_id','');
        $auth_url = 'https://www.yammer.com/dialog/oauth?client_id=[:client_id]&redirect_uri=[:redirect_uri]' ;
        
        $auth_url = str_replace('[:client_id]', $client_id,$auth_url);
        $auth_url = str_replace('[:redirect_uri]',$redirect_uri,$auth_url);
        
        return $auth_url;
    }
    
    /**
   * access_tokenの取得
   *
   * @param string $code 認証した結果のcode
   * @return string access_token
   */
    public static function get_access_token($code = null)
    {
        $access_token = \Session::get('yammer.access_token','');
        if (! empty($access_token  )) return $access_token ;
        
        $client_id = \Config::get('yammer.client_id','');
        $client_secret = \Config::get('yammer.client_secret','');
            
        $auth_url='https://www.yammer.com/oauth2/access_token.json?client_id=[:client_id]&client_secret=[:client_secret]&code=[:code]';
        $auth_url = str_replace('[:client_id]', $client_id,$auth_url);
        $auth_url = str_replace('[:client_secret]',$client_secret ,$auth_url);
        $auth_url = str_replace('[:code]',$code,$auth_url);
        
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $auth_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        $response = curl_exec($ch);
        $response = json_decode($response);
        
        $access_token =  $response->access_token->token;
        \Session::set('yammer.access_token',$access_token );
        
        return $access_token;
    }
    
    /**
   * メッセージ取得
   *
   * @return object messages.jsonのレスポンス
   */
    public static function get_message()
    {
        
        return static::get('messages');
     
    }
    
    /**
   * メッセージ取得
   *
   * @param string $type APIの種類
   * @return object apiのレスポンス
   */
    public static function get($type=null)
    {
        $headers = array();
        $headers[] = "Authorization: Bearer " . \Session::get('yammer.access_token','');
        $api_url = 'https://www.yammer.com/api/v1/' . $type .   '.json';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $api_url);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

        return json_decode($output = curl_exec($ch));
        
    }
}

次は設定ファイル ※アプリケーションの登録を下記で行います。
https://www.yammer.com/client_applications
登録すると「client_id」と「client_secret」が発行されます。 fuel/packages/config/yammer.php

<?php
return array(
    'client_id' => '' ,   
    'client_secret'=> '',
    'redirect_uri' => '',

);

最後にbootstrap fuel/packages/bootstrap.php

<?php
Autoloader::add_core_namespace('Yammer');

Autoloader::add_classes(array(
    'Yammer\\Yammer'                         => __DIR__.'/classes/yammer.php'
    )
);

packageの使い方 まず、fuel/packages/config/yammer.phpを fuel/app/config/yammer.phpにコピーし、取得したアプリケーション情報を設定します。

あとは、適当なコントローラから 下記の感じで呼び出す。

<?php

class Controller_Yammer extends Controller
{
    public function action_index()
    {
        $data['url'] = \Yammer\Yammer::get_authentication_url();
        return View::forge('yammer/index',$data);
    }
    
    public function action_view()
    {
        $code = Input::get('code');
        $access_token = \Yammer\Yammer::get_access_token($code);
        $data['response'] = \Yammer\Yammer::get_message();

        return View::forge('yammer/view',$data);
    }
}

indexが認証用の画面です。リダイレクト先がviewです。

作りがイマイチですが、とりあえず、Yammerにアクセスする方法の一例として書いてみました。 いつか、ちゃんと書きたいと思います。