目次
MWSとは?
https://developer.amazonservices.jp/
AmazonマーケットプレイスWebサービス(MWS)は、統合WebサービスAPIであり、Amazonの出品者がプログラムを使用して、出品、注文、支払い、レポート、その他についてデータを交換できるよう支援するものです。
簡単に言うと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関数に渡すとそのデータを使ってエンドポイントにアクセスします。
コメント