MENU
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
あらゆるモノにHackする、探究者の読み物。
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
Let's Hack Tech
  • ホーム
  • プログラミング
  • ワードプレス
    • プラグインプラグイン関連記事
    • 賢威賢威のカスタマイズ
    • CSSCSSの関連記事
  • サイト情報
    • プライバシーポリシー
  • ツール
    • メルエディター
    • フリマスパイダー – 疾風
    • フリマスパイダー
    • -ポイ活くんα-
  • お問い合わせ
  1. ホーム
  2. プログラミング
  3. 言語別
  4. Python
  5. 【サンプルコード付き】AmazonMWSをPythonのrequestsで使う。

【サンプルコード付き】AmazonMWSをPythonのrequestsで使う。

2022 5/23
Python
2019-03-312022-05-23
PythonのrequestsでAmazonMWSを使う
目次

MWSとは?


AmazonマーケットプレイスWebサービス(MWS)は、統合WebサービスAPIであり、Amazonの出品者がプログラムを使用して、出品、注文、支払い、レポート、その他についてデータを交換できるよう支援するものです。

https://developer.amazonservices.jp/

簡単に言うとAmazonの商品データや注文データを自作のツールで取扱いしやすい形で提供してくれるAPIです。

AmazonのAPIは二種類存在しており、MWSはその中でも出品者向けのAPIになります。対になるもう一つのAPIはProduct Advertising API(PA-API)と言い、アフィリエイター向けのAPIです。

Pythonのrequestsを使ったMWSサンプルコード

import base64
import datetime
import hashlib
import hmac
import urllib.parse
import requests
import six


AMAZON_CREDENTIAL = {
    'SELLER_ID': '★',
    'ACCESS_KEY_ID': '★',
    'ACCESS_SECRET': '★',
}

DOMAIN = 'mws.amazonservices.jp'
ENDPOINT = '/Products/2011-10-01'


#Idlistは最大5 回復レートは5商品/秒 最大20リクエスト 1時間あたり18000
def GetMatchingProductForId(IdList):
    q= {
        'Action': 'GetMatchingProductForId',
        'MarketplaceId': 'A1VC38T7YXB528',
        'Version': '2011-10-01',
        'IdType': 'ASIN',
    }
    [q.update({'IdList.Id.' + str(i + 1):Id}) for i,Id in enumerate(IdList)]
    
    return q

#Idlistは最大20 回復レートは10商品/秒 最大20リクエスト 時間最大36000リクエスト
#新品のカートボックス価格と中古のカートボックス価格を返す
def GetCompetitivePricingForASIN(IdList):
    q= {
        'Action': 'GetCompetitivePricingForASIN',
        'MarketplaceId': 'A1VC38T7YXB528',
        'Version': '2011-10-01',
    }
    [q.update({'ASINList.ASIN.' + str(i + 1):Id}) for i,Id in enumerate(IdList)]
    
    return q
    
#Idlistは最大20 回復レートは10商品/秒 最大20リクエスト 時間最大36000リクエスト
#最低価格	
#ItemCondition値:#New #Used #Collectible #Refurbished #Club #デフォルト:All
def GetLowestOfferListingsForASIN(IdList,ItemCondition='New',ExcludeMe=True):
    q= {
        'Action': 'GetLowestOfferListingsForASIN',
        'MarketplaceId': 'A1VC38T7YXB528',
        'Version': '2011-10-01',
        'ItemCondition': ItemCondition,
        'ExcludeMe': ExcludeMe
    }
    [q.update({'ASINList.ASIN.' + str(i + 1):Id}) for i,Id in enumerate(IdList)]
    
    return q

#Idlistは最大20 回復レートは1リクエスト/5秒 最大20リクエスト 時間最大720リクエスト
def ListMatchingProducts(Query,QueryContextId='All'):
    q= {
        'Action': 'ListMatchingProducts',
        'MarketplaceId': 'A1VC38T7YXB528',
        'Version': '2011-10-01',
        'Query': Query,
        'QueryContextId': QueryContextId
    }
    
    return q
    
#最大20 回復レートは1リクエスト/5秒 最大20リクエスト 時間最大720リクエスト
def GetProductCategoriesForASIN(ASIN):
    q= {
        'Action': 'GetProductCategoriesForASIN',
        'MarketplaceId': 'A1VC38T7YXB528',
        'Version': '2011-10-01',
        'ASIN': ASIN
    }
    
    return q

def PostMWS(q):
    
    timestamp = datetime_encode(datetime.datetime.utcnow())
    last_update_after = datetime_encode(
        datetime.datetime.utcnow() - datetime.timedelta(days=1)
    )
    
    data = {
        'AWSAccessKeyId': AMAZON_CREDENTIAL['ACCESS_KEY_ID'],
        'MarketplaceId': 'A1VC38T7YXB528',
        'SellerId': AMAZON_CREDENTIAL['SELLER_ID'],
        'SignatureMethod': 'HmacSHA256',
        'SignatureVersion': '2',
        'Timestamp': timestamp,
    }
    
    data.update(q)
    query_string = urllib.parse.urlencode(sorted(data.items()))
    canonical = "{}n{}n{}n{}".format(
        'POST', DOMAIN, ENDPOINT, query_string
        )
    h = hmac.new(
        six.b(AMAZON_CREDENTIAL['ACCESS_SECRET']),
        six.b(canonical), hashlib.sha256
        )
    signature = urllib.parse.quote(base64.b64encode(h.digest()), safe='')
    url = 'https://{}{}?{}&Signature={}'.format(
        DOMAIN, ENDPOINT, query_string, signature)
        
    res = requests.post(url)
    
    return res

if __name__ == '__main__':
    asin = ['B07G2DLKYL','B0784GLG4V']
    q = GetLowestOfferListingsForASIN(asin)
    res = PostMWS(q)
  print(res)

MWSサンプルコード解説

いくつかのエンドポイントに対してアクセスしやすいように、各エンドポイントへの振り分けを関数化しています。

メインルーチンでは例としてGetLowestOfferListingsForASINへのアクセスをしています。

各エンドポイント名の関数でアクセス用の構造化データを作り、辞書型として返しています。

受け取った辞書データをPostMWS関数に渡すとそのデータを使ってエンドポイントにアクセスします。

Python
Amazon MWS Python
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする コメントをキャンセル

email confirm*

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

シンプル美と機能性を両立させた、国内最高峰のWordPressテーマ『SWELL』
人気記事
  • IQテストいくつか受けてみました
    ネット上で信憑性がありそうなIQテスト、5種類まとめて受けた結果…
  • hayate
    メルカリの商品を世界最速で購入するためだけのアラートツール
  • 【Python】BeautifulSoupの使い方・基本メソッド一覧|スクレイピング
  • Pythonファイルのexe化
    【悲報】PyInstallerさん、300MBのexeファイルを吐き出すようになる
  • Amazon Echo アレクサのコマンドまとめ
    AmazonEchoの使い方とできる事、アレクサへの指示コマンド一覧
最近の投稿
  • 正規表現処理の濁点でハマった話2024-12-12
  • 保護中: 疾風v2更新履歴2024-05-31
  • 【自営・経営者向け・税金も】クレジットカードガチ勢による最強クレカ解説2023-10-23
  • PyQt5 QListWidget の item削除でtextBoxのフォーカスが奪われる2023-03-05
  • WordPressからのメールが届かない時の調査と解決法2023-02-27
目次
目次