Control de versiones v1 en feeds por lotes

En tus feeds por lotes, la versión de una entidad se determina mediante la Campo dateModified en el sobre 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 */
  ]
}

Todas las entidades enumeradas en el campo dataFeedElement tendrán la misma marca de tiempo. como se indica en el sobre.

Por ejemplo, podrías tener el siguiente feed con dos entidades:

{
  "@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"
      ...
    }
  ]
}

Tanto las entidades del menú como las del restaurante, una vez recibidas y procesadas, se con una versión individual como “2018-12-28T06:30:00:123-07:00”.

Control de versiones con actualizaciones incrementales

Cuando se envía una entidad con actualizaciones de inventario, la versión se establece a través de el campo update_time (en el caso de una llamada de adición o actualización) o el delete_time (en el caso de una llamada de eliminación). Como estos campos son opcionales, la La marca de tiempo predeterminada es el momento en que Google recibió la llamada.

Ejemplo 1: update_time establecido explícitamente

Supongamos que se recibe la siguiente llamada incremental el 2018-12-28T06:30:10:123-07:00. por un restaurante completamente nuevo. Esta es la solicitud HTTP POST para esa entidad con el ID “http://www.provider.com/somerestaurant”, suponiendo que el feed de datos usa esquema del 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

A continuación, el cuerpo de la carga útil JSON contiene el campo update_time. La entidad con ID “http://www.provider.com/somerestaurant” da como resultado que esta entidad versión como 6:30:00 y no cuando se recibió (diez segundos después en 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"
}

Ejemplo 2: update_time establecido implícitamente

Supongamos que se recibe la siguiente llamada incremental el 2018-12-28T06:30:10:123-07:00. por un restaurante completamente nuevo. Esta es la solicitud HTTP POST para esa entidad con el ID “http://www.provider.com/somerestaurant”, suponiendo que el feed usa la v1 esquema de inventario:

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

A continuación, el cuerpo de la carga útil JSON no contiene el campo update_time. El Entidad con el ID “http://www.provider.com/somerestaurant” por lo que da como resultado esta entidad tiene la versión 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"
  }
}

Control de versiones entre incrementales y por lotes

Una entidad que se envía a Google se procesa y entrega solo si tiene la última versión. Ten en cuenta que las entidades enviadas por lotes suelen tardar algunos días en recibirse. procesadas, mientras que las entidades enviadas a través de la API incremental se procesan de inmediato.

Prácticas recomendadas

  • Configura los campos update_time y dateModified en incremental y por lotes. respectivamente, según el momento en que se modificó la entidad en tus sistemas.
  • Si un feed por lotes (archivo) muestra más de una entidad de nivel superior (por ejemplo, tú vincular restaurantes con servicios y menús) y, a continuación, actualizar la marca de tiempo como se actualizan los datos de una entidad.
  • En las llamadas incrementales, te recomendamos que establezcas de forma explícita update_time.
  • Una vez que se hace una llamada incremental, es fundamental que el feed correspondiente La marca de tiempo (dateModified) también se actualiza antes de que Google la recupere.

Ejemplo

Google recupera el siguiente archivo a las 11 a.m. del 28/12/2018 para obtener un archivo restaurante:

{
  "@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"
      ...
    }
  ]
}

Estas entidades se procesan correctamente y se controlan mediante las versiones "2018-12-28T06:30:00-07:00". Debido a que los feeds por lotes tardan en procesarse, estos normalmente se publican 2 días después.

Sin embargo, a la 1 p.m., el sistema del socio tiene una actualización en el teléfono del restaurante. número, lo que da como resultado la siguiente llamada incremental, que Google recibe a las 13:05 (5 segundos después):

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

El update_time se proporciona de manera explícita y es mayor (más reciente) que el versión anterior (6:30 a.m. del mismo día), por lo que la entidad restaurante ahora es con la versión “2018-12-28T13:00:00-07:00”. Sin embargo, el menú y las entidades de servicio todavía tienen la versión “2018-12-28T06:30:00-07:00”.

Se realizó una llamada incremental, de modo que el feed por lotes se actualiza con el nuevo y la marca de tiempo correspondiente. Además, los cambios correspondientes se aplican al las entidades relevantes (la entidad del restaurante tiene su número de teléfono actualizado).

{
  "@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"
      ...
    }
  ]
}

Al día siguiente (29 de diciembre de 2018) a las 11 p.m., se vuelve a recuperar el feed. El restaurante Esta entidad sigue teniendo la misma versión (1 p.m. del 28 de diciembre), por lo que se descartará. y se conserva la versión actual. Sin embargo, las entidades Menu y Service son actualizado con una versión nueva.

Marcas de tiempo del mapa del sitio

El encabezado de respuesta last-modified del mapa del sitio no afecta la más reciente de una entidad. Afecta cuándo Google recupera el feed.

Prácticas recomendadas

  • Actualiza el encabezado de respuesta solo cuando todos los archivos estén actualizados y listos para que se puede recuperar.
  • Usa update_time y delete_time de forma explícita en incrementos.
  • Configura update_time, delete_time y dateModified para cuando cambien los datos por ti.