(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” への36件のフィードバック

  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も取得できました。
    お騒がせいたしました。