Product Advertising APIのTimestampとかSignatureとかは不要
前回の記事で、頑張って各パラメータについて調べました。
後はTimestampとSignatureだなって思っていたのですが、
それについて調べているうちに、Amazonが用意してくれている、
SignedRequestsHelperというクラスがあることが判明。
自分で面倒なことをしなくても、
そのクラスのインスタンスを取得して、
キーとかパラメータとか指定してあげれば、
TimestampやSignature意識しなくて良いみたいです。
それを知ったのはこのサイトを見つけてから。
にゃんたこす!徒然草。: Amazon署名認証対応(Java)
Amazonのサンプルソースを使ってやっていました。
サンプルソースなんて気にもとめていなかったです。
突っ走っていた自分に反省。
SignedRequestsHelper.java をそのままパッケージに追加しました。
にゃんたこす!の指摘にあります通り、
しておきました。
でも私の場合はBase64()のままでも問題なかったです。
Base64(0)にする理由は詳しく読んでいないのですが、
最近バージョンアップされて修正されたのかもしれませんね。
↓のようなメソッドを作り、mainメソッドから呼び出しました。
public String getAamazonRequest(String target) throws UnsupportedEncodingException, InvalidKeyException, IllegalArgumentException, NoSuchAlgorithmException {
String endpoint = "ecs.amazonaws.jp";
String awsAccessKeyId = "XXXXX";
String awsSecretKey = "d/PwLGXXXXXXXXXXgmSAocJ49U";
String associateTag = "okXXXXX";
SignedRequestsHelper signedRequestsHelper =
SignedRequestsHelper.getInstance(endpoint, awsAccessKeyId, awsSecretKey);
HashMap<String, String> map = new HashMap<String, String>();
map.put("Service", "AWSECommerceService");
map.put("AssociateTag", associateTag);
map.put("Version", "2011-08-01");
map.put("Operation", "ItemSearch");
map.put("SearchIndex", "Books");
map.put("Keywords", "箱根駅伝");
return signedRequestsHelper.sign(map);
}
HashMapにパラメータをどんどん追加し、
SignedRequestsHelper#signに渡すだけですね。
生成されたURLをブラウザに打ち込んで結果を確認したところ、
↓↓問題なくXMLが取得できました。
必須パラメータさえ忘れていなければ、
問題なくリクエストが通るはずです。
明日はこれをXPathで解析して情報をとってみます。
いつも読んでいただき、ありがとうございます。
JavaでProduct Advertising APIのリクエストを作る
では、Signed Requests Helperではなく、
JavaでProduct Advertising APIのリクエストを作っていきましょうね。
アマゾンの本のジャンルから、
箱根駅伝というキーワードで商品を検索するリクエストは
このようになります。
これはSigned Requests Helperを使うと構築できますね。
これを分解すると、
http://ecs.amazonaws.jp/onca/xml?
AWSAccessKeyId=AKIAJXXXXXXXXKXAJJKA
&Service=AWSECommerceService
&AssociateTag=XXXXXX-22
&Operation=ItemSearch
&SearchIndex=Books
&Keywords=%E7%AE%B1%E6%A0%B9%E9%A7%85%E4%BC%9D
&Timestamp=2013-12-20T16%3A16%3A30.000Z
&Version=2011-08-01
&Signature=u5XcWqeA4Jd2M%2BxgRq0DbWDVCv%2FElzhBs0Ftij%2FbAdo%3D
赤字の9つのパラメータに分かれています。
上から順に見ていきます。
AWSAccessKeyId は、AWSのアカウントを作成して、
Management Consoleにログインし、セキュリティ認証のページに載っています。
Service は、お決まりです。常にAWSECommerceServiceでOKです。
AssociateTag は、Amazon アソシエイトにログインした画面の、
左上に出ています。アフィリエイターIDみたいなもんですね。
Operation は、商品検索の場合は ItemSearch ですね。
SearchIndex は、商品ジャンルです。こちらを参照してください。
Keywords は、検索キーワードです。
たとえばウェブスクレイピングで抽出したキーワードですね。
数字は半角英字のみの場合はそのままでOKです。
しかし、日本語文字を検索キーワードに含める場合、
日本語文字の部分のみエンコードが必要です。
↓このようにします。
String エンコード語の文字 = URLEncoder.encode("対象文字列", "utf-8").replace("+", "%20").replace("*", "%2A").replace("%7E", "~");
これは、開発者ガイドの「ようこそ » プログラミングガイド » リクエスト » リクエストの署名認証について » RESTリクエストの認証方法」に記載されていました。
Version は、Product Advertising API のバージョンです。2011-08-01固定でOKです。
Timestamp は、・・・ 次の記事へ
Signature は、・・・ 次の記事へ
Timestamp および Signature は↓↓も参考にしてください。
Product Advertising APIのItemSearchでキーワードをもとに商品検索
アフィリエイター向けのOperationと言えば、
まずはキーワードから商品を検索するItemSearchです。
丁寧な解説はこちら↓↓
商品検索(ItemSearch) - Amazon Web サービス
覚えておきたいパラメータは2つ。
(必須)商品カテゴリーの指定→ SearchIndex
(任意)キーワードで検索 → Keywords
SearchIndexは必須項目です。
これは検索対象となるカテゴリを指定するものです。
SearchIndex=Allの場合、すべてのカテゴリが対象に。
SearchIndex=Booksの場合、本のカテゴリが対象に。
SearchIndex=Kitchenの場合、キッチンのカテゴリが対象に。
ウェブスクレイピングプログラムで、
いろんなジャンルのサイトからキーワードを抽出して、
とりあえず何かアフィリ商品を探したいという時は、
SearchIndex=All になるでしょう。
本のアフィリ商品を探したい場合はSearchIndex=Booksでしょうね。
で、SearchIndexで指定したカテゴリによって、
keywordを指定できたり、タイトルやISBNを指定できたり、
ソート順をしていできるようになったりします。
とりあえずkeywordの指定方法は基本です。
&SearchIndex=All
&keyword=箱根駅伝
とした場合、全カテゴリを対象に、箱根駅伝というキーワードで検索します。
&SearchIndex=Books
&keyword=AKB48
とした場合、本カテゴリを対象に、AKB48というキーワードで検索します。
ウェブスクレイピング→アフィリという流れの中で、
Product Advertising APIを使う場合はSearchIndexとkeywordの組合わせが基本。
そこにソート機能を付け足していけばいいでしょうね。
SearchIndex-ItemSearch パラメータの組合せ (JP)
上記ページで、どんなカテゴリがあるだとか、
どんなオプションが使えるだとか見れます。
Amazon太っ腹ですね。
APIでなんでも情報提供してくれるわけですから。
APIといえばAmazonですね。
情報量が違いますよ。
あらゆる情報を検索できますね。
しかも全部の商品が報酬対象なんですもん。
いろんな使い道があってワクワクしますね。
Product Advertising API(リンク作成用API)でアフィリコード取得 2日目
昨日の記事の最期に紹介したリンク先のさらにリンク先、
アマゾンの↓このヘルプサイトが役に立ちます。
Signed Requests Helper - Amazon Product Advertising API
必要なのは、下の画像でいうところの赤字の1~3。
1 と 2 は、AWSのアカウントを作成した後、
Management Console にログインして、セキュリティ認証情報のページ。
そこの、アクセスキー IDというのが1。
シークレットアクセスキーが2になります。
3 は赤枠の中をとりあえずコピペしましょう。
harry potter というキーワードで、本のカテゴリを検索するサンプルリクエストです。
4 AssociateTagはAmazon アソシエイトにログインして、
左上に表示されている「トラッキングID」というやつです。
それを入力して、画面最下部の Display Signed URLボタンを押下します。
↓↓すると、Signed URL に表示されるURLがリクエストURLです。
そのURLを、新しいタブを開いて、アドレスバーにコピペしましょう。
すると、レスポンスのXMLが無事表示されました。↓↓
これで準備は終わりです。