Trova ed elimina le schede duplicate

Elenca le schede duplicate rilevate per sede e account, conferma quelle da rimuovere, scarta i falsi positivi e seguile fino alla risoluzione.

Un duplicato è una seconda voce per la stessa attività nella stessa directory. Distribuisce le recensioni e i segnali di posizionamento tra più voci e confonde i clienti. Il rilevamento avviene automaticamente. Esamina ciò che ha trovato, conferma i duplicati effettivi e scarta le voci legittime.

Ogni duplicato ha uno stato che indica a che punto si trova nel processo di pulizia:

StatoSignificatoCosa devi fare
POTENTIALRilevato, nessuno è ancora intervenuto.Esaminalo (passaggi 3 e 4).
PROCESSINGLo hai confermato; la rimozione è in corso presso la piattaforma di pubblicazione.Attendi. Consulta di nuovo i dati più tardi (passaggio 5).
FIXEDLa piattaforma di pubblicazione lo ha rimosso o unito a un'altra voce.Completato.
FAILEDLa rimozione non è andata a buon fine.Controlla il link pubblico; se la scheda è ancora online, segnalala all'assistenza.

1. Elenca i duplicati di una sede

GET /locations/{locationId}/listings/duplicates restituisce un semplice array di gruppi di siti. Ogni gruppo rappresenta una directory con un array listings di sospetti duplicati, e ogni voce ha un listingItemId, un liveLink che puoi aprire per valutarla e un status.

Duplicates for a location
curl https://listingsapi.com/api/v4/locations/TG9jYXRpb246MTgwMDI4OQ==/listings/duplicates \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "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"          }        ]      }    ]  }}

Un array vuoto significa che non è stato rilevato nulla. Conserva listingItemId: è il valore accettato da entrambi gli endpoint di contrassegno. Il Node SDK appiattisce i gruppi in un array per duplicato, quindi in quel caso d.id è il valore da passare.

2. Riepiloga i duplicati dell'intero account

GET /locations/listings/duplicates offre una vista dell'intero account. È una pagina con paginazione basata su offset: riceve page e perPage e restituisce records[] insieme a pageInfo.totalRecords e pageInfo.totalPages. Il valore predefinito di status è POTENTIAL e quello di tag è all, quindi una chiamata senza parametri restituisce tutti i duplicati aperti visibili alla chiave. Aggiungi siteId (un id plan-sites) per limitare i risultati a una sola directory.

Account rollup
curl "https://listingsapi.com/api/v4/locations/listings/duplicates?status=POTENTIAL&page=1&perPage=50" \-H "Authorization: API $LISTINGSAPI_KEY"
JSON
{  "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"        }      ]    }  }}

Il riepilogo indica dove si trovano i duplicati; duplicateProcessingState è lo stesso stato del ciclo di vita descritto sopra. Per intervenire su un duplicato, passa il suo locationId all'endpoint per singola sede del passaggio 1 e leggi il valore listingItemId restituito. Scorri le pagine una alla volta; un ciclo senza pause è il modo più rapido per ottenere un 429.

3. Conferma un duplicato per farlo rimuovere

Quando chi esamina una voce conferma che è un duplicato, chiama POST /locations/listings/mark-as-duplicate inserendo i valori listingItemId sotto input. Raggruppa tutti gli id confermati per una sede in un'unica chiamata. locationId è facoltativo e limita la richiesta a quella sede.

Mark as duplicate
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="]  }}'
JSON
{  "data": {    "markAsDuplicate": {      "success": true,      "errors": null    }  }}

success: true significa che gli elementi sono stati accettati e sono passati allo stato PROCESSING. Un 200 con success: false, oppure un 400, include un array errors le cui voci contengono code e message; la causa più comune è un id sconosciuto o non valido. In quel caso, gli SDK sollevano ValidationError.

4. Scarta un falso positivo

Il rilevamento è prudenziale. Un'altra sede dello stesso franchising, un secondo profilo legittimo o una sede rinominata possono tutti sembrare duplicati. POST /locations/listings/mark-as-not-duplicate accetta lo stesso corpo della richiesta e rimuove definitivamente la voce da entrambi gli elenchi. È anche il modo per annullare un'azione eseguita per errore al passaggio 3.

Mark as not duplicate
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="]  }}'

La risposta è data.markAsNotDuplicate con gli stessi campi success e errors del passaggio 3.

5. Monitora l'avanzamento

Consulta di nuovo il riepilogo con status=PROCESSING per vedere quali duplicati sono ancora in gestione presso le piattaforme di pubblicazione e con status=FIXED per confermare quali sono stati rimossi. Nessuno dei due SDK espone ancora il filtro status, quindi chiama direttamente l'endpoint con la stessa intestazione Authorization.

Progress
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"

Richiedendo perPage=1 e leggendo pageInfo.totalRecords ottieni il conteggio per ciascuno stato in quattro chiamate. Un record FAILED il cui liveLink è ancora raggiungibile richiede una verifica manuale; un record FAILED il cui link non funziona più è stato risolto autonomamente dalla piattaforma di pubblicazione e può essere scartato con il passaggio 4.

Passaggi successivi