SEが教えるEC運営のブログ ウェブ運用と開発現場を経験したSEのTIPS
TOP > BLOG > IT記事

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

早川朋孝 早川朋孝
EC専門のSE

AmazonのSP-APIで在庫を更新する方法は複数ある。まずFBA在庫を更新したいのか、それとも販売商品の在庫を更新したいのかを明確にしないといけない。

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

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

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

    def put_item_stock(inventory_data):
        """
        inventory_data : {"sku": "gld6403go68d", "quantity": 23}
        """
    
        method = 'PATCH'
        canonical_uri = '/listings/2021-08-01/items/' + self.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
×

メルマガ登録

SEが商品登録、在庫管理、発注などのEC業務を効率よくプログラムで実施する方法を無料配信します。

  • APIやツールによる業務効率化
  • 広告運用に関するTips
  • CVRを改善するアクセス解析のコツ
このブログを書いてる人
早川 朋孝 EC専門のSE
IT業界歴20年のエンジニアです。ネットショップ勤務で苦労した経験から、EC・ネットショップ事業者に向けて、バックオフィス業務の自動化・効率化を提案するSEをしています。
Web運用の経験もあり、アクセス解析、広告運用が得意で、広告APIとプログラムとの合わせ技で並の広告代理店にはできない提案が可能です。
プロフィール
API連携の相談にのります
趣味は読書、ピアノ、マリノスの応援など
PAGE TOP