TOP > BLOG > EC関連記事

Amazon SP-SPIのlistings items APIでマーケットプレイス出品の在庫を更新する【Python】

早川朋孝 早川朋孝
ECコンサルタント

AmazonのSP-APIには二種類の在庫更新があります。FBA在庫を更新したいのか、それとも販売商品の在庫を更新したいのかを明確にしないといけません。

今回は販売商品の在庫をPythonで更新する方法を紹介します。使用するAPIはListings Items APIです。
公式ドキュメント

目次

  • ソースコード紹介
  • 活用方法
  • 関連記事

以下のコードではSKUを指定して1商品ずつ更新する方法です。リクエストはpatchである点に注意してください。。product_typeは必須ですが、該当商品のproduct typeが不明な時は「PRODUCT」と指定します。

在庫更新というと一括で実行することが多いですが、一つの商品だけを更新したい場合もあるでしょう。一つの商品の更新をするためだけに全体の更新処理を使うと在庫管理のトラブルの原因になり得るので、APIに単品更新用のエンドポイントがある場合は、それを使うほうが賢明です。

ソースコード紹介

では以下にPythonでAmazonの販売在庫を更新するソースコードの例を示します。

    def put_item_stock(inventory_data):
        """
        inventory_data : {"sku": "hogehoge", "quantity": 23}
        """
    
        method = 'PATCH'
        canonical_uri = '/listings/2021-08-01/items/' + seller_id + '/' + inventory_data['sku']
        headers = {'x-amz-access-token': token,
                         'user-agent': user_agent,
                         'Content-Type': content_type,
                         'X-Amz-Date': amz_date,
                         'Authorization': authorization_header
                         }
    
        patches = []
        patch_operation = {}
        patch_operation['op'] = 'replace'    #'replace' or 'delete' or 'add' etc
        patch_operation['path'] = '/attributes/fulfillment_availability'
        patch_operation['value'] = [
            { 'fulfillment_channel_code': 'DEFAULT',
              'quantity': inventory_data['quantity'],
            }
        ] 
        patches.append(patch_operation)
    
        #指定がない場合はPRODUCTをいれる
        try:
            product_type = inventory_data['product_type']
        except KeyError:
           product_type = 'PRODUCT'

        #patch用のデータを生成
        patch_data = {
         'productType': product_type,
         'patches': patches, 
        }
        body_data = json.dumps(patch_data) 

        request_parameters_unencode = {
          'marketplaceIds': 'hogehoge',
        }
        request_parameters = urllib.parse.urlencode(sorted(request_parameters_unencode.items()))
        request_parameters = json.dumps(request_parameters)

        #リクエスト先エンドポイント        
        endpoint = 'https://sellingpartnerapi-fe.amazon.com' + canonical_uri
        request_url = endpoint + '?' + request_parameters
        response = requests.patch(request_url, data=request_parameters, headers=headers)

        return response

活用方法

在庫更新のAPIは、例えばFBAの在庫を取得して、その在庫を販売用在庫として更新するのような場合が考えられます。FBAの在庫はもちろん引き当て済みと区別して取得できるので、販売可能な在庫より多い在庫を載せてしまう心配はありません。Amazonで販売する際は、Prime表示やカート取得ができても、在庫切れを起こすとそういった優遇が消えてしまう可能性があります。そのため在庫の少ない商品に関しては、実際より少ない在庫数を載せる運用もあります。

関連記事

このブログを書いてる人
早川 朋孝 ECコンサルタント
Dx、AI活用、データ分析、マーケティング、会計などワンストップで御社EC業務を支援します。特にAPIの扱いが得意で、20年の経験とAPIを組み合わせての提案は、他社は簡単に真似できません。
プロフィール
EC業務のDxの相談のります
趣味は読書、ピアノ、マリノスの応援など

EC運営のRPAを支援します

ecコンサルに相談
PAGE TOP