如何通过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
相关产品推荐
相关产品推荐

