eBay APIの続き。
PHP向けのサンプルは、思いっきりXMLを生で読み書きしているようですが、そんなんできるかっ、あほっ。しかもPEAR::Services_Ebayには以下の注意書きがあって、開発が止まっているから不安。
*** NOTE: this package needs a rewrite to use eBay's new API,
if you'd like to help please follow the link above
in the unmaintained notice ***
そこで、なんの説明もなくポツネンとホスティングされてた
eBay Accelerator Toolkit for PHP(Zip)
を試すことにしました。製造元はドイツの会社(個人?)で、マニュアルはなく、eBay側もサポートはしていないそうです。
使い方はソースを読むしかない。ってところが、いかにもPHPらしい。
解凍してみると、ずらっと1000個くらいのソースファイルが出てきますが、どうやらコアライブラリは、NbatNs_*.phpという名前のファイルなので、この辺りから読み進めるとわかってくる。残りは全部、スキーマに対応したXMLパーサ。
さて、作ってみる。
設定ファイル(ebay.ini)を次のように書きます。このファイルで設定できる項目は、NbatNs_Session.phpを読めばだいたい想像できます。
app-key-test=<Your Sandbox AppId>
dev-key-test=<Your Sandbox DevId>
cert-id-test=<Your Sandbox CertId>
;app-key-prod
;dev-key-prod
;cert-id-prod
;AuthTokenはファイルに保存しておきます。
token-mode=1
token-pickup-file=Your/AuthToken/File/Path
; US なら 1
site-id=1
; サンドボックスなら 1
; プロダクションなら 0
app-mode = 1
; EBAY_CALLMODE_DIRECT = 0
; EBAY_CALLMODE_INTEGRATION = 1
api-mode = 0
;ほか、いろいろあるけど、よーわからん。
で、上のiniをNbatNs_Sessionオブジェクトに入れてやれば、あとはeBay APIの名前どおりに動きます。以下、サンプルです。
<?
set_include_path('./EbatNs_1_0_515_0');
require_once 'EbatNs_Session.php';
require_once 'EbatNs_ServiceProxy.php';
require_once 'GetSearchResultsRequestType.php';
$session = new EbatNs_Session("./ebay.ini");
$ebay = new EbatNs_ServiceProxy($session);
$request = new GetSearchResultsRequestType();
$request->setQuery('ipod');
$response = $ebay->GetSearchResults($request);
if( $response->Ack == 'Success' ){
foreach( $response->SearchResultItemArray as $resultitem ){
print_r( $resultitem->Item->Title ."\n");
}
}else{
foreach( $response->Errors as $error ){
print_r( $error->LongMessage ."\n");
}
}
?>
前回のRuby版に比べると、XMLのタグ名をいちいちアンスコ形式に変換しなくていいところが良いかも。パフォーマンスは、Rubyよりもかなり軽快です。
PHP5ユーザーにとっては、responseの解析方法が
simplexml_load_file(この関数はスマートだよな)と全く同じだから、RESTで間に合う場合は、このライブラリを使う必要性はあまりナイかもしれません。
$response = simplexml_load_file("REST URL");
:以下、ほぼ同じ
ココ数ヶ月くらいはRubyだけで仕事してたもんで、
「うわーPHP戻りたくねー」と思ってたけど、PHPも良いところは良いね。
でも、ドキュメントもコメントもないソースをバンバン公開する文化は、改めた方がいいと思うっす。
こういう巨大なWebAPIを使うときは、やっぱり.NETかJavaが、やりやすいんだろうと思います。ドキュメントは力入ってるし、テキパキ入力補完してくれるからね。今回は使えないから苦労してるわけだけど。