Obsługa wersji v1 w zbiorczych plikach danych

W plikach danych wsadowych wersja elementu jest określana w polu dateModified w kopercie kanału:

{
  "@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 mają tę samą sygnaturę czasową (tak jak w kopercie).

Możesz na przykład utworzyć 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"
      ...
    }
  ]
}

Otrzymane i przetworzone elementy menu oraz restauracji będą mieć osobne wersje jako „2018-12-28T06:30:00:123-07:00”.

Obsługa wersji z przyrostowymi aktualizacjami

Gdy wysyłasz encję za pomocą aktualizacji zasobów reklamowych, wersja jest ustawiana w polu update_time (w przypadku wywołania dodawania/aktualizacji) lub w polu delete_time (w przypadku wywołania usuwania). Te pola są opcjonalne, dlatego domyślna sygnatura czasowa jest ustawiana na czas odebrania połączenia przez Google.

Przykład 1: określony czas aktualizacji

Załóżmy, że o godzinie 2018-12-28T06:30:10:123-07:00 zostanie odebrane zupełnie nowe połączenie z zupełnie nową restauracją. Oto żądanie HTTP POST tej encji o identyfikatorze „http://www.provider.com/someRestaurant” (przy założeniu, że w pliku danych używany jest schemat zasobów reklamowych 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. W przypadku elementu o identyfikatorze „http://www.dostawca.pl/restauracja” zostanie on zmieniony na wartość 6:30:00, a nie w momencie otrzymania (dziesięć sekund później o 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 ustawiona wartość atrybutu update_time

Załóżmy, że o godzinie 2018-12-28T06:30:10:123-07:00 zostanie odebrane zupełnie nowe połączenie z zupełnie nową restauracją. Oto żądanie HTTP POST tej encji o identyfikatorze „http://www.provider.com/someRestaurant” (przy założeniu, że plik danych używa schematu zasobów 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. Encja o identyfikatorze „http://www.provider.com/someRestaurant” sprawia więc, że ten element ma format 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"
  }
}

Przechowywanie wersji między wsadami a przyrostowymi

Encja wysłana do Google jest przetwarzana i wyświetlana tylko wtedy, gdy ma najnowszą wersję. Pamiętaj, że przetworzenie encji wysłanej wsadem zwykle zajmuje kilka dni, podczas gdy encje wysyłane przez przyrostowy interfejs API są przetwarzane natychmiast.

Sprawdzone metody

  • Pola update_time i dateModified ustawiaj stopniowo i zbiorczo, stosownie w zależności od tego, kiedy encja została zmodyfikowana w Twoich systemach.
  • Jeśli plik danych wsadowych zawiera więcej niż 1 element najwyższego poziomu (np. sparujesz restauracje z usługami i menu), zaktualizuj sygnaturę czasową w miarę aktualizowania danych elementu.
  • W przypadku wywołań przyrostowych zdecydowanie zalecamy wyraźne ustawienie pola update_time.
  • Po wykonaniu przyrostowego wywołania wymagana jest aktualizacja odpowiedniej sygnatury czasowej pliku danych (dateModified) przed ponownym pobraniem go przez Google.

Przykład

Google pobiera ten plik o 11:00 28 listopada 2018 roku o 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 encje są przetwarzane i mają wersję „2018-12-28T06:30:00-07:00”. Przetwarzanie zbiorczych plików danych zajmuje zwykle czas, dlatego zwykle są dostarczane po 2 dniach.

Jednak o 13:05 system partnera aktualizuje numer telefonu restauracji, co skutkuje następującym dodatkowym połączeniem, które Google odbiera o 13:05 (5 sekund później):

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

Element update_time jest jawnie podany i jest wyższy (nowszy) niż poprzednia wersja (6:30 danego dnia), więc element restauracji to teraz „2018-12-28T13:00:00-07:00”. Jednak wersje menu i usług wciąż mają postać „2018-12-28T06:30:00-07:00”.

Nastąpiło wywołanie przyrostowe, więc plik danych wsadowy został zaktualizowany o nową odpowiadającą jej sygnaturę czasową. Odpowiednie zmiany zostaną też zastosowane do odpowiednich elementów (restauracja ma zaktualizowany numer telefonu).

{
  "@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) o 23:00 kanał zostanie ponownie pobrany. Restauracja nadal ma tę samą wersję (13:00 28 grudnia), więc ten element jest usuwany, a bieżąca wersja zostaje zachowana. Elementy Menu i Usługa zostaną jednak zaktualizowane do nowej wersji.

sygnatury czasowe mapy witryny,

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

Sprawdzone metody

  • Nagłówek odpowiedzi aktualizuj tylko wtedy, gdy wszystkie pliki są aktualne i gotowe do pobrania.
  • Wyraźnie użyj wartości update_time i delete_time w przyrostach.
  • Ustaw update_time, delete_time i dateModified na moment zmiany danych po Twojej stronie.