Wersje 1 w plikach danych zbiorczych

W plikach danych zbiorczych wersja elementu jest określana na podstawie pola dateModified w kopercie pliku danych:

{
  "@context": "http://schema.googleapis.com",
  "dateModified": "2018-12-28T06:30:00:123-07:00",
  "@type": "DataFeed",
  "dataFeedElement": [
    /* All the items that are part of this feed go here */
  ]
}

Wszystkie elementy wymienione w polu dataFeedElement będą miały ten sam znacznik czasu, co w kopercie.

Możesz na przykład mieć taki plik danych z 2 elementami:

{
  "@context": "http://schema.googleapis.com",
  "@type": "DataFeed",
  "dateModified": "2018-12-28T06:30:00:123-07:00",
  "dataFeedElement": [
    {
      "@type": "Restaurant",
      "@id": "http://www.provider.com/somerestaurant",
      ...
    },
    {
      "@type": "Menu",
      "@id": "http://www.provider.com/somerestaurant/menu/1"
      ...
    }
  ]
}

Zarówno menu, jak i entyteta restauracji, po otrzymaniu i przetworzeniu zostaną oznaczone jako wersja „2018-12-28T06:30:00:123-07:00”.

Wersje z aktualizacjami przyrostowymi

Podczas wysyłania elementu za pomocą aktualizacji asortymentu wersja jest ustawiana za pomocą pola update_time (w przypadku wywołania dodawania/aktualizowania) lub pola delete_time (w przypadku wywołania usuwania). Ponieważ te pola są opcjonalne, domyślny znacznik czasu jest ustawiany na moment, w którym Google otrzymało połączenie.

Przykład 1. Wyraźnie ustawiony parametr update_time

Załóżmy, że w dniu 2018-12-28T06:30:10:123-07:00 otrzymano dla zupełnie nowej restauracji następujące przyrostowe wywołanie. Oto żądanie HTTP POST dotyczące tego elementu o identyfikatorze „http://www.provider.com/somerestaurant”, przy założeniu, że plik danych używa schematu asortymentu w wersji 1:

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json

Poniżej treść ładunku JSON zawiera pole update_time. Element o identyfikatorze „http://www.provider.com/somerestaurant” ma wersję 6:30:00, a nie tę, w której został odebrany (10 sekund później, o godzinie 6:30:10):

{
// This envelope is to be used for incremental.
  "entity": {
    // Note: "data" is not serialized as a string in our example for readability.
    "data": "[entity in JSON format serialized as a string]",
    "vertical": "FOODORDERING"
  },
  "update_time":"2018-12-28T06:30:00:123-07:00"
}

Przykład 2. Niejawnie ustawiony parametr update_time

Załóżmy, że w dniu 2018-12-28T06:30:10:123-07:00 otrzymano dla zupełnie nowej restauracji następujące przyrostowe wywołanie. Oto żądanie HTTP POST dotyczące tego elementu o identyfikatorze „http://www.provider.com/somerestaurant”, przy założeniu, że plik danych korzysta ze schematu asortymentu w wersji 1:

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json

Poniżej treść ładunku JSON nie zawiera pola update_time. Jednostka o identyfikatorze „http://www.provider.com/somerestaurant” ma więc wersję 6:30:10:

{
// This envelope is to be used for incremental.
  "entity": {
    //Note: "data" is not serialized as a string in our example for readability.
    "data": "[entity in JSON format serialized as a string]",
    "vertical": "FOODORDERING"
  }
}

Wersje w ramach partii i wersji przyrostowej

Obiekt wysłany do Google jest przetwarzany i wyświetlany tylko wtedy, gdy ma najnowszą wersję. Pamiętaj, że przetworzenie elementów wysłanych za pomocą żądania zbiorczego zwykle zajmuje kilka dni, a elementy wysłane za pomocą interfejsu API incremental są przetwarzane natychmiast.

Sprawdzone metody

  • Ustaw pola update_time i dateModified odpowiednio w sposób przyrostowy i zbiorczy, odpowiednio do tego, kiedy dany element został zmodyfikowany w Twoich systemach.
  • Jeśli plik zbiorczy (plik) zawiera więcej niż 1 element najwyższego poziomu (np. parujesz restauracje z usługami i menu), zaktualizuj sygnaturę czasową, gdy dane elementu zostaną zaktualizowane.
  • W przypadku wywołań cząstkowych zdecydowanie zalecamy jawne ustawienie pola update_time.
  • Po wywołaniu metody Incremental call musisz zaktualizować odpowiedni znacznik czasu (dateModified) w pliku danych przed ponownym pobraniem pliku przez Google.

Przykład

28 grudnia 2018 r. o godz. 11:00 Google pobiera ten plik dotyczący zupełnie nowej restauracji:

{
  "@context": "http://schema.googleapis.com",
  "@type": "DataFeed",
  "dateModified": "2018-12-28T06:30:00-07:00",
  "dataFeedElement": [
    {
      "@type": "Restaurant",
      "@id": "http://www.provider.com/newrestaurant",
      ...
    },
    {
      "@type": "Menu",
      "@id": "http://www.provider.com/newrestaurant/menu/1"
      ...
    }
    {
      "@type": "Service",
      "@id": "http://www.provider.com/newrestaurant/service/1"
      ...
    }
  ]
}

Te elementy są przetwarzane i umieszczane w wersji „2018-12-28T06:30:00-07:00”. Ponieważ przetwarzanie plików danych zbiorczych zajmuje trochę czasu, są one zwykle wyświetlane 2 dni później.

O 13:00 system partnera aktualizuje numer telefonu restauracji, co powoduje, że Google o 13:05 (5 sekund później) otrzymuje to incrementalne wywołanie:

POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
// This envelope is to be used for incremental.
  "entity": {
    //Note: "data" is not serialized as a string in our example for readability.
    "data": "[entity in JSON format serialized as a string]",
    "vertical": "FOODORDERING"
  },
  "update_time":"2018-12-28T13:00:00-07:00"
}

Wartość update_time jest podana wprost i jest większa (bardziej aktualna) niż poprzednia wersja (6:30 rano tego samego dnia), więc wersja elementu restauracji to teraz „2018-12-28T13:00:00-07:00”. Jednak elementy menu i usługi nadal mają wersję „2018-12-28T06:30:00-07:00”.

Wystąpiła wywołanie przyrostowe, więc plik danych zbiorczego zostanie zaktualizowany o nowy odpowiedni znacznik czasu. Odpowiednie zmiany są też stosowane do odpowiednich elementów (numer telefonu elementu restauracji jest aktualizowany).

{
  "@context": "http://schema.googleapis.com",
  "@type": "DataFeed",
  "dateModified": "2018-12-28T13:00:00-07:00",
  "dataFeedElement": [
    {
      "@type": "Restaurant",
      "@id": "http://www.provider.com/newrestaurant",
      ...
    },
    {
      "@type": "Menu",
      "@id": "http://www.provider.com/newrestaurant/menu/1"
      ...
    }
    {
      "@type": "Service",
      "@id": "http://www.provider.com/newrestaurant/service/1"
      ...
    }
  ]
}

Następnego dnia (29.12.2018 r.) o 23:00 plik danych jest ponownie pobierany. Restauracja nadal ma tę samą wersję (1 PM 28 grudnia), więc ta usługa zostanie pominięta, a obecna wersja zostanie zachowana. Jednak elementy Menu i Usługa zostały zaktualizowane do nowej wersji.

Sygnatury czasowe mapy witryny

Nagłówek odpowiedzi last-modified w mapie witryny nie ma wpływu na wersję elementu. Ma to wpływ na to, kiedy Google pobiera plik danych.

Sprawdzone metody

  • Zaktualizuj nagłówek odpowiedzi tylko wtedy, gdy wszystkie pliki są aktualne i gotowe do pobrania.
  • Używaj w wersji przyrostowej znaczników update_timedelete_time.
  • Ustaw wartości update_time, delete_timedateModified na podstawie tego, kiedy dane ulegają zmianie.