Doppelte Einträge finden und unterdrücken

Listen Sie doppelte Einträge je Standort und Konto auf, bestätigen Sie echte zur Unterdrückung, verwerfen Sie Fehlalarme und verfolgen Sie die Behebung.

Ein Duplikat ist ein zweiter Eintrag für dasselbe Unternehmen im selben Verzeichnis. Es verteilt Bewertungen und Rankingsignale auf mehrere Einträge und verwirrt Kunden. Die Erkennung erfolgt automatisch. Sie prüfen die Ergebnisse, bestätigen tatsächliche Duplikate und verwerfen die Fälle, bei denen es sich um berechtigte Einträge handelt.

Jedes Duplikat hat einen Status, der seinen aktuellen Stand im Bereinigungsprozess angibt:

StatusBedeutungIhre nächste Aktion
POTENTIALErkannt, bisher hat niemand eine Aktion ausgeführt.Prüfen Sie es (Schritte 3 und 4).
PROCESSINGSie haben es bestätigt; die Unterdrückung durch die Plattform läuft.Warten Sie. Fragen Sie den Status später erneut ab (Schritt 5).
FIXEDDie Plattform hat es entfernt oder mit einem anderen Eintrag zusammengeführt.Erledigt.
FAILEDDie Unterdrückung war nicht erfolgreich.Prüfen Sie den Link zum veröffentlichten Eintrag; wenden Sie sich an den Support, wenn der Eintrag noch online ist.

1. Duplikate für einen Standort auflisten

GET /locations/{locationId}/listings/duplicates gibt ein einfaches Array von Verzeichnisgruppen zurück. Jede Gruppe entspricht einem Verzeichnis mit einem listings-Array mutmaßlicher Duplikate, und jeder Eintrag enthält listingItemId, liveLink zum Öffnen und Beurteilen des Eintrags sowie 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"          }        ]      }    ]  }}

Ein leeres Array bedeutet, dass nichts erkannt wurde. Bewahren Sie listingItemId auf: Diesen Wert nehmen beide Endpunkte zum Markieren entgegen. Das Node SDK löst die Gruppenstruktur in ein Array pro Duplikat auf, daher ist dort d.id der Wert, den Sie weitergeben müssen.

2. Duplikate im gesamten Konto zusammenfassen

GET /locations/listings/duplicates liefert die Ansicht für das gesamte Konto. Die Ergebnisse werden seitenweise mit einem Offset abgerufen: page und perPage werden übergeben, records[] sowie pageInfo.totalRecords und pageInfo.totalPages werden zurückgegeben. status hat den Standardwert POTENTIAL und tag den Standardwert all, sodass ein Aufruf ohne weitere Parameter alle offenen Duplikate zurückgibt, auf die der Schlüssel Zugriff hat. Fügen Sie siteId (eine plan-sites-ID) hinzu, um die Ergebnisse auf ein Verzeichnis einzugrenzen.

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"        }      ]    }  }}

Die Zusammenfassung zeigt Ihnen, wo sich die Duplikate befinden; duplicateProcessingState ist derselbe Lebenszyklusstatus wie oben. Um eine Aktion auf ein Duplikat anzuwenden, verwenden Sie dessen locationId beim standortbezogenen Endpunkt aus Schritt 1 und lesen Sie dort listingItemId aus. Rufen Sie die Seiten einzeln nacheinander ab; eine Schleife mit unmittelbar aufeinanderfolgenden Aufrufen führt am schnellsten zu 429.

3. Ein Duplikat zur Unterdrückung bestätigen

Sobald eine prüfende Person bestätigt, dass ein Eintrag ein Duplikat ist, rufen Sie POST /locations/listings/mark-as-duplicate mit den listingItemId-Werten unter input auf. Bündeln Sie alle bestätigten IDs für einen Standort in einem Aufruf. locationId ist optional und beschränkt die Anfrage auf diesen Standort.

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 bedeutet, dass die Elemente angenommen und in den Status PROCESSING versetzt wurden. Bei 200 mit success: false oder bei 400 enthält die Antwort ein errors-Array, dessen Einträge code und message enthalten; die Ursache ist meist eine unbekannte oder fehlerhaft formatierte ID. Die SDKs lösen in diesem Fall ValidationError aus.

4. Einen Fehlalarm verwerfen

Die Erkennung ist konservativ. Ein anderer Franchise-Standort, ein zweites berechtigtes Profil oder ein umbenannter Standort können wie Duplikate aussehen. POST /locations/listings/mark-as-not-duplicate nimmt denselben Anfrage-Body entgegen und entfernt den Eintrag dauerhaft aus beiden Listen. Damit machen Sie auch einen irrtümlich ausgeführten Schritt 3 rückgängig.

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="]  }}'

Die Antwort ist data.markAsNotDuplicate mit denselben Feldern success und errors wie in Schritt 3.

5. Fortschritt verfolgen

Rufen Sie die Zusammenfassung erneut mit status=PROCESSING ab, um zu sehen, welche Fälle noch bei den Plattformen in Bearbeitung sind, und mit status=FIXED, um zu bestätigen, welche Einträge entfernt wurden. Keines der beiden SDKs unterstützt bisher den Filter status, daher rufen Sie den Endpunkt direkt mit demselben Authorization-Header auf.

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"

Wenn Sie perPage=1 abfragen und pageInfo.totalRecords auslesen, erhalten Sie mit vier Aufrufen die Anzahl für jeden Status. Ein FAILED-Datensatz, dessen liveLink weiterhin erreichbar ist, muss manuell geprüft werden; ein FAILED-Datensatz, dessen Link nicht mehr erreichbar ist, wurde von der Plattform eigenständig bereinigt und kann mit Schritt 4 verworfen werden.

Nächste Schritte