深度探索亚马逊刊登 Listing Api(一)

supoman
发布于 2024-06-28 / 68 阅读
0
0

深度探索亚马逊刊登 Listing Api(一)

背景

亚马逊的刊登可以用excel、xml和json三种数据格式,很多卖家和开发者在之前几乎使用excel操作刊登,一份文件可以通过后台或者Feed API POST_FLAT_FILE_LISTINGS_DATA操作刊登,安静美好的岁月在2024.04(文末通告链接)被官方打破,一文政策通告开发者将在一年后停止使用这种方式操作,开发者需切换到以json格式的刊登,json格式的好处无需多说,缺点吗!嗯~~~感谢亚马逊赏饭吃(kpi)。但是要重新打造实现这个整个刊登流程,一众自研卖家和ERP不脱层皮也得掉一大把头发。亚马逊刊登是我见过最复杂的了!

在开始之前,默认你已经了解亚马逊的刊登excel、xml和json三种数据格式,如果你还对Listing Api的刊登和后台excel模板刊登有和差异还有问题的地方,请移步此文了解:

苏坡面:亚马逊(Listing)刊登-笔记梳理4 赞同 · 4 评论文章

本系列文章跟着亚马逊的政策使用json方式刊登

Listing详情

出单第一步,Listing商品详情页是关键。Listing 由分类节点、搜索关键词、图片、标题、商品要点、商品描述、A+/高级 A+、品牌名称等8个基本要素及其他要素组成,一个高质量的Listing能为出单提示销量。

Listing 的8大基本要素

完成一个上架的Asin页面主要有以上模块信息,主要涉及业务场景有:上架,下架,修改,拆分,合并

Listing API概览

定义和功能

官网链接:Listings Items API v2021-08-01 reference (amazon.com)

官方提供了四个接口操作:

  1. getListingsItem(获取SKU)

  2. putListingsItem(创建SKU)

  3. deleteListingsItem(删除SKU)

  4. patchListingsItem(修改SKU)

我们重点关注的是putListingsItem接口,json怎么传才是关键。

数据结构

我们以putListingsItem body官方例子解释说明

{
  //选择的类目
  "productType": "LUGGAGE",
  "requirements": "LISTING",
  //以下是商品信息的属性结构,可以看到有两种情况的属性,一种是带 "language_tag": "en_US",一种又是不带的。
  "attributes": {
    "condition_type": [
      {
        "value": "new_new",
        "marketplace_id": "ATVPDKIKX0DER"
      }
    ],
    "item_name": [
      {
        "value": "AmazonBasics 16\" Underseat Spinner Carry-On",
        "language_tag": "en_US",
        "marketplace_id": "ATVPDKIKX0DER"
      }
    ],
    ...
  }
}

这类目怎么来?属性有多少?还有哪些是必填的?哪些属性带 "language_tag": "en_US"?哪些不带?看得我眼花缭乱的!!!

晕死了

不好意思,晕死是这个类目JsonSchema

jsonSchema

实践Listing API

流程梳理

如果我们需要正常的完成一个商品信息提交,前发现置的工作越来越多,事情好像越来越复杂了

官方给刊登流程

前置数据

1.类目结构信息:通过Report APIGET_XML_BROWSE_TREE_DATA

2.获取类目Schema:通过Product Type Definitions的get Definitions Product Type获取

亚马逊 刊登 Listing API

通过这个schema Url获取到类目的jsonSchema。通过这个类目jsonSchema就能知道属性有多少,有哪些是必填的,哪些属性带 "language_tag": "en_US",哪些不带!

提醒:如果你对jsonSchema不熟的话,找个文档看一下。甚至我建议你也别去熟悉了,大概率你对前端已经忘记了或者就不会。这玩意丢给前端去研究。

实操调试

流程我都懂了,接下来简单调试一下先,弄个店铺直接开干

根据官方的示例,我现填充部分熟悉数据

Listing API

这属性数据你咋知道填的对不对?

如果你直接提交,亚马逊服务自己也会校验你填充的body是否正确

添加图片注释,不超过 140 字(可选)

这不是我们正常的作业逻辑,我们得先把数据在自己本地校验正常才去提交。

我们把jsonSchema和body复制到在线的jsonschema validator https://www.jsonschemavalidator.net/s/ttYPYIKR

亚马逊 刊登 Listing API

这样一看就明白异常信息的缺失或异常。根据异常信息修改body

正常是提示【No errors found. JSON validates against the schema】,然后才能通告Listing正常提交,提交完成之后你会收到提交成功的提示,这并不意味着产品创建成功了,等待5-10分钟后通过get Listings Item 查看issues是否有异常提示。

jsonSchema

落地方案研究

商品类目

以上通过手动操作调通了整个流程,接下来该考虑如何落地方案。咱不会不要紧,市场上找些已落地的ERP学习一下,最后发现赛狐(店小秘)已经实现了,那就参考下他是怎么做的吧。

类目选择,看着蛮简单的,赛狐自己做了中文翻译。

亚马逊 刊登 Listing API

类目信息可以通过报告接口把所有站点的类目数据扒拉下来,为此我从头开始花了不少时间去梳理这份数据和数据结构。

亚马逊 刊登 Listing API

获取所有类目JsonSchema

为了消除差异,多做点,把每个站点类目的JsonSchema都取回来存储。有好的方案欢迎指正讨论。

表单渲染

接下来我犯难了,不同类目的必填属性是不一样的,在前端如何设计动态表单?

然后在这一块又花了不少人力去研究,最后我们选择了Ajv:Ajv JSON schema validator ,直接拿亚马逊返回的schema是用不了的,需要前端简单处理一下转换符合框架的逻辑。

必填属性,联动属性

动态表单可以渲染了,接下来要处理必填属性标*的问题,属性联动的问题

一开始的方向跑偏了,一直在后端捣鼓这些,想着把不同类目Schema的必填属性都获取到存下来,告诉前端哪些是必填的,这方面赛狐就是这样的,所以思路也是跟着这个在走,看着官方也给出了校验示例java networknt/json-schema-validator校验,NND就没有正常过,使用networknt/json-schema-validator 校验的时候,看报错会从官方schema.json文件里读取schema的url信息,然后这个地址( https://schemas.amazon.com/selling-partners/definitions/product-types/meta-schema/v1)文档说是不能读取的,这尼玛玩呢。官网给的示例也是没法用,可能也是我菜吧~~~有谁用官网示例schema校验调通了的请赐教。

亚马逊 刊登 Listing API

很奇葩的是,通过网友的提示,把schema里的schema,和id属性删掉,居然就可以了,这样 networknt就不会去判断schema url是否存在。但这有点反常呀~~~ 但是如何校验的时候不请求json里的$schema url,我在源码里没看懂怎么去用,后面跑到github去提了这个问题,很快获得了官方的专业回答,nice

亚马逊 刊登 Listing API

这搞定了一个类目获取所有必填基础属性都信息,加载页面就能直接标*提示必填。

亚马逊 刊登 Listing API

然后,想着这玩意要是后端去做这些工作,特么累死,后面找了个前端框架让前端去尝试,把这个工作丢给前端去处理。


亚马逊 刊登 Listing API

让前端速调查看结果,能查看具体明细异常

亚马逊 刊登 Listing API

查看某个Product Type的schema校验其必填属性。

亚马逊 刊登 Listing API

Demo成果展示

标*还未加上,UI参考赛狐

亚马逊 刊登 Listing API

亚马逊 刊登 Listing API

亚马逊 刊登 Listing API

亚马逊 刊登 Listing API


弃用通过说明

SP-API 发行说明 (amazon.com)

SP-API Deprecations (amazon.com)


评论