atijust's blog

技術的なこととか。

PHPのHTTPクライアントライブラリ「Guzzle」を使ってみる(その1)

Mobageのドキュメントデベロッパー以外にも公開されたみたいですね。これでブログに気兼ねなくMobageネタが書けます。というわけで、さっそく。

GuzzleというHTTPクライアントライブラリが良さげなので、MobageAPIにアクセスしてみました。OAuthプラグインもあって超お手軽。そして、お手軽でありながら、高機能。パラレルリクエストもできるっぽい。

取り敢えずPeopleAPIを叩いてみる。

<?php
require_once 'vendor/autoload.php';

use Guzzle\Http\Client;

$client = new Client('http://sb.sp.app.mbga.jp/');

$client->addSubscriber(new Guzzle\Plugin\Oauth\OauthPlugin(array(
    'consumer_key'    => 'xxxxxxxxxxxxxxxxxxxx',
    'consumer_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
)));

echo $client->get(array('/api/restful/v1/people{/guid}{/selector}{?fields,format}', array(
    'guid'     => '123456',
    'selector' => '@self',
    'fields'   => 'id,nickname,thumbnailUrl',
    'format'   => 'json',
)))->send()->getBody();

これで実行すると、、、

Fatal error: Uncaught exception 'Guzzle\Http\Exception\ClientErrorResponseException' with message ' in /Users/atijust/Develop/mbga_api/vendor/guzzle/guzzle/src/Guzzle/Http/Exception/BadResponseException.php on line 48

Guzzle\Http\Exception\ClientErrorResponseException: Client error response
[status code] 401
[reason phrase] Unauthorized
[url] http://sb.sp.app.mbga.jp/api/restful/v1/people/123456/%40self?fields=id%2Cnickname%2CthumbnailUrl&format=json
(略)

ファッ!?

URLテンプレートで置き換えてる部分の@がパーセントエスケープされとる。。。

URI template RFCによると、Path Segment Expansion: {/var}では予約文字はパーセントエスケープされるそう。

えー、、、

Reserved Expansion: {+var}を使えば予約文字のパーセントエスケープを回避できるっぽいので、取り敢えずそれでやってみる。

<?php
echo $client->get(array('/api/restful/v1/people/{+guid}/{+selector}{?fields,format}', array(
    'guid'     => '123456',
    'selector' => '@self',
    'fields'   => 'id,nickname,thumbnailUrl',
    'format'   => 'json',
)))->send()->getBody();

今度はうまくいった。

{
   "startIndex" : 1,
   "person" : {
      "nickname" : "hoge",
      "thumbnailUrl" : "http://sb-sp.mbga.jp/img_u/123456/0.1.gif",
      "id" : "sb.mbga.jp:123456"
   },
   "itemsPerPage" : 1,
   "totalResults" : 1
}

(もにょるなぁ)

その2へつづく。