如何在亚马逊SP API中通过零件号查询对应ASIN 解决查询结果不一致问题
两者返回结果不同的核心原因
- 卖家后台的
productsearch是亚马逊内部自用接口,未对外开放,搜索逻辑为全文精准匹配优先:会遍历商品标题、属性、后台填写的所有零件号相关字段,排序规则优先展示完全匹配查询词的商品,所以你能直接拿到461439-001对应的ASIN。 - 你当前调用的是旧版(v0版本)
listCatalogItems接口,搜索逻辑和排序规则和内部接口完全不同:通用Query参数为全字段模糊分词匹配,默认排序优先展示销量更高的商品,而非匹配度最高的商品,所以才会返回完全不相关的高销量零件结果。
用零件号查询对应ASIN的最优方案
方案1:优先使用新版Catalog Items API(2022-04-01版本)【最高效】
新版接口专门提供了零件号精准匹配能力,不需要模糊搜索,直接指定标识符类型即可拿到精准结果,示例调用逻辑如下:
const getASINFromPartNumber = async partNumber => { const res = await sellingPartner.callAPI({ operation: "searchCatalogItems", endpoint: "catalogItems", apiVersion: "2022-04-01", query: { marketplaceIds: ['A1F83G8C2ARO7P'], identifiers: partNumber, identifiersType: "PART_NUMBER", includedData: ["identifiers"] // 仅返回ASIN信息,减少响应体积 } }) return res?.items?.[0]?.identifiers?.find(i => i.marketplaceId === 'A1F83G8C2ARO7P')?.asin }
这种方式匹配准确率接近100%,只要亚马逊目录里存在对应零件号的ASIN就能返回。
方案2:如果必须使用旧版v0 listCatalogItems接口
不要直接取第一条结果,新增一层匹配校验逻辑,遍历返回的所有商品,筛选出AttributeSets中PartNumber完全等于目标零件号,或者标题包含目标零件号的商品即可:
const getASINFromPartNumber = async partNumber => { const res = await sellingPartner.callAPI({ operation: "listCatalogItems", endpoint: "catalogItems", query: { MarketplaceId: ['A1F83G8C2ARO7P'], Query: partNumber } }) // 新增过滤逻辑 const matchedItem = res.Items.find(item => { const partNum = item.AttributeSets?.[0]?.PartNumber const title = item.AttributeSets?.[0]?.Title || '' return partNum === partNumber || title.includes(partNumber) }) return matchedItem?.Identifiers?.MarketplaceASIN?.ASIN }
方案3:极端场景补充方案
如果以上两种方式都搜不到结果,可以将零件号和品牌组合作为关键词传入接口的搜索参数,进一步缩小匹配范围,提高准确率。
内容的提问来源于stack exchange,提问作者Ionică Bizău
相关产品推荐
相关产品推荐

