找出並移除重複的商家資訊
列出個別地點及整個帳戶中偵測到的重複商家資訊,確認真正重複的項目以進行移除,清除誤判項目,並追蹤每個項目直到修正完成。
重複項目是指同一商家在同一目錄中的另一筆商家資訊。它會分散評論和排名訊號,並讓顧客感到困惑。系統會自動執行偵測。您需要檢查偵測結果,確認真正重複的項目,並排除合法的項目。
每個重複項目都有狀態,讓您了解其清理進度:
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,即可透過四次呼叫取得各個狀態的項目數。若 FAILED 記錄的 liveLink 仍可連至頁面,就需要人工檢查;若 FAILED 記錄的連結已失效,則表示發布平台已自行修正,可依步驟 4 排除該項目。
後續步驟
- 檢查商家資訊狀態與已上線的連結:各目錄中的主要商家資訊,也就是重複商家資訊與之競爭的對象。
- 找出並修正商家資訊錯誤:另一項清理作業。
- 參考資料:取得某個地點的重複商家資訊、取得某個帳戶的所有重複商家資訊、將商家資訊標記為重複、將商家資訊標記為非重複。