You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python-Amazon SP-API的JSON_LISTINGS_FEED实现多站点调价?

多站点商品价格同步方案(JSON_LISTINGS_FEED)

核心结论

必须为每个目标站点单独创建并提交Feed。Amazon SP API的JSON_LISTINGS_FEED是站点绑定的,一个Feed只能对应单个marketplace,无法在一个Feed里同时更新多个站点的价格数据。

实现步骤

1. 定义目标站点列表

先把需要同步的站点整理成列表,比如:

target_marketplaces = [
    Marketplaces.ES,
    Marketplaces.FR,
    Marketplaces.DE
]

2. 循环处理每个站点

对每个站点,修改Feed中的关键参数并提交:

  • 替换purchasable_offer里的marketplace_id和对应货币
  • 创建对应站点的Feeds实例
  • 提交Feed

修改后的示例代码:

import json
from io import BytesIO
from sp_api.api import Feeds
from sp_api.base import Marketplaces

# 基础Feed模板(去掉站点硬编码)
base_feed = {
    "header": {
        "sellerId": "xxxxxx",
        "version": "2.0",
        "issueLocale": "es_ES"  # 可根据站点调整,或统一用en_US
    },
    "messages": [
        {
            "messageId": 1,
            "sku": "SKU-1",
            "operationType": "PARTIAL_UPDATE",
            "productType": "PRODUCT",
            "attributes": {
                "purchasable_offer": [
                    {
                        "our_price": [
                            {
                                "schedule": [
                                    {
                                        "value_with_tax": 100
                                    }
                                ]
                            }
                        ],
                        "currency": "",
                        "marketplace_id": ""
                    }
                ]
            }
        }
    ]
}

# 站点与货币映射(按需调整)
marketplace_currency = {
    Marketplaces.ES: "EUR",
    Marketplaces.FR: "EUR",
    Marketplaces.DE: "EUR",
    Marketplaces.UK: "GBP"
}

# 目标站点列表
target_marketplaces = [Marketplaces.ES, Marketplaces.FR, Marketplaces.DE]

for marketplace in target_marketplaces:
    # 复制模板避免修改原数据
    feed_json = base_feed.copy()
    # 填充站点相关参数
    purchasable_offer = feed_json["messages"][0]["attributes"]["purchasable_offer"][0]
    purchasable_offer["marketplace_id"] = marketplace.marketplace_id
    purchasable_offer["currency"] = marketplace_currency[marketplace]
    
    # 转换为API要求的字节流格式
    feed_json_str = json.dumps(feed_json)
    feed_json_bytes = BytesIO(bytes(feed_json_str, "utf-8"))
    feed_json_bytes.seek(0)
    
    try:
        # 创建对应站点的Feeds实例
        feeds_api = Feeds(credentials=MYCREDENTIALS, marketplace=marketplace)
        # 提交Feed
        response = feeds_api.submit_feed(
            "JSON_LISTINGS_FEED", feed_json_bytes, "application/json; charset=UTF-8")
        print(f"站点 {marketplace.name} Feed提交成功,Feed ID: {response.get('feedId')}")
    except Exception as e:
        print(f"站点 {marketplace.name} Feed提交失败: {str(e)}")

3. 额外提示

  • 多SKU批量处理:如果要更新多个SKU,直接在messages数组里添加更多条目即可,每个条目对应一个SKU,保证messageId唯一。
  • 限流与重试:API调用有频率限制,建议添加重试机制处理超时、限流等异常。
  • IssueLocale设置:可以根据站点匹配对应语言(比如法国站用fr_FR),能让错误提示更符合当地语言习惯。

内容的提问来源于stack exchange,提问作者David Martín Vergués

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:25:34