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
idateModified
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_time
idelete_time
. - Ustaw wartości
update_time
,delete_time
idateModified
na podstawie tego, kiedy dane ulegają zmianie.