ZendService\Amazonを使う

By | 2013年12月25日

GithubのContributions Graphって素敵やん。yukiです。

この記事はAdvent Calendar 2013とは何の関係もありません。

ZendFrameworkにはフレームワークのコアとなるZendの他に、他サービスとのインターフェイス用のZendServiceというパッケージがあります。

大体の有名なサービスには対応していて、Composerにも対応しているので利用価値はあります。

さて、今回はその中にある、ZendService\Amazonというライブラリを使いましたので、一通りの使い方をまとめたいと思います。

 

インストール

Packagistに登録されているので、Composerにてインストールできます。
次のようにcomposer.jsonに設定を書きます。

 

サービスの初期化

ZendService\Amazonにはサービスへのアクセス方法が二通り用意されています。

基本的なのはZendService\Amazon\Amazonです。
もう1つはZendService\Amazon\Amazonを流れるようなインターフェイスで利用できるようにするための、ZendService\Amazon\Queryです。

どちらも初期化方法は一緒で、次のようになります。

第2引数はAPIのネームスペースの指定で、次のような定義になっています。

初期化されたサービスを利用してAmazonの各APIとやり取りしますが、気をつけなければいけないのは、AssociateTagの指定が必須になっていることです。

 

商品の検索

アマゾンから商品を検索するにはItemSearchというAPIを利用します。

$resultsには検索結果として、ZendService\Amazon\ResultSetが入ります。

ResultSetは\SeekableIteratorが実装されているので、foreachで回すことができます。

ResultSetから取得できるのはZendService\Amazon\Itemです。

 

商品の詳細情報の取得

商品の詳細情報を取得するにはASINを用いてItemLookupというAPIを利用します。

$resultsには、検索結果がエラーや複数のアイテムがある場合はResultSetが、1つだけの場合はItemが返されます。

 

画像について

取得した情報の中にある、画像の情報はZendService\Amazon\Imageとして取得されます。

URLを文字列で取得したい場合は次のようにします。

Image#UrlはZend\Uri\Uriなので、文字列として扱われる時に自動でtoString()が呼び出されるため

としても同じ結果となります。

 

RequestThrottled問題

バージョン2.0.2の時点で、アクセス超過の場合RequestThrottledがエラーとして返されますが、ネームスペースがecs.amazonaws.comと古いネームスペースのため、ZendService\Amazon\ResultSetが理解できず、空のResultSetが作られてしまうという問題があります。

また、それを回避するためにResultSet#totalResults()を使って件数の確認を行なおうとすると、NOTICEが出てしまいます。

NOTICEが出る問題は既に修正されているのですが、まだ正式バージョンとしてはリリースされておりませんので、気になる場合はdev-masterを利用しましょう。

 

だいたいこんな感じでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です