(22)MWS実践-商品(最低価格)-Excel-VBA



AmazonのMWSで出品リストを取得するサンプルプログラムを提供します。Amazonライブラリを使わずにExcel-VBAで製作していますので、カスタマイズされたい方にお勧めです。
PHP版ではMWSの主な全処理を製作しておりますが、Excel-VBAは本ページでMWSの製作紹介しますので、その他の処理は本プログラムを参照し各自で製作頂ければと思います。MWS自体の処理の流れや仕組みはPHPとExcel-VBAなどプログラム言語で差分はありませんので、本ページのExcel-VBAの製作がわかれば各自で製作頂けると思います。

MWSの商品処理はフィードやレポートのように要求を依頼して状態を確認、結果取得のような一連のフローではなく、リクエストに対して即時に情報を返してきますので、普通のREST-API(リクエストとレスポンス)が1回だけで非常にシンプルです。

動作はWindowsOS上で確認していますが、基本的にはExcelが使えればどこでも動くはずです。MWSのシートにMWS登録で取得したIDを記載して実行してください。
A列にはASINを任意に記載して実行すればB列に最低価格が取得できるようになっています。基本は出来ていますので少し変えればタイトルでも何でも情報を取得できると思います。
また、今回はMWSの”GetLowestOfferListingsForASIN”で最低価格を取得していますが、基本情報の取得”GetMatchingProductForId”などもほぼ同じようにプログラムできますので参考に自由に変更してください。

以下に製作したExcelとプログラムを記載します。
Excelサンプル

“(22)MWS実践-商品(最低価格)-Excel-VBA” への72件のフィードバック

  1. 池田 より:

    こんにちは。1つ教えて下さい。
    GetMatchingProductForIdで情報を取得する場合どのような記述にすればよろしいのでしょうか?

  2. 池田 より:

    わざわざありがとうございます。
    やってみます。

  3. しんね より:

    こちら動作しません、、動作するように修正してASINコードも各キーもいれても結果が返ってきません。

    • MrX より:

      なぜか、マクロの設定がおかしかったです。一応、こちらで使えるように修正しました。
      再度、Excelのsample.xlsmをダウンロードして試してください。
      マクロを有効にしてExcelを開く必要があります。

  4. しんね より:

    早々にご返信ありがとうございます。検索できるようになりました。下記のコードが取得できないのですが、(他ツールでは取得できる、ロジックは同じと思います)、これは20つづ取得していることに関連するでしょうか?他のコードを先頭にいくつか並べて取得できる場合もあります。

    B00D0G42RI
    B00PGO481C
    B00D0G42RI
    B003VQSTXU
    B008GPV9OM
    B003A4ETLO
    B003JEVOIG

  5. しんね より:

    B00D0G42RIが2個あり、重複していました。重複してい売る場合、以降の20件がとれていないようです。

    • MrX より:

      なるほど、連絡ありがとうございます。あくまでExcelはサンプルですので後は自由に改版頂いて問題ありません。
      データが取得できてよかったです。よろしくお願いします。

  6. しんね より:

    貴重なサンプルありがとうございます、重複の場合の処理いれてみようかと思います。

  7. Koji Kobayashi より:

    こんにちは。
    Amazon商品の〔親カテゴリー〕/〔子カテゴリー〕/〔孫カテゴリー〕/〔ひ孫カテゴリー〕までをリストにしてExcelに一括で取り込みたいのですが、
    このプログラムを利用してできますでしょうか?

    よろしくお願いします。

    • MrX より:

      Amazonの情報を取得するための正式なAPIはセラー用のMWS(Amazon Market Web Service)とアフィリエイト用のAPI(Product Advertising API)の2つがあります。
      本ExcelはMWSのサンプルプログラムで以下のサイトに記載されていることができます。基本的にMWSはIDがわかってないと価格を調べれません。
      http://docs.developer.amazonservices.com/ja_JP/products/index.html

      カテゴリーで取得する場合はアフィリエイト用のAPIを利用されるのが良いと思います。
      各カテゴリーはブラウズノードIDで一覧化されていますので、そのカテゴリーごとに商品を取得できます。
      が、制限もいろいろあります。
      ブラウズノードを見てもらえればと思います。
      https://affiliate.amazon.co.jp/gp/associates/help/t100

      よろしくお願いします。

  8. 高橋 より:

    Amazon.co.jpよりデータ取得をしようとAmazonMWSよりキーを取得し、Excelサンプル39行目Country_i=1、対象ASINを”B00D0G42RI”とし実行してみましたが、143行目のxmlでデータ取得できません。
    原因としてどのようなことが考えられるか教えて頂けないでしょうか?

    よろしくお願いします。

    • MrX より:

      原因としてはいくつも考えられます。理解頂いていると思いますが、143行目で実際にAmazonにアクセスし、データを取得するところです。
      そのため、多くの原因が考えられます。NWの到達性、MWSの設定誤り、プログラムで作成したURLの誤りなどです。
      アクセスするURLを一旦シートに表示するようにプログラムを記載し、ChromeやEdgeなどのWebブラウザでそのURLにアクセスして頂くとエラー内容を把握することができます。
      lowestWS.Cells(5, 5) = URI
      でシートの5行目5列目に表示されると思います。143行目の前に記載し表示されたURLをWebブラウザでアクセスし内容を確認してみてはいかがでしょう。
      データが取得できていれば問題ありませんが、おそらくエラーとなると思います。MWSが違っていればそのようなエラーとなります。

  9. より:

    お世話になっております。

    64ビット対応するためには、どうように対応するべきかを教えていただければ助かります。

    よろしくお願いいたします。

    • MrX より:

      質問ありがとうございます。こちらではWindows10端末は64Bitでも動作確認できています。こちらの理解では、エクセルが動けば64Bitでも32Bitでも動作すると思っています。
      よろしくお願いします。

      • より:

        ご回答ありがとうございます。

        こちらは64ヒットですが、VBScript Edit画面でコンパイルすると、コンパイルエラーが表示されました。その対応として、VBScript Edit画面のヘッダー部、また変数宣言部に64bitの場合、32bitの場合に分けて処理されるようにしました。すると、今はコンパイルエラーは解除されています。
        こちらの対応は正しかったのでしょうか?
        コメントいただければ幸いです。
        よろしくお願いいたします。

      • より:

        取得できました。
        コメントありがとうございました。

  10. より:

    143行目で、
    アクセスが拒否されましたエラーが発生ましたが、それの原因についてコメントいただければたすかります。

    • MrX より:

      2016年11月3日 10:10 AM のコメント同様です。URIをシートに表示し、Webブラウザ(Chrome,IE,Edge等)で表示されたURLにアクセスしエラー内容を確認ください。よろしくお願いします。

      • より:

        ご回答ありがとうございます。
        ブラウザでそのURLを表示してみましたが、以下のErrorResponseでした。
        ーーーーーーーーーーーーーー

        Sender
        AccessDenied
        Access denied

        f425b4bd-160e-4a3f-8721-183d63c4fd1e

        ーーーーーーーーーーーーーー
        おそらくアクセス権がないというエラーのようです。
        ちなみに、素朴な質問させいていただきまあす。
        「getLowest」の「asin」にアマゾンのKindleのasinコード「B01FIG3SMC」を登録しましたが、それがいけなかったでしょうか?自分が登録していないasinにはアクセス権がないことでしょうか?
        お手数ですが、ご回答のほどお願いいたします。
        よろしくお願いいたします。

      • より:

        取得できました。
        コメントありがとうございました。

  11. より:

    お世話になっております。
    以下のエラーメッセージで動きませんが、解決方法はありましょうか?

    Request signature is too far in the future. Timestamp date: 2016-11-13T21:08:16Z

    お手数ですが、よろしくお願いします。

    • より:

      今まで動いたのがいきなり動かないのは、何かご存じでしょうか?
      よろしくお願いします。

      • MrX より:

        連絡ありがとうございます。
        今まで使えていて動かなくなったのは、わかりませんが、エラー内容からするとパケット生成時に設定する時間がおかしいということです。
        11月13日の6時に頂いているエラーが時間が21時になっていますので、PCの設定時間などを確認頂きたいと思います。

        • より:

          お世話になっております。
          ご回答ありがとうございます!
          ご回答の内容は参考いたします。
          引き続きよろしくお願いいたします。

          • より:

            お世話になっております。
            手元のPCのTimeZoneは日本(東京)なので特に問題ないと思いますが、今日の午前0時にマクロ実施したらパケットのTimeはマクロ実施時間より未来の時間と設定されてしまいました。
            因みに、今は正常動作しております。
            今後、この点について調査してみたいと思います。
            引き続きよろしくお願いいたします。

  12. より:

    お世話になっております。

    ASINから商品名、SKUの取得も可能でしょうか?
    可能であればAPI名を教えていただければ助かります。
    度々お手数ですが、よろしくお願いいたします。

    • MrX より:

      可能です。以下を参照頂き、開発者ガイドを読んで頂ければと思います。
      http://mrxblog.net/2015/10/4_mws/

      Amazon開発者ガイドの以下を参照ください。
      商品 – バージョン2011-10-01 » GetMatchingProduct
      商品 – バージョン2011-10-01 » GetMatchingProductForId
      商品 – バージョン2011-10-01 » GetMyPriceForASIN

      • より:

        早速のご回答ありがとうございます!
        参考にさせていただきます。
        よろしくお願いいたします。

      • より:

        お世話になっております。
        Action「GetMatchingProduct」を試していますが、以下のエラーメッセージが表示されましたが、解決方法についてコメントいただけば助かります。
        ーーーー
        The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.
        ーーーー
        お手数ですが、よろしくお願いいたします。

        • より:

          お世話になっております。
          商品名も取得できました。
          サポートありがとうございました。
          よろしくお願いいたします。

  13. より:

    お世話になっております。
    先ほど、signatureのエラーの件は、解決できました。
    引き続きよろしくお願いします。

  14. 橋本 より:

    はじめまして。
    貴重なソースの公開ありがとうございます。

    私の環境では getLowestPriceByMws()の中の getProObj.Lengthが常に0となって処理が止まっているようです。

    エラーは出ず、「MWS取得中…」のメッセージが出たままです。

    余談ですが、現在Access VBAでMWSのプログラムを自作中なのですが、スクラッチパッドと同じ署名で送信しているにもかからず、署名がマッチしないというエラーが返って来てほとほと参っております。

    カスタマーサポートからも的確な助言がありません。MWSの開発ガイドは正しいのか疑問を感じるこの頃です。(仕様ではPOST送信が前提のようですが、こちらのプログラムは違うようですし)

    • MrX より:

      MWSに関してはREST-APIとなっていますので、アクセスするURLに認証情報も全てが入ります。
      そんため、アクセスURLをブラウザ(EdgeやChrome等)で閲覧するとAmazonからの返信内容が見え、エラー内容がわかります。

      ‘XML オブジェクト作成
      Set xml = CreateObject(“Microsoft.XMLDOM”)
       xml.async = False
      xml.Load URI

      の部分でHTMLアクセスしていますので、URIをその前に以下のような記述を追加しアクセスURLを表示し、すぐにブラウザでアクセスすれば内容が見れます。(タイムスタンプがありますが数十秒程度は大丈夫です。)

      lowestWS.Cells(5, 5) = URI

      表示されたURLでデータが取得できていれば問題ありませんが、おそらく取得できていないと思います。
      この要領でデバッグしてみてはいかがでしょうか?

  15. 浜ちゃん より:

    USの最低価格は取得できるのですが
    JPの最低価格が取得できない状況です
    アクセスキー等は問題なく設定しております。

  16. 浜ちゃん より:

    大変失礼いたしました。
    Country_i = 1に変更したところ
    JPも取得できました。
    お騒がせいたしました。

  17. くまきち より:

    こんにちは
    教えてください。

    GetCompetitivePricingForASIN
    でカート価格を取得しようとしているのですが、
    カート価格が存在しない要素がある場合、
    エラー91で止まってしまいます。

    これを回避するにはどうすればいいでしょうか?

  18. くまきち より:

    また、GetMatchingProductForId でJANコードから
    ASINを取得しようとしているのですが、一度の回復レートが5なので、5個ずつにヘンスウヲ変えてもうまく動きません。

    なにが考えられるのでしょうか?

  19. くまきち より:

    質問ばかりですみません。

    新品のみの出品数を取得する場合、
    この中から属性がNewのみを取る場合の設定を教えて下さい。

    10
    8
    18

  20. くまきち より:

    ありがとうございます。
    ただ、どうしてもシグネチャエラーが出てしまいます。
    教えていただいたサイトで変換したものとタイムスタンプを合わせてもシグネチャが違うものになります。

    原因は何が考えられますでしょうか
    The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.

    • MrX より:

      シグネチャエラーということはMWSの値か設定関連が考えられます。
      アクセスURIを製作する時に問題あると思います。
      絶対に動きますので、基礎から見直し少しづつ確実にいろいろやって頂ければと思います。

      • くまきち より:

        ありがとうございます。
        ちょっと確認しながらいじってみます

      • くまきち より:

        無事にできるようになりました。

        ただ、タイムスタンプが標準時のため、夜中にさせようとしたら、9時間ずれてしまうので、日付がずれてしまします。その部分は日付を9時間マイナスしてフォーマットしたら動きました。

  21. はま より:

    JANで検索したくて、GetMatchingProductForIdを利用したいのですが、どこを変えればいいのか、わからない。

  22. tida より:

    こんにちは、もしこのような MWSと連携したvbaの解説書があれば教えてください。

    • MrX より:

      きちんとした解説書は見たことありませんが、コメントにも何度も記載していますが、AmazonMWSドキュメントがあります。
      https://developer.amazonservices.jp/gp/mws/docs.html
      Amazonが正式に公表しているものですし、親切に記載されています。
      こちらの通りですので、これをもとにいろいろやってます。ソースも公開していますので、参照頂ければそんなに難しくないと思います。

  23. tida より:

    Seller ID:Marketplace ID:Developer Account Number:AWS Access Key ID:Secret Key:
    上記のものをエクセルにセットして、IDを入力して識別できるようにしたいのですが、
    アドバイスお願いいたします。

  24. Norisuke より:

    お世話になっております。
    納品プランを自動でアップロード出来るようにしたいのですが、MD5の認証が必要と記載があります。こちらは何に対して、MD5の計算が必要なのでしょうか?ドキュメントを確認させていただいたのですが、いまいちイメージが湧かなかったので。。。アドバイスいただけると幸いです。

  25. Norisuke より:

    ちなみにVBAから実装できると幸いです。何卒よろしくお願い致します。

    • MrX より:

      はい、必要な認証などはダウンロードいただくとファイルに入っています。
      VBAで実装しています。よろしくお願いします。

      • Norisuke より:

        ご返信ありがとうございます。
        処理を行ってみます。

        • Norisuke より:

          大変初歩的な質問なのですが、Scratchpadを使用する際は署名リクエストがPOSTなのに対し、VBAで作成する場合はGETのみでしか署名の認証がうまくいかないのでしょうか?

          • MrX より:

            基本的にScratchpadと本番環境と同じ動きでした。利用した時もそうでした。こっちがPOSTでこっちがGETとかっていうことはないと思います。正確にはAmazon仕様に合わせる必要がありますね。Amazonドキュメントはコメントでも何度も共有していますのでそちらで確認してもらえれば、そちらが一番正しいです。

  26. 音次郎 より:

    とても参考になるサンプルで私もアソシエイトAPIからMWSに移行しようと現在悪戦苦闘しております。

    私はEXCELではなくACCESSでコードを書いておりますが、アソシエイトAPIの方はACCESSでもEXCELでも動かしたことがありますので、ACCESS VBAでも動くものと思っております。

    結論から行きますと、情報は取得できておりません(汗)

    Amazonのスクラッチパッドでチェックをしてみたのですが、MWSAuthToken:の欄に入力する情報がわからず困っております。。。。。

    アドバイスをいただけますでしょうか?

    • MrX より:

      遠い昔の記憶になので、MWSのKEY類以外で入力した記憶がないですが、よく使いましたがあまり難しくなく普通に動いてました。。。
      「入力なし」では動かないのですよね?お役に立てないですが、あまりそのパラメータは必要な感じがしないですね。

  27. 音次郎 より:

    お返事ありがとうございます。
    調べたら第三者に開発プログラムを使わせる時なんかに関係しているようで、なくても何とか動きました。

    ただの宣言忘れでした。。。。。(汗)

    今までアソシエイトAPIでとれなかった情報が取れそうで楽しみです。

    この記事のおかげです、ありがとうございました。

  28. ただし より:

    初めまして。
    教えてください。

    ASINコードから、「ブランチノード」、「リーフノード」、「カテゴリ総称」(家電・エアコン・日立・・・)を取得するツールをVBAで作成しています。
    どのAPIを利用すればよいか、教えて頂けますでしょうか?

    • MrX より:

      「ブランチノード」などを利用したいのであれば
      Amazon Product Advertising API(リンク作成用API)
      を利用するべきだと思います。
      http://mrxblog.net/2015/10/6_api_excel/
      を参照されてはいかがでしょうか?
      〔見落としてて返信が遅くなりましたm(._.)m〕

  29. とら より:

    サンプルのプログラムなのですが、実行すると、うまくデータが取得できるときと、できない時があります。いったいこれはどうしてなのでしょうか?
    (同じASINをA列に入れていてのことです)

    • MrX より:

      MWSで動作したりしなかったりということは考えにくいですが、一定時間内で検索可能数がAmazonで制限されています。
      http://docs.developer.amazonservices.com/ja_JP/products/Products_Throttling.html
      こちらを確認してみてください。

      • とら より:

        返信ありがとうございます。
        やはり、うまく動作しない時間帯があります。
        どうも、午前9時を過ぎると動くようです。

        署名作成に使うタイムスタンプ
        82行目の中に、「”h”, -9, Time」という部分がありますが、これが関係しているということはないでしょうか?

        的外れでしたら、すみません。

        • MrX より:

          なるほど、では、そちらを外して動作させてみてはいかがでしょう。
          日本時間が標準時間から時差が9時間なので補正していましたが、もしかしたら日本のMWSは大丈夫ですが海外は標準時間で動作させる必要があるかもしれません。
          午前9時で日が変わるので関係しているかもですね。
          81-82行目を以下に変更してみてください。
          ——
          ‘署名作成に使うタイムスタンプ
          timestamp = Format(Date, “yyyy-mm-dd”) & “T” & Format(CDate(DateAdd(“h”, 0, Time)), “hh%3AMM%3Ass”) & “Z”
          ——

          • とら より:

            何度もすみません。
            補正を0にしてみましたが、やはり同様でした。
            午前9時を回った瞬間からしか取得できません。

  30. とら より:

    補正をする場所を間違えたかもしれません。
    明日、もう一度確かめてみます。

  31. とら より:

    本日、再度補正を0にして確認しました。
    やはり取得できませんでした。

    それで、82行目の、Format(Date, “yyyy-mm-dd”)
    を “2017-09-25” と書き換えてみたところ、データが取得できました。

    これはいったいどうしてでしょう?

  32. とら より:

    あ、今気がついたのですが、時刻だけでなく、日付も補正しなければならないということではないでしょうか?

    • MrX より:

      そうですね、日付も時間と合わせる必要があると思います。
      MWSを利用する国の日付に合わせる必要があるかもしれません。そこは試してみて実行できる内容で良いと思います。
      よろしくお願いします。

  33. […] 今回ご紹介するプログラムは、『Mr Xの徒然なるブログ』の『(22)MWS実践-商品(最低価格)-Excel-VBA』という記事を参考にさせていただき、いくつかの不具合を修正したり、クラス化して […]

コメントを残す

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