Webエンジニアの開発記

Webエンジニアの開発記録です。Java,SAStruts,jQuery,AmazonWebService,マッシュアップ。

中村修二さんの怒りのブレイクスルー ―常識に背を向けたとき「青い光」が見えてきた 読みましたか?

 通勤中に読んでいます。

 怒りのブレイクスルー ―常識に背を向けたとき「青い光」が見えてきた

 

いい本ですね。

中村修二の思いのたけが伝わってきます。

 

私も会社で言われたことばっかりやるんじゃなくて、

お客からお願いされたシステム開発するんじゃなくて、

自分でWEBサービス作ろう。

そう思いましたよ。

 

中村修二さんは、会社に背いていたみたい。

大学生の頃から大学に背いていたみたい。

下宿でずーーーっと原書読んでたみたい。

 

社会の常識を破ることが、

本のタイトルにもあるブレイクスルーだって。

言ってましたよ。

また開発したくなってきました。

前回更新したのが約1年前ぐらいでしたか。

あの後現場を2つ程変わる中で、

AWS熱も冷めていった。

 

今はプログラミングはしていなくて、

某教育系の業務システムの設計をしている。

やっと詳細設計を終える段階。

 

そうなってくると、

eclipseなんかも触りたくなってきて、

今日は久々にeclipse起動してみた。

 

プログラミングは楽しいね。

Javaでなんかやりたい。

Product Advertising APIのTimestampとかSignatureとかは不要

前回の記事で、頑張って各パラメータについて調べました。

後はTimestampとSignatureだなって思っていたのですが、

それについて調べているうちに、Amazonが用意してくれている、

SignedRequestsHelperというクラスがあることが判明。

 

自分で面倒なことをしなくても、

そのクラスのインスタンスを取得して、

キーとかパラメータとか指定してあげれば、

TimestampやSignature意識しなくて良いみたいです。

 

それを知ったのはこのサイトを見つけてから。

にゃんたこす!徒然草。: Amazon署名認証対応(Java)

 

Amazonのサンプルソースを使ってやっていました。

サンプルソースなんて気にもとめていなかったです。

突っ走っていた自分に反省。

 

 SignedRequestsHelper.java をそのままパッケージに追加しました。

f:id:tahkah0124:20131223004246j:plain

 にゃんたこす!の指摘にあります通り、

Base64() ⇒ Base64(0) に修正

しておきました。

 

でも私の場合は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が取得できました。

f:id:tahkah0124:20131223005723j:plain

 

必須パラメータさえ忘れていなければ、

問題なくリクエストが通るはずです。

 

明日はこれをXPathで解析して情報をとってみます。

いつも読んでいただき、ありがとうございます。

 

 

JavaでProduct Advertising APIのリクエストを作る

では、

JavaProduct Advertising APIのリクエストを作っていきましょうね。

 

アマゾンの本のジャンルから、

箱根駅伝というキーワードで商品を検索するリクエストは

http://ecs.amazonaws.jp/onca/xml?AWSAccessKeyId=AKIAJXXXXXXXXKXAJJKA&AssociateTag=XXXXXX-22&Keywords=%E7%AE%B1%E6%A0%B9%E9%A7%85%E4%BC%9D&Operation=ItemSearch&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2013-12-20T16%3A16%3A30.000Z&Version=2011-08-01&Signature=u5XcWqeA4Jd2M%2BxgRq0DbWDVCv%2FElzhBs0Ftij%2FbAdo%3D

このようになります。

これは

 

これを分解すると、

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 は↓↓も参考にしてください。

認証(Timestamp及びSignature) - 共通パラメータ - Amazon Web サービス

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。

 

f:id:tahkah0124:20131221003333j:plain

1 と 2 は、AWSのアカウントを作成した後、

Management Console にログインして、セキュリティ認証情報のページ。

 

そこの、アクセスキー IDというのが1。

シークレットアクセスキーが2になります。

 

3 は赤枠の中をとりあえずコピペしましょう。

  harry potter というキーワードで、本のカテゴリを検索するサンプルリクエストです。

4 AssociateTagはAmazon アソシエイトにログインして、

  左上に表示されている「トラッキングID」というやつです。

 

それを入力して、画面最下部の Display Signed URLボタンを押下します。

↓↓すると、Signed URL に表示されるURLがリクエストURLです。

f:id:tahkah0124:20131221004902j:plain

 

そのURLを、新しいタブを開いて、アドレスバーにコピペしましょう。

すると、レスポンスのXMLが無事表示されました。↓↓

f:id:tahkah0124:20131221004945j:plain

 

これで準備は終わりです。