आपके बैच फ़ीड में, किसी इकाई का वर्शन, फ़ीड के लिफाफ़े में मौजूद 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
में दी गई सभी इकाइयों का टाइमस्टैंप, लिफाफे में दी गई इकाइयों के टाइमस्टैंप जैसा ही होगा.
उदाहरण के लिए, आपके पास दो इकाइयों वाला यह फ़ीड हो सकता है:
{
"@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"
...
}
]
}
मेन्यू और रेस्टोरेंट इकाइयों को मिलने और प्रोसेस होने के बाद, दोनों को अलग-अलग वर्शन के तौर पर "2018-12-28T06:30:00:123-07:00" के तौर पर सेव किया जाएगा.
इंक्रीमेंटल अपडेट के साथ वर्शन बनाना
इन्वेंट्री अपडेट का इस्तेमाल करके इकाई भेजते समय, वर्शन को update_time
फ़ील्ड (जोड़ने/अपडेट करने के कॉल के मामले में) या delete_time
फ़ील्ड (मिटाने के कॉल के मामले में) के ज़रिए सेट किया जाता है. इन फ़ील्ड को भरना ज़रूरी नहीं है. इसलिए, डिफ़ॉल्ट टाइमस्टैंप उस समय पर सेट होता है जब Google को कॉल मिला था.
पहला उदाहरण: update_time साफ़ तौर पर सेट किया गया
मान लें कि किसी नए रेस्टोरेंट के लिए, 28-12-2018T06:30:10:123-07:00 पर यह इंक्रीमेंटल कॉल मिलता है. यहां उस इकाई के लिए एचटीटीपी पोस्ट अनुरोध दिया गया है जिसका आईडी "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
फ़ील्ड शामिल है. आईडी "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"
}
दूसरा उदाहरण: update_time पैरामीटर अपने-आप सेट हो गया
मान लें कि किसी नए रेस्टोरेंट के लिए, 28-12-2018T06:30:10:123-07:00 पर यह इंक्रीमेंटल कॉल मिलता है. यहां उस इकाई के लिए एचटीटीपी पोस्ट अनुरोध दिया गया है जिसका आईडी "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
फ़ील्ड शामिल नहीं है. इसलिए, "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 को भेजी गई इकाई को सिर्फ़ तब प्रोसेस और दिखाया जाता है, जब उसका सबसे नया वर्शन हो. ध्यान दें कि बैच के ज़रिए भेजी गई इकाइयों को प्रोसेस होने में आम तौर पर कुछ दिन लगते हैं. वहीं, इंक्रीमेंटल एपीआई के ज़रिए भेजी गई इकाइयों को तुरंत प्रोसेस कर दिया जाता है.
सबसे सही तरीके
update_time
औरdateModified
फ़ील्ड को, आपके सिस्टम में इकाई में बदलाव किए जाने के समय के हिसाब से, क्रमशः इंक्रीमेंटल और बैच में सेट करें.- अगर किसी बैच फ़ीड (फ़ाइल) में एक से ज़्यादा टॉप-लेवल इकाइयां शामिल हैं, तो टाइमस्टैंप को अपडेट करें. उदाहरण के लिए, अगर आपने अपने रेस्टोरेंट को सेवाओं और मेन्यू के साथ जोड़ा है.
- हमारा सुझाव है कि इंक्रीमेंटल कॉल में, आप
update_time
फ़ील्ड को साफ़ तौर पर सेट करें. - यह ज़रूरी है कि इंक्रीमेंटल कॉल करने के बाद, Google उसे फिर से फ़ेच करने से पहले, उससे जुड़े फ़ीड का टाइमस्टैंप (
dateModified
) भी अपडेट हो जाए.
उदाहरण
Google, 28-12-2018 को सुबह 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" के तौर पर सेट किया जाता है. बैच फ़ीड को प्रोसेस होने में समय लगता है. इसलिए, आम तौर पर ये दो दिन बाद दिखाए जाते हैं.
हालांकि, दोपहर 1 बजे पार्टनर के सिस्टम में रेस्टोरेंट के फ़ोन नंबर में बदलाव होता है. इस वजह से, Google को 13:05 (पांच सेकंड बाद) को यह इनक्रीमेंटल कॉल मिलता है:
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-28T13:00:00-07:00" है. हालांकि, मेन्यू और सेवा इकाइयों का वर्शन अब भी "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"
...
}
]
}
अगले दिन (29-12-2018) रात 11 बजे, फ़ीड फिर से फ़ेच हो जाता है. रेस्टोरेंट का अब भी वही वर्शन (28 दिसंबर को दोपहर 1 बजे) है. इसलिए, इस इकाई को हटा दिया जाता है और मौजूदा वर्शन को रखा जाता है. हालांकि, मेन्यू और सेवा इकाइयों को नए वर्शन के साथ अपडेट किया गया है.
साइटमैप के टाइमस्टैंप
साइटमैप में मौजूद last-modified
रिस्पॉन्स हेडर से, इकाई के वर्शन पर कोई असर नहीं पड़ता. इससे यह तय होता है कि Google, फ़ीड को कब फ़ेच करेगा.
सबसे सही तरीके
- रिस्पॉन्स हेडर को सिर्फ़ तब अपडेट करें, जब सभी फ़ाइलें अप-टू-डेट हों और फ़ेच करने के लिए तैयार हों.
- इंक्रीमेंटल में
update_time
औरdelete_time
का साफ़ तौर पर इस्तेमाल करें. update_time
,delete_time
, औरdateModified
को उस समय पर सेट करें जब आपके ऐप्लिकेशन में डेटा बदलता है.