[Symfony]jsonレスポンスを返す設定方法

外部API

最近では、WebサービスとしてAPIが多く提供されています(Google Map API…)。そのコンテンツを充実させるのに注力するために、ここでは外部APIとしてよくある「json」レスポンスを返す方法について紹介します。

例)
Google Map API
ATND API

jsonレスポンスを返すための設定

この記事はPHPとSymfonyをベースとした実装方法を紹介していきます。従ってPHPおよびSymfonyの基礎知識はある前提で紹介していきます。

まず、レスポンスとしてjsonを返すので、アプリケーションのcontent-Typeをapplication/jsonにします。また、HTMLとしてのレスポンスを返す必要がないのでhas_layoutもfalseとします。それらの設定はview.ymlにて設定可能です。

default:
  http_metas:
    content-type: application/json; charset=UTF-8
#   通常の場合
#   content-type: text/html

...

  has_layout: false
# 通常の場合
# has_layout: true
  layout: layout

[株]HumbleFinanceを使ってみた

作ったもの

Go To Chart Navi

Humble Finance

チャートをHTML5で描画してくれるJavascriptフレームワークです。これを使ってWEBページを作ってみます。

Humble Software Development

他に使ったライブラリとか

CHAPI! – 株価API
株価を検索するためのフリーAPIです。IKACHI Projectなる団体が管理しているらいです。
ここが提供する四本値データと銘柄データを利用してチャート描画に必要なデータを収集しています。

IKACHI Project

Prototype
Humble Financeの動作条件として必須なJavascriptフレームワーク。

Prototype

JQuery
Javascriptフレームワーク。Prototypeと文法上競合するので記述方法に気をつけます。

JQuery

KickStart
cssフレームワーク。

KickStart

さあ、どうぞ

PHP & Symfonyで実装しました。

Go To Chart Navi

[detectFace();]人の顔を解析してみる

顔認証API技術

顔認証APIとは、その名の通り顔の画像をパラメータに指定してAPIを利用すると、その結果が数値化されてかえってきます。
今回利用させていただくAPIは以下の会社のWebAPIを利用します。
インクリメント株式会社
API(アプリケーションプログラミングインターフェース)

顔認証技術を使って何ができる?

人の顔を数値的に評価することで、的確なおすすめの「顔」が紹介できるのかなと思います。今はFacebook上に人の顔がたくさんあるのでそのデータを利用することで最短経路でタイプの女の子に出会えるのではないでしょうか。。。

APIを使ってみる

トリンドル玲奈の場合

<?xml version='1.0'?>
<faces>
  <face id='0'>
    <bounds x='5' y='268' width='242' height='242'/>
    <right-eye x='73' y='341'/>
    <left-eye x='184' y='357'/>
    <features s-avg='0.75' s-min='0.46' s-max='0.91'>
      <point id='PR' x='82' y='342' s='0.74'/>
      <point id='PL' x='195' y='355' s='0.82'/>
      <point id='BR2' x='116' y='312' s='0.64'/>
      <point id='BL2' x='160' y='313' s='0.67'/>
      <point id='N1' x='120' y='348' s='0.72'/>
      <point id='N5' x='106' y='425' s='0.78'/>
      <point id='M1' x='107' y='479' s='0.69'/>
      <point id='M5' x='110' y='507' s='0.71'/>
      <point id='M3' x='69' y='480' s='0.49'/>
      <point id='M7' x='157' y='489' s='0.86'/>
      <point id='EL4' x='223' y='361' s='0.91'/>
      <point id='EL1' x='169' y='359' s='0.75'/>
      <point id='ER1' x='105' y='352' s='0.83'/>
      <point id='ER4' x='57' y='337' s='0.57'/>
      <point id='M2' x='98' y='473' s='0.65'/>
      <point id='M8' x='130' y='478' s='0.85'/>
      <point id='M4' x='98' y='500' s='0.74'/>
      <point id='M6' x='139' y='502' s='0.87'/>
      <point id='BR3' x='89' y='295' s='0.60'/>
      <point id='BL3' x='193' y='306' s='0.69'/>
      <point id='N2' x='70' y='434' s='0.54'/>
      <point id='N4' x='141' y='442' s='0.87'/>
      <point id='F1' x='152' y='217' s='0.46'/>
      <point id='F2' x='45' y='250' s='0.68'/>
      <point id='F10' x='236' y='253' s='0.62'/>
      <point id='ER2' x='93' y='338' s='0.82'/>
      <point id='ER3' x='72' y='330' s='0.68'/>
      <point id='ER5' x='71' y='350' s='0.69'/>
      <point id='ER6' x='93' y='355' s='0.81'/>
      <point id='EL2' x='192' y='346' s='0.85'/>
      <point id='EL3' x='214' y='350' s='0.90'/>
      <point id='EL5' x='212' y='369' s='0.91'/>
      <point id='EL6' x='190' y='367' s='0.85'/>
      <point id='BR1' x='115' y='322' s='0.73'/>
      <point id='BR4' x='59' y='294' s='0.69'/>
      <point id='BR5' x='41' y='310' s='0.75'/>
      <point id='BR6' x='71' y='304' s='0.70'/>
      <point id='BL1' x='167' y='319' s='0.70'/>
      <point id='BL4' x='221' y='312' s='0.82'/>
      <point id='BL5' x='243' y='333' s='0.89'/>
      <point id='BL6' x='211' y='318' s='0.81'/>
      <point id='N3' x='105' y='451' s='0.82'/>
      <point id='M9' x='110' y='491' s='0.77'/>
      <point id='F3' x='18' y='347' s='0.82'/>
      <point id='F9' x='260' y='366' s='0.83'/>
      <point id='F4' x='15' y='425' s='0.75'/>
      <point id='F8' x='252' y='452' s='0.83'/>
      <point id='F6' x='109' y='565' s='0.83'/>
      <point id='F5' x='30' y='491' s='0.47'/>
      <point id='F7' x='207' y='524' s='0.81'/>
    </features>
  </face>
</faces>

すべての顔のパーツを上記xml形式で返してくれるので顔の解析が可能。

課題

すべての画像を数値化できたとして、数値が近いだけで紹介しても精度の高い紹介はできない気がしています。
また、Facebookの画像は自分の顔写真をみんながみんなアップで乗っけている訳ではないので顔写真の取得元 + 個人とのひも付けも課題になると思います。
課題はたくさんありますが興味深いです。。。

[Twitter]Twitter APIで遊んでみる

Twitter APIで遊んでみる

今回はTwitterのAPIを利用して検索条件にマッチするタイムラインを取得するページを作成してみます。

Key wordでツィートをひっぱってくる

すごく簡単です。

[Facebook]FacebookAPIで遊んでみる

Facebook APIで遊んでみる

FacebookAPIで何を作ろうか。。。とりあえず、ログインくらいかなと思いサーバにFacebookで遊ぶディレクトリを作成。
もともとAndroidアプリ開発中でディベロッパーIDは持っていたので自分のサイトをそこに登録してみる。

登録の仕方は省略。以下のサイトを参考にしてみて→Facebookアプリ入門-アカウントの登録と動作確認-

あなたを表示させてみる

ブラウザがFacebookのログイン情報を保持しているならあなたの画像と名前が表示されるはず。されていない場合はログインボタンを押してログインしてみてください。
こんどはtwitterAPIでも使ってみようかなぁ。

ソースコード自体はgitに登録されているので簡単に作れますよ。今回はJavascriptのAPIを利用しましたが、PHPとかいろいろなAPIが公開されているのでぜひ。