Amazon API 経由で書籍を検索する(調査編その1)

と言ってもAWSすらほぼ初めて。

AWS も Objective-C も余裕な人は以下のサイトが大変よくできている内容かと思います。

Amazon API を使ってISBNコードから書籍検索

しかしAWS強い。強敵。色々癖があるというかアカウント登録すら難関として立ちはだかる。
よくある私はロボットではありませんのための追加認証手順で画像に表示されたパスワードを入れるも、入力が間違っています、ってなんども怒られ挫折したりとか。

この人の記事と同じ現象。

https://teratail.com/questions/88779

結局その手順をすっ飛ばして事なきを得たけど解決策はそのうち調べておきたいなぁ、、気になる。

あとクレジットカードの登録が初回アカウント作成時じゃ無いとVISA、Master Card以外が選べないっぽい。JCBとか後付けしようとしても怒られる。

CurrencyもJPYにしたいけど変更できないっぽいし。比較的最近の記事だと日本円にもできるって書いてあるんだけど、設定画面から編集ができない。アカウント作成した入口のサイトの指定が間違えてたのかなぁ?

[2017-10-02: 追記]

あれ、もしかして aws.amazon.com で作った AccessKey と SecretKey ってこのクエリの場合用無し?><

結局アフェリエイト用?のアカウント作ったら、そっちはそっちで AccessKey と SecretKey が生成された・・・・。aws.amazon.com のは SDK 専用?

AWSアカウント作って、ダッシュボードからとりあえずAPIアクセスのためのアプリ用のアカウントを作成。
付与すればいいポリシーって何だろうと思いつつ、とりあえずAPI Gatewayでいいのかな、調べないと。
Amazon API Gateway とは?(公式)

Amazon API Gateway を使用する準備を整える (公式)

API Gateway へのアクセスを IAM アクセス権限で制御する (公式)

やばい。始めるまでが遠い・・・;

「API を呼び出すための API Gateway アクセス権限モデル」この辺よく読め系か。

と思ったら行き着く先はこっちっぽい?

API を呼び出すためのアクセスの制御 (公式)

ひとまず公開するわけじゃないから「AmazonAPIGatewayInvokeFullAccess」

あとで見直そう・・・。ノマド先輩曰く、公開するならアクセス制御しっかりしないとダメよ言われた。はい。

他サイトのサンプルを見つつ、以下URLを作ってとりあえずブラウザで投げて見るとSignatureがない、と。

http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&Operation=ItemLookup&SubscriptionId=[AccessKey]&ItemId=9784088806372&IdType=ISBN&SearchIndex=Books&ResponseGroup=Images,ItemAttributes
<ItemLookupErrorResponse xmlns="http://ecs.amazonaws.com/doc/2005-10-05/">
<Error>
<Code>MissingParameter</Code>
<Message>The request must contain the parameter Signature.</Message>
</Error>
<RequestID><!— 略 —></RequestID>
</ItemLookupErrorResponse>

まあ、当然っちゃ当然か。Timestamp をつけて HMAC-SHA256 でハッシュ値を取得したものを Signature として指定する必要があるっぽい。

しかし Amazon 強い・・・色々ややこしい。公式ドキュメントも隅から隅まで読まないと間違った値を指定してまう気がする。

「Product Advertising API 開発者ガイド」でググると出てくるドキュメントバージョンは 2010-09-01 らしい。

https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html

が、これは古いらしい。日本語なので全体を認識するにはいいけど。

ひとまずたどり着いたのは 2013-08-01 のバージョン。英語。最新かどうかは不明。

http://docs.aws.amazon.com/AWSECommerceService/latest/DG/CHAP_ApiReference.html

2010年版だと AssociateTag が必須ではなかったのに 2013年版だと必須になってるのね・・・。

http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&SearchIndex=Books&ResponseGroup=Images,ItemAttributes,Offer

これに AWSAccessKeyId をくっつける。

書籍を検索する場合、いくつかのパラメータを指定することになるけれど組み合わせがRegion毎に違うらしい。ひとまず日本限定。

書籍の場合は以下をまず指定(正しいパラメータの順番があるかもしれない)してURLの後ろにパラメータとしてくっつけて準備。準備の後は Timestamp の指定と Query に対する Signature (HMAC-SHA256) が必要。先は長い・・・

後述の検索で共通

SearchIndex=Books

ISBNで検索する場合

&Operation=ItemLookup&IdType=ISBN&ItemId=%@

http://docs.aws.amazon.com/ja_jp/AWSECommerceService/latest/DG/EX_LookupbyISBN.html

タイトルで検索する場合

&Operation=ItemSearch&Title=%@

http://docs.aws.amazon.com/ja_jp/AWSECommerceService/latest/DG/EX_SearchingbyTitle.html

著者で検索する場合

&Operation=ItemSearch&Author=%@

http://docs.aws.amazon.com/ja_jp/AWSECommerceService/latest/DG/EX_SearchingbyAuthor.html

SearchIndex が Books で Operation に ItemSearch を指定した場合に使える追加のパラメータは以下の模様。実際には試していないので、用途は想像ベース。

パラメータ 検索項目
Author 著者
BrowseNode
Condition  おそらく商品の状態。Newとか
ItemPage
Keywords
MaximumPrice
MerchantId
MinimumPrice
Power
Publisher  出版社
Sort
Title  書籍のタイトル

色々中途半端だけどとりあえず寝よう・・・(=_= Zzz

フォローする