PHPのHTTPクライアントライブラリ「Guzzle」を使ってみる(その1)
Mobageのドキュメントがデベロッパー以外にも公開されたみたいですね。これでブログに気兼ねなくMobageネタが書けます。というわけで、さっそく。
GuzzleというHTTPクライアントライブラリが良さげなので、MobageのAPIにアクセスしてみました。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へつづく。