バッチフィードでの v1 バージョニング

バッチフィードでは、エンティティのバージョンは フィードのエンベロープの dateModified フィールド:

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

フィールド dataFeedElement にリストされているすべてのエンティティのタイムスタンプは同じになります。 ご確認ください

たとえば、2 つのエンティティを含む次のフィードがあるとします。

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

メニュー エンティティとレストラン エンティティはどちらも、受け取って処理されると、次のようになります。 として識別されます。

増分アップデートによるバージョニング

在庫の更新を使用してエンティティを送信する場合、バージョンは update_time フィールド(追加/更新呼び出しの場合)または delete_time フィールド(削除呼び出しの場合)が返されます。これらのフィールドは省略可能であるため、 デフォルトのタイムスタンプは、Google が電話を受信した時刻に設定されます。

例 1: update_time を明示的に設定する

2018-12-28T06:30:10:123-07:00 に次の増分呼び出しが受信されたとします。 考えてみましょう以下は、このエンティティの HTTP POST リクエストです。 「http://www.provider.com/somerestaurant」という ID を持つデータ フィードを v1 インベントリ スキーマを

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

以下の例では、JSON ペイロードの本文に update_time フィールドが含まれています。次の値を持つエンティティ: ID "http://www.provider.com/somerestaurant"このエンティティは 6:30:00 としてバージョン付けされ、受信時には含まれない 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"
}

例 2: update_time が暗黙的に設定される

2018-12-28T06:30:10:123-07:00 に次の増分呼び出しが受信されたとします。 考えてみましょう以下は、このエンティティの HTTP POST リクエストです。 (ID は「http://www.provider.com/somerestaurant」、フィードで v1 が使用されている場合) インベントリ スキーマ:

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

以下の例では、JSON ペイロードの本文に update_time フィールドが含まれていません。「 エンティティ(ID が「http://www.provider.com/somerestaurant」)その結果 このエンティティは 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"
  }
}

バッチと増分の間のバージョニング

Google に送信されたエンティティは、最新の情報がある場合にのみ処理されて配信されます できます。通常、バッチで送信されたエンティティは、 増分 API を介して送信されたエンティティは すぐに通知されます。

ベスト プラクティス

  • update_time フィールドと dateModified フィールドを増分とバッチで設定します。 システムでエンティティがいつ変更されたかに応じて、それぞれ別のビューが作成されます。
  • バッチフィード(ファイル)に複数のトップレベル エンティティ(例: レストランをサービスやメニューとペア設定し、タイムスタンプを エンティティのデータが更新されます
  • 増分呼び出しでは、明示的に update_time フィールド。
  • 増分呼び出しが行われたら、対応するフィードが タイムスタンプ(dateModified)も、Google が再度取得する前に更新されます。

Google は、2018 年 12 月 28 日の午前 11 時に、 レストラン:

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

これらのエンティティは正常に処理され、 "2018-12-28T06:30:00-07:00".バッチフィードの処理には時間がかかるため 通常は 2 日後に配信されます

午後 1 時にレストランのスマートフォンが更新され、 その結果、次の増分呼び出しが発生し、Google に 13:05(5 秒後)に:

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

update_time は明示的に指定され、 (同じ日の午前 6 時 30 分)なので、レストラン エンティティは としてバージョン管理されます。ただし、メニュー エンティティとサービス エンティティは 引き続き「2018-12-28T06:30:00-07:00」としてバージョニングされます。

増分呼び出しがあったため、バッチフィードが新しい タイムスタンプが含まれます。また、対応する変更は 関連するエンティティ(レストランのエンティティは電話番号を更新)

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

翌日(2018 年 12 月 29 日)の午後 11 時にフィードが再度取得されます。レストラン まだ同じバージョン(12 月 28 日の午後 1 時)があるため、このエンティティは破棄されます 現在のバージョンが維持されます。ただし Menu エンティティと Service エンティティは 更新されます。

サイトマップのタイムスタンプ

サイトマップの last-modified レスポンス ヘッダーは、サイトマップには影響しません エンティティのバージョンです。これは、Google がフィードを取得するタイミングに影響します。

ベスト プラクティス

  • レスポンス ヘッダーの更新は、すべてのファイルが最新で、いつでもアップロードできる状態になった場合に限ります。 指定することもできます。
  • 増分で update_timedelete_time を明示的に使用します。
  • update_timedelete_timedateModified をデータの変更時に設定する お客様側で管理できます