查找并屏蔽重复商家信息
列出为某个地点及整个账户检测到的重复商家信息,确认真正的重复项以进行屏蔽,清除误报,并跟踪每个重复项直至修复。
重复项是同一商家在同一目录中的另一条商家信息。它会分散评价和排名信号,并使客户感到困惑。检测会自动运行。您需要审核检测结果,确认真正的重复项,并排除合法条目。
每个重复项都有一个状态,用于说明它处于清理流程的哪个阶段:
1. 列出一个地点的重复项
GET /locations/{locationId}/listings/duplicates 返回一个由站点分组组成的普通数组。每个分组对应一个目录,其中包含一个由疑似重复项组成的 listings 数组,每个条目都有一个 listingItemId、一个可供您打开并判断该条目的 liveLink,以及一个 status。
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/duplicates \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "duplicateListingsForLocation": [ { "id": "U2l0ZToxNTA=", "name": "City Squares", "url": "citysquares.com", "listings": [ { "id": "RHVwbGljYXRlOjIzNTk4NDUw", "listingItemId": "TGlzdGluZ0l0ZW06MjM1OTg0NTA=", "name": "Woodbury Train Station", "liveLink": "http://citysquares.com/b/woodbury-train-station-23598450", "status": "POTENTIAL" } ] } ] }}空数组表示未检测到任何重复项。请保留 listingItemId:两个标记端点都接受此值。Node SDK 会把这些分组展平成一个数组,每个重复项占一个元素,因此其中的 d.id 就是需要传入的值。
2. 汇总整个账户的重复项
GET /locations/listings/duplicates 提供整个账户范围的视图。它采用偏移量分页:输入 page 和 perPage,输出 records[] 以及 pageInfo.totalRecords 和 pageInfo.totalPages。status 默认为 POTENTIAL,tag 默认为 all,因此不带参数的调用会返回该密钥可见的所有未结重复项。添加 siteId(一个 plan-sites id)可将范围缩小到一个目录。
curl "https://listingsapi.com/api/v4/locations/listings/duplicates?status=POTENTIAL&page=1&perPage=50" \-H "Authorization: API $LISTINGSAPI_KEY"{ "data": { "duplicateListingsRollup": { "pageInfo": { "hasNextPage": true, "totalPages": 34, "totalRecords": 1673 }, "records": [ { "id": "3329229", "name": "Woodbury Train Station", "duplicateProcessingState": "POTENTIAL", "liveLink": "http://citysquares.com/b/woodbury-train-station-23598450", "locationId": "73451", "siteName": "City Squares", "siteUrl": "citysquares.com" } ] } }}汇总结果会告诉您重复项位于何处;duplicateProcessingState 与上文所述的生命周期状态相同。要处理某个重复项,请将其 locationId 传给步骤 1 中按地点查询的端点,并读取该端点返回的 listingItemId。请逐页读取;无间隔的循环最容易触发 429。
3. 确认重复项以进行屏蔽
审核人员确认某个条目是重复项后,请调用 POST /locations/listings/mark-as-duplicate,并将 listingItemId 值放在 input 下。将一个地点的所有已确认 id 合并到一次调用中批量提交。locationId 为可选项,用于将请求范围限定为该地点。
curl -X POST https://listingsapi.com/api/v4/locations/listings/mark-as-duplicate \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "listingItemIds": ["TGlzdGluZ0l0ZW06MjM1OTg0NTA="] }}'{ "data": { "markAsDuplicate": { "success": true, "errors": null } }}success: true 表示这些条目已被接受,并已转为 PROCESSING。带有 success: false 的 200 或 400 都会附带一个 errors 数组,其中每个条目都包含 code 和 message;通常是未知或格式错误的 id 导致的。在这种情况下,SDK 会抛出 ValidationError。
4. 清除误报
检测采用保守策略。同一连锁品牌的其他加盟店、另一个合法资料页或已更名的地点,都可能看起来像重复项。POST /locations/listings/mark-as-not-duplicate 接受完全相同的请求体,并将该条目从两个列表中永久移除。如果您在步骤 3 中操作有误,也可以用此方法撤销。
curl -X POST https://listingsapi.com/api/v4/locations/listings/mark-as-not-duplicate \-H "Authorization: API $LISTINGSAPI_KEY" \-H "Content-Type: application/json" \-d '{ "input": { "locationId": "TG9jYXRpb246MTgwMDI4OQ==", "listingItemIds": ["TGlzdGluZ0l0ZW06MjM1OTg0NTA="] }}'响应为 data.markAsNotDuplicate,其中包含与步骤 3 相同的 success 和 errors 字段。
5. 跟踪进度
使用 status=PROCESSING 重新读取汇总结果,查看哪些重复项仍在由发布平台处理,再使用 status=FIXED 确认哪些已被移除。目前两个 SDK 都尚未提供 status 筛选器,因此请使用相同的 Authorization 请求头直接调用端点。
curl "https://listingsapi.com/api/v4/locations/listings/duplicates?status=PROCESSING&page=1&perPage=50" \-H "Authorization: API $LISTINGSAPI_KEY" curl "https://listingsapi.com/api/v4/locations/listings/duplicates?status=FIXED&page=1&perPage=50" \-H "Authorization: API $LISTINGSAPI_KEY"请求 perPage=1 并读取 pageInfo.totalRecords,即可通过 4 次调用获取各个状态的数量。如果一条 FAILED 记录的 liveLink 仍可访问,则需要人工审核;如果一条 FAILED 记录的链接已失效,则说明发布平台已自行修复,可通过步骤 4 排除该记录。
后续步骤
- 查看商家信息状态和上线链接:各目录中的主要商家信息,也就是重复商家信息与之竞争的对象。
- 查找并修复商家信息错误:另一轮清理。
- 参考:获取某个地点的重复商家信息、获取某个账户的所有重复商家信息、将商家信息标记为重复、将商家信息标记为非重复。