Python调用Etsy2模块createListing接口报错:无法使用非店铺主语言创建商品
报错说明
ValueError: Could not decode response from Etsy as JSON: status_code: 400, text: "Shops cannot create Listings in languages other than the Shop's primary language. (fr)", url 'https://openapi.etsy.com/v2/listings'
根因分析
这个400错误是Etsy V2 API的语言校验规则导致的:创建商品listing时的API请求语言上下文必须和店铺主语言一致,且V2版本的createListing接口不支持直接在请求体中传入language参数指定内容语言,默认会使用请求头的Accept-Language值或者平台默认的英语进行校验,和你的法语主店铺不匹配就会触发报错。
解决方案
- 给API请求全局配置法语的
Accept-Language请求头,etsy2模块初始化时可直接设置默认请求头,参考代码如下:
import etsy2 # 初始化认证客户端 api_client = etsy2.ApiClient( api_key="你的Etsy API Key", api_secret="你的Etsy API Secret", access_token="你的授权Access Token", access_token_secret="你的授权Access Token Secret" ) # 设置全局请求头指定语言为法语 api_client.set_default_header("Accept-Language", "fr") # 初始化商品接口实例即可正常发起创建请求 listings_api = etsy2.ListingsApi(api_client)
- 确保你传入
createListing接口的所有文本字段(商品标题、描述、标签、属性值等)均为法语内容,避免多语言内容混合触发额外校验报错。 - 如果你使用的etsy2模块版本较低不支持自定义请求头,可直接修改模块底层的请求逻辑:找到模块中发起POST请求到
/v2/listings的代码段,在requests.post方法的headers参数中新增"Accept-Language": "fr"即可。
验证规则
请求发起后如果返回201创建成功状态码,且返回的listing结构体中language字段值为fr,说明配置已经生效。
补充提示
如果后续有长期开发需求,建议迁移到Etsy V3版本API,V3的createListing接口已经支持直接在请求体中传入language参数指定内容语言,适配多语言店铺场景更加灵活。
内容的提问来源于stack exchange,提问作者mAxYoLo01
相关产品推荐
相关产品推荐

