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

Yammerたのしい #Yammer

こんにちは。中原です。

弊社ではコミュニケーションツールの一つとして、Yammerを使っています。 Yammerは組織で使えるTwitterのようなSNSです。 詳しくは以下の公式サイトをご覧ください。

ホーム - Yammer - Microsoft

てことで、弊社での主な使い方をご紹介させて頂きます。 (ちなみに使い始めて3年以上経っています)

情報共有

ありきたりですが、インターネット等で話題になった技術的な記事や食やメディア等の話しなど様々な話題を投稿して情報の共有を行っています。 始めた当初は投稿する人は限られていましたが、続けていく内に投稿する人も徐々に増えて来ました。 地道に情報共有を続け、少しずつでもメリットを感じてもらえれば、組織として更に良い方向に向かえる気がします。

チャットで話し合い等

特定の人たちと何か話し合いたいことがあればチャットを使っています。 ただ、会話はチャットのメンバ以外には見えず、クローズドになってしまうので、あまりよろしくないかなと思うこともありますね。 よっぽどのことがない限りチャットは使わずにオープンにした方が良いですね。

業務的な連絡

メールで連絡するまでもないことはYammerのメッセージでやりとりします。 社内でのやりとりに関してはほぼメールは使わないです。 ドキュメント等はSkydrive等にアップロードして、URLを共有というパターンが多いです。

雑談

ここ最近、仕事に関係ない雑談的な話題も積極的にポストしています。 変な画像とかあの店に焼酎キープしてるんで飲んでねーとか孤独のグルメまた始まるよーとか。 カジュアルな感じで仕事の合間にみんなで楽しめるのは良いと思います。

ざっとですが上記のような使い方をしています。 ちなみに今のところ無料プランの範囲で問題なく使えています。

Yammerは楽しいので皆さんも機会があれば使ってみては如何でしょうか。 (以下の画像は弊社Yammerの一部です)

f:id:devew:20190320175113p:plain

こらからのWebトレンド

f:id:devew:20190320175206j:plain

ここ最近、Web業界はものすごい盛り上がりをみせ、どんどん新しいスタイルが生まれおり、 新しいトレンドを取り入れるのは必要不可欠になっています。 そこでウェブデザインのトレンドを少しまとめてみた。

1.トレンド

・モバイルファーストデザイン モバイル端末に合わせてコンテンツ考えるデザイン

・パララックスデザイン 複数のイメージ画像のスクロールするスピードを調整することで、立体的な空間を生み出す視差効果を利用したデザイン

フラットデザイン 画面に表示するボタンやメニューを、平面的な見た目にしたデザイン

ジェスチャーデザイン 名前のとおりタッチジェスチャーを意識したデザイン

・レスポンシブウェブデザイン さまざまなデバイスに対応し、ファイルを分けることなく動的に表現可能にしたデザイン

2.今後の動向

HTML5、CSS3の登場で今後はFlashSilverlightJavaは衰退しレスポンシブが主流になってくる。 さらに多すぎるページや文字が多いページは時代遅れのものとなり、ページ容量が減少していくと思われる。 これは、Webフォントを利用したり、モバイルデバイスの帯域制限による、Webページの軽量化によるものである。

3.実践

レスポンシブでは必須となる手法を少し紹介します。

HTML5 今までJavascriptで行っていた複雑な処理が簡単に出来て、HTMLのみでより構造的にスッキリ書ける。 また、最近では新たにtamplateタグが使用できるようになり、レイアウトを切り替えることが可能になっています。

CSSレイアウト 今まで主流だったテーブルレイアウトとは異なり、divタグを使用しレイアウトを構成するもの。 これにより、レイアウトの変更を柔軟にしファイル容量を減少させることが可能になる。 ただ、これはCSSの知識が求められ、少しでも間違うとレイアウトが崩れてしまう恐れがある。

あと、CSSもレスポンシブに対応することが可能でたとえば「Media Queries」を使用することで 数値で指定した画面サイズなどの細かな条件に応じて、適用するスタイルを振り分けられる。

@media screen and (max-width: 320px) {
   /* 表示領域が320px以下の場合に適用するスタイル */
   div#sidebar { width: 100%; }
}
@media screen and (min-width: 800px) {
   /* 表示領域が800px以上の場合に適用するスタイル */
   div#sidebar { width: 240px }
}

詳細はとてもたくさんの事例が載っているのでググッてください!!

RS232Cを使い続けたい!

f:id:devew:20190320175615j:plain

RS232Cってご存知でしょうか? 若い人は知らないでしょうねえ。 昔はパソコンと外部機器と言えばこのRS232Cケーブルでつないだものです。 ディスプレイ端子みたいな形です。

f:id:devew:20190320175634j:plain

最近はUSBやBluetoothやLANでつないじゃったりしてRS232C端子の出番はすっかり無くなりました。

しかし古い外部機器になるとRS232Cしか対応してなかったりします。 例えばプロッタとかレジ横のなんかよくわからない機械とか。

例えばCADやイラストレーターでプロッタを使うときはRS232Cでつなぐということが多かったです。

私の友人もイラストレーター、RS232C、プロッタの組み合わせで仕事していました。

が、PCが不調になり買い換えしないといけなくなりました。しかし…、

10年前のパソコンならRS232C端子がしぶとく残っていましたが今はさすがに滅びました。 古い機器なんて買い換えればいいじゃんって感じですが、 プロッタって結構高いんで簡単に買い替えできません。

諦めるしかないのでしょうか? と思ってたら救済策がありました。 RS232CをUSBに変換するケーブルが市販されています。

f:id:devew:20190320175651p:plain

こんな感じの商品です。

購入時についてるCDのドライバーをインストールして変換ケーブルをつなぐだけ!

パソコン(USB)-変換ケーブル-プロッタ(RS232C) こんな感じでつなげます。

バイスマネージャーで見てみると…

f:id:devew:20190320175726j:plain

おお、「COM4」で表示されていますね。これをメモ。 イラストレーターのプラグインのプロッタ制御ツールでCOMポートを指定します。 ※このプラグインはプロッタ購入時にCDで付いていたものです。

f:id:devew:20190320180224j:plain

f:id:devew:20190320180236j:plain ちゃんと動くかテストしてみましょう。 イラストレータで円とか長方形とか適当な図形を書いて、プロッタに印刷させます。

f:id:devew:20190320180303j:plain

ゴリゴリと見事に動きました! もうRS232C端子が無いパソコンでも大丈夫!

以上、設計、PG、テストいずれにも該当しない記事でしたw

ACR122U-A9のビープ音を消す方法

このネタ、あまり需要はないと思いますが、 情報が少ないのでいつか誰かのお役に立てば・・・と思います。

ACR122U-A9は、NFC接触ICカードリーダーライターです。 簡単に言うと、ICカードをかざすとカード内のデータを読み書きできる製品です。 国内製品ではsonyPaSoRiが有名で、電子決済や、交通機関などのアプリと 連携して利用されています。

で、本題です。 ACR122U-A9を入手し、カードをかざしたところ「ビッ」というビープ音がしました。 今回作成しているアプリケーションでは、アプリからも音を出していたので、 カードをかざした時にアプリから出す優しげな音と、ACR122Uからでる「ビッ」っという 力強い音がけんかしてしまうという状態になってしまいました・・・。

聞くところによると、以前のバージョンではそんな音は出なかったそうです。 最新のバージョンではデフォルトで音が出るように設定されているとのことで・・。 マニュアルは英語・・・、製品付属のサンプルコードにも、肝心のビープ音制御部分はなし・・・、 その後、あの手この手で調査した結果、ビープ音を消すことに成功しました。

それが以下のサンプルコードです。 VB6のコードですが他言語でも同様の方法で可能です。 SCardConnect、SCardControlは、APIとして提供されているファンクションになります。

Public Function muteACR122() As Long
    'reset
    rtnCode = CardDisConnectACR122()
    
    'connect
    rtnCode = SCardConnect(hContext, frmMain.cbReader.Text, _
                           SCARD_SHARE_DIRECT, 0, hCard, Protocol)
    
    'beep control
    Dim rtnByte As Long
    Call ClearBuffers
    SendBuff(0) = &amp;HFF     'Class
    SendBuff(1) = &amp;H0      'INS
    SendBuff(2) = &amp;H52     'P1
    SendBuff(3) = &amp;H0      'P2
    SendBuff(4) = &amp;H0      'Lc
    SendLen = 5
    RecvLen = UBound(RecvBuff)        
    rtnCode = SCardControl(hCard, IOCTL_CCID_ESCAPE_SCARD_CTL_CODE, _
                           SendBuff(0), SendLen, RecvBuff(0), RecvLen, rtnByte)
    
    muteACR122 = rtnCode

End Function