Nei tuoi feed collettivi, la versione di un'entità viene determinata tramite
Campo dateModified
nella busta del feed:
{
"@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 */
]
}
Tutte le entità elencate nel campo dataFeedElement
avranno lo stesso timestamp,
come indicato nella busta.
Ad esempio, potresti avere il seguente feed con due entità:
{
"@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"
...
}
]
}
Una volta ricevute ed elaborate, entrambe le entità menu versioni singole come "2018-12-28T06:30:00:123-07:00".
Controllo delle versioni con aggiornamenti incrementali
Quando invii un'entità utilizzando gli aggiornamenti dell'inventario, la versione viene impostata tramite
il campo update_time
(in caso di chiamata di aggiunta/aggiornamento) oppure il campo delete_time
(nel caso di una chiamata di eliminazione). Poiché questi campi sono facoltativi,
il timestamp predefinito è impostato sulla data in cui Google ha ricevuto la chiamata.
Esempio 1: update_time impostato esplicitamente
Supponiamo che la seguente chiamata incrementale venga ricevuta il 28-12-2018T06:30:10:123-07:00 per un ristorante completamente nuovo. Ecco la richiesta POST HTTP per l'entità con ID "http://www.provider.com/someRestaurant", supponendo che il feed di dati utilizzi schema dell'inventario v1:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
Di seguito, il corpo del payload JSON contiene il campo update_time
. L'entità con
ID "http://www.provider.com/qualsiasiristorante" fa sì che questa entità
versione 6:30:00 e non quando è stato ricevuto (dieci secondi dopo,
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&q
uot;
},
"update_time":"2018-12-28T06:30:00:123-07:00"
}
Esempio 2: update_time impostato in modo implicito
Supponiamo che la seguente chiamata incrementale venga ricevuta il 28-12-2018T06:30:10:123-07:00 per un ristorante completamente nuovo. Ecco la richiesta POST HTTP per l'entità con ID "http://www.provider.com/someRestaurant", supponendo che il feed utilizzi la versione v1 schema dell'inventario:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
Di seguito, il corpo del payload JSON non contiene il campo update_time
. La
entità con ID "http://www.provider.com/someRestaurant" risulta perciò in
il controllo delle versioni di questa entità è 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"
}
}
Controllo delle versioni tra batch e incrementali
Un'entità inviata a Google viene elaborata e pubblicata solo se ha la versione più recente completamente gestita. Tieni presente che le entità inviate tramite batch di solito richiedono alcuni giorni mentre le entità inviate tramite l'API incrementale vengono elaborate immediatamente.
Best practice
- Imposta i campi
update_time
edateModified
in modo incrementale e in batch rispettivamente, in base a quando l'entità è stata modificata nei tuoi sistemi. - Se un feed batch (file) elenca più di un'entità di primo livello (ad esempio, associare i tuoi ristoranti a servizi e menu), quindi aggiorna il timestamp come vengono aggiornati i dati di un'entità.
- Nelle chiamate incrementali, consigliamo vivamente di impostare in modo esplicito
campo
update_time
. - È fondamentale che, una volta effettuata una chiamata incrementale, il feed corrispondente
anche il timestamp (
dateModified
) viene aggiornato prima che Google lo recuperi di nuovo.
Esempio
Google recupera il seguente file alle 11:00 del 28/12/2018 per un'anteprima ristorante:
{
"@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/newrestaur
ant/menu/1"
...
}
{
"@type": "Service",
"@id": "http://www.provider.com/newrestaurant/service/1"
...
}
]
}
Queste entità vengono elaborate correttamente e vengono sottoposte al controllo delle versioni "2018-12-28T06:30:00-07:00". Poiché l'elaborazione dei feed batch richiede tempo, in genere vengono pubblicati 2 giorni dopo.
Alle 13, invece, il sistema del partner aggiorna il telefono del ristorante numero di telefono, il che genera la seguente chiamata incrementale, che Google riceve alle 13:05 (5 secondi dopo):
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": "FOODORDERI
NG"
},
"update_time":"2018-12-28T13:00:00-07:00"
}
Il valore update_time
è fornito esplicitamente ed è superiore (più recente) al valore
precedente (06:30 dello stesso giorno), quindi l'entità ristorante ora
versioned come "2018-12-28T13:00:00-07:00". Tuttavia, il menu e le entità di servizio
sono ancora versioni come "2018-12-28T06:30:00-07:00".
È stata eseguita una chiamata incrementale, quindi il feed batch viene aggiornato con i nuovi il timestamp corrispondente. Inoltre, le modifiche corrispondenti vengono applicate entità pertinenti (il numero di telefono del ristorante è aggiornato).
{
"@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/newrestaur
ant/menu/1"
...
}
{
"@type": "Service",
"@id": "http://www.provider.com/newrestaurant/service/1"
...
}
]
}
Il giorno successivo (29/12/2018) alle 23:00, il feed viene recuperato di nuovo. Ristorante ha ancora la stessa versione (13:00 del 28 dicembre), pertanto questa entità viene eliminata e viene mantenuta la versione corrente. Tuttavia, le entità Menu e Service sono aggiornato con una nuova versione.
Timestamp della Sitemap
L'intestazione della risposta last-modified
nella Sitemap non incide sulla
di un'entità. Incide quando il feed viene recuperato da Google.
Best practice
- Aggiorna l'intestazione della risposta solo quando tutti i file sono aggiornati e pronti per il recupero dell'account.
- Usa in modo esplicito
update_time
edelete_time
in modo incrementale. - Imposta
update_time
,delete_time
edateModified
quando i dati cambiano da parte tua.