Amazon Product Advertising API を Ruby から使う
Posted by yoosee on Web at 2009-06-08 10:04 JST1 Amazon Product Advertising API の Signature 対応
この blog でも使っている Amazon A2S(ECS4.0) 呼び出し用の ruby library だが、5月15日から名称を Amazon Product Advertising API と変更するのに伴い、リクエストに秘密鍵を用いた署名が必要となり、現在の形式は8月15日までで使えなくなるらしい。有料サービス提供を見据えてのアクションなのか、他のEC2とインターフェイスを合わせたいのかが理由かと思うが、現状広く使われているAPIをたった3ヶ月で書き換えないとすべて無効にしてしまうというのは、なかなか豪胆なことだ。しかも ECS3.0 から 4.0 にしたのもまだ去年だと言うのに。
私個人としては個人で使う分をどうにかすればいいだけではあるので、取り合えずどうにかした。一応、このblogに出ているAmazonのリンクはほとんどがこれ経由なので、問題なく動いていると思う。更新したファイルは CodeRepos に置かせてもらった。以下からどうぞ。以前と違うのは、上記の、ないし誰が書いた Amazon の API を利用する公開されたライブラリを使おうと思った場合、Amazon.comサイトで Product Advertising API アカウントを作成 し、Accesss Key ID と共に Secret Access Key を取得する必要がある。Secret Key は非公開前提なため、上記の公開ファイルからは ID と Key は省いている。
API 呼び出し側の実装としては、この Secret Key を用いてリクエストを正規化→HMAC::Sha256のSignatureをTimestampとともに渡すと言うことをやらないといけない。
この辺の処理はAmazon Product Advertising APIの認証の件 - zorioの日記を参考に、と言うかほとんどそのまま使っている。何故か openssl の OpenSSL::HMAC::digest を使った SHA256 Hash は不正といわれて通らず、digest/sha2 を使って計算した HMAC では大丈夫だった。
それにしてもこの秘密鍵、OSSでソースを配布するなんて場合には非常に不便。たださんがAmazon.co.jp のフォーラムでOSSからの認証利用について質問しているようだが、そもそもこんなのはAmazonにとっても使われてなんぼなものなはずであり、どうしたいのかがよくわからん。あと、JavaScript から呼ぶのがすごい困難な気がする。どうやって Secret Key を隠せばいいんだろう?
Amazon.com の 30日間値下げ金額保証制度が9月1日で終了
Posted by yoosee on Web at 2008-09-12 09:00 JST1 Amazon.com: Customer Discussions: No more post-order price matching!?!?
米国Amazon.comには、「購入処理から30日以内に値下がりした場合、自己申請によって1度に限り、購入金額から値下がった分の差額を購入者に返還する」と言うことが出来る。いや、出来た。Only orders placed before September 1, 2008 are eligible for a price difference refund under the Post-Order Price Guarantee policy. As of September 1, 2008 we are no longer offering discounts if prices change on our website after you make a purchase."Amazon Dropping Post-Order Price Guarantee Effective Sept 1st - SlickDeals.net Forumsこれを信じる限り、その手続きが9月1日以降は廃止されるらしい。あらら。Amazon.com: Help>Payment, Pricing & Promotions>Pricingに過去にあったその旨の記載が確かになくなっている。
Amazon.com の値段は結構変動が激しいので、あまり頑張って底値を見極めて買わなくても、購入直後に大きく値下がりして泣くということがないこの制度は、精神安定的には結構良かったんだけど、ちょっと残念。
Ruby から Amazon A2S (ECS 4.0) を使う
Posted by yoosee on Web at 2008-03-27 09:00 JST1 Amazon ECS 4.0 への対応
blogを含むサイト内の幾つかのコンテンツで AWS (Amazon Web Service) を使っているが、ECS3.0 が今月末で廃止という事で現行バージョンの ECS4.0 への対応をした。今までAWSへのアクセスに使っていた ruby-amazon は ECS4 非対応なので ruby-aws を使えとのことだが、手元で使うのは ASIN からの lookup 程度なのでお手軽に自前実装。基本は REST でリクエストして帰ってきた XML を REXML に食わせ、XPath で指定して必要な部分を切り出すだけ。そのまま使うには微妙かもしれないし、ライブラリとしては前述の ruby-aws を使えばいいと思うが、参考になる人がいるかもしれないので公開しておく。今のところ自分では使ってないが、キーワード検索も一応実装してある。REST のパラメータや戻り値については Amazon Web サービス入門 等を参考にした。
Amazon 商品へのリンクに ThickBox を使用
Posted by yoosee on Web at 2007-04-17 22:00 JST1 Amazon 商品へのリンクを ThickBox のポップアップを使って表示
Amazon のウェブサービスを使って商品ページを適当に作り、thickbox のリンク先としてそのページを指定するようにした。amazon へのリンクをクリックすると JavaScript が有効な環境では商品情報がポップアップとして出るはず。動作は IE6 と Firefox2.0 で確認した。noscript には今まで通りに画像 + アマゾンへのリンクを入れている。画像はサンプル。リンク先を普通に表示するとこんな感じ。
2 ThickBox で HTML ページを呼び出す際の注意点
thickbox で html へポップアップリンクを張る際には class="thickbox" だけでなく、URI に ?width=xxx&height=yyy を入れる必要があるが、thickbox.js 内で query string が全て削除されてしまうようで、リンク先が CGI の場合にはパラメータが渡せなくてよろしくない (rewriteを使う手はあると思う)。回避策として thickbox.js に手を入れて query をそのままリンク先に渡すようにした。Amazon アフェリエイトの月次処理がおかしい
Posted by yoosee on Web at 2007-03-27 12:00 JST1 Amazon アフェリエイトの月次処理があまりにグダグダ
Amazon のアフェリエイトは今年1月から、去年までの四半期決済が1ヶ月毎の決済に変わったわけだが、今日届いたギフトカードのメッセージにはギフトメッセージ: 2007第1四半期お支払いと書かれていた。四半期となっているが、額を見る限りでは 1月分のみのようだ。そもそも第1四半期はまだ終わってないじゃないか。さらにその次にきたメールはサブジェクトの日本語が崩壊してる。
Amazon アソシエイト・プログラム ID: yooseenet-22 の 1月 2007 月間レポート英語で作ったシステムの日本語化なのだろうが、今時 gettext でもやらないようなベタな文字置き換えをしている。さらに文中の肝心の部分はこうだ。
1月のAmazonギフト券のご紹介に対する紹介料は、円です。ギフト券販売は無かったので額が 0 なのはいいが、額が入っていない上にギフト券以外の販売による金額はどこにもない。このメールが何を伝えたいのか全く分からない。
この切り替えに関しては 1,2月のレポート表示時にも 1ヶ月集計と四半期集計が混ざって表示されていたり、謎の空メールが届いたりと移行作業がうまくいってない感があり、日本アマゾンの開発・検証体制の底が知れる。今のところ支払い自体には大きな問題が出ていないようだが、お金が絡む話なので頑張ってまともに運用してほしいものだ。
それはそうと、いい加減に
Subject: Amazon (略)様からあなたにAmazonギフト券が贈られました!自分に様づけはやめたらどうなんだ。
Amazon.co.jp が彼女を紹介
Posted by yoosee on Web at 2007-01-12 22:00 JST1 Amazon.co.jp から彼女を紹介するメール
アマゾンは彼女の紹介業をはじめたらしい。「彼女など」と言うのがまた気になるところであり、おすすめ「商品」と言い切っているのがビジネスライクで流石(?)は外資と言う感じである。
もちろんこれは単に aiko のアルバム「彼女」の紹介というだけであったのだけど。サブジェクトを見たときに吹いた。どこの出会い系 spam かと。しかし最近はアダルトグッズの販売もしているし、「この商品を買った人にはこんな彼女がお勧めです」的なレコメンドがある日突然始まる可能性はあるのかもしれない(無いって)。
Plagger で Amazon アソシエイトレポートをメール
Posted by yoosee on Web at 2006-10-20 23:42 JST1 しげふみメモ:PlaggerでAmazonアソシエイトレポートをGmailへ送る
これもほぼそのまま。Amazon のレポート画面にログインして内容を閲覧するというのを自動化できる。こういうのは Plagger の最も基本的な使いかただろう。一週間に一通位の頻度にしようと思ったけど現状だとレポートページの種類は選べないのか。Google Adsense レポートを以下略は無いのかなと思ったけど、そもそもカスタムビューのレポートメール生成機能があるから必要ないのだな。Amazon も自身で提供すべき機能だと思うんだが。
Amazon.co.jp の WebService (AWS) はデータの反映が遅い?
Posted by yoosee on Web at 2006-07-06 23:42 JST1 レビュー数に関する Amazon サイトと AWS 取得データの差違
Amazon Web Service を使ったツールを幾つか作っていてしばらく前から気になっていたのだけど、AWS のデータと Amazon サイトのレビュー数が違うことが多々ある。もちろん cache は無効にした上で試していて、Webサイトでは10程度レビューがあるときに AWS だと 2 個しかなかったり 0 個だったりと、定性的に調べていないのではっきりとは言えないが 1,2日どころではなく数週間以上の単位で反映が遅れているのではなかろうか。日本の AWS は wishlist search がまともに動かなくなっていたりもしたし、今一つ真面目にやっていない感がある。実際のところどれくらいのコストを書けて jp 用の開発は行われているんだろうか。
Amazon の自動最適化型広告「Amazonおまかせリンク」
Posted by yoosee on Web at 2006-06-27 23:42 JST1 Amazon おまかせリンク(TM) を使ってみる
Amazon が Google Adsense のような、ページの内容に最適化された広告を自動で挿入するタイプのアソシエイト・リンクを開始したようだ。Amazonおまかせリンク(TM)のコードがWebページに貼り付けられ、3-4回程度ページが表示された後に、最適な商品を表示するようになります。Amazonアフェリエイト おまかせリンク(TM)とのことなので、Google のように全サイト巡回するタイプではなく、恐らくページが表示された際に JavaScript から Amazon が呼ばれ、Amazon 内に呼び出し元ページのインデックスが無い場合には取得に行くようなアクションになっているのではなかろうか。
さて早速 まんがめも: ハリーポッターの主要人物のうち2人が死ぬ などに挿入してみた。しかしハリー・ポッターであるのが明確な割に、お勧め精度は今一つに感じられる。
Amazon Wishlist が複数リスト対応
Posted by yoosee on Web at 2006-02-23 23:42 JST1 amazonwishlist.rb
Amazon wishlist に複数リストの管理機能が追加されたようで、Wishlist を複数使い分けたり自分のお勧めリストとして使うことも出来るようだ。既存の Wishlist は Recommendation として、新規に Wishlist を別途作ってみた。以前に書いた Amazon wishlist 公開スクリプト は EWS での WishlistSearch が動かなかったので Webページから情報を取得するようにしていたのだが、相変わらず EWS 経由ではデータが取れなかったのと Wishlist ページの URL が変更されていたので追従して変更。アイテムについて書いたコメントをうまく引っ張れるといいんだけど、EWS からはやはり取れないな。
Amazon EWS の WishlistSearch が動かない
Posted by yoosee on Web at 2005-11-10 23:42 JST1 Amazon EWS の WishlistSearch が動かない
理由は不明ながら Amazon Wishlist Search が動かないようなので、EWS 経由での Search をやめて html を直接 parse する方法にした。parse と言っても /ASIN\/([0-9A-Z]+)\// を抜き出して uniq しているだけだが、とりあえず動く。取り出した asin は 普通に asin_search に投げて情報取得しているくらいなので、Wishlist 以外の機能は問題なく動いているように見えるし、どうも jp 以外では出ていない問題らしいのだが、Amazon からは返答無し。負荷と言っても殆んど static な結果なはずだし、local cache も使っているのだが、はて...