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
idateModified
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
idelete_time
w przyrostach. - Ustaw
update_time
,delete_time
idateModified
na moment zmiany danych po Twojej stronie.