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にアクセスする方法の一例として書いてみました。 いつか、ちゃんと書きたいと思います。