Webは用いる人のリテラシーで決まる ウェブ運用と開発現場を経験したエンジニアの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
×
このブログを書いてる人
早川 朋孝 EC専門のSE
IT業界歴20年のエンジニアです。ネットショップ勤務で苦労した経験から、EC・ネットショップ事業者に向けて、バックオフィス業務の自動化・効率化を提案するSEをしています。
プロフィール
API連携の相談にのります
趣味は読書、ピアノ、マリノスの応援など
PAGE TOP