ÖY feed'leri oluşturma ve yükleme
ÖY feed'leri oluşturup yüklerken aşağıdaki talimatları uygulayın:
- ÖY veri dosyaları için ÖY feed'inde açıklanan spesifikasyona uyun. Her yükleme için benzersiz ÖY veri dosyası adları kullanmanızı öneririz. Dosya adına bir zaman damgası ekleyin (ör.
POI_1633621547.json). - Feed'leri her gün tam yenileme olarak yerel ÖY SFTP sunucusuna yükleyin.
- SFTP sunucusu ayrıntılarını İş Ortağı Portalı'nın Yapılandırma > Feed'ler bölümünde bulabilirsiniz.
- İş Ortağı Portalı'nın Aktarım > Geçmiş bölümünde feed aktarım durumunu görüntüleyin.
Dosya Paketleme Kuralları
Başarılı bir besleme için aşağıdaki paketleme koşullarına uyun:
- Tek Toplu JSON Arşivi (Zorunlu): Tüm öğe kayıtlarını tek bir JSON dosyasında birleştirin. Tek bir GZIP arşivi olarak sıkıştırıp yüklemenizi öneririz.
- Anti-Pattern Warning: Do not use one file per entity or multiple files separated by country in the same archive. Bu yaklaşım desteklenmez ve ayıklama hatalarına neden olur.
Çok Dilli Destek
Önemli yer feed'i, belirli alanlar için yerelleştirilmiş içerik sağlamayı destekler. Aşağıdaki alanlar Text türündedir ve yerelleştirmeyi destekler:
namedescriptiondisplay_address
İçeriği birden fazla dilde sunmak için alanda bir default_locale belirtmeniz ve localizations listesinde yerelleştirilmiş dizeleri sağlamanız gerekir.
Bir varlığın tüm yerelleştirmelerini tek bir ÖY girişinde sağlayın. Tek bir öğeyi birden fazla dildeki JSON dosyalarına bölmeyin.
Örnek:
"name": {
"localizations": [
{
"locale": "en",
"text": "Tasty Bites Test Restaurant"
},
{
"locale": "es",
"text": "Restaurante de prueba Tasty Bites"
}
],
"default_locale": "en"
}
Resim Kuralları
- Biçim: JPEG, PNG veya WebP olmalıdır.
- Maksimum dosya boyutu: Resim başına 30 MB'tan az.
- Maksimum boyutlar: Toplamda 75 megapikselden az (genişlik x yükseklik < 75.000.000).
- URL Türü: Resim öğesine giden doğrudan yol (ör. .jpg ile biter).
- İzinler: Barındırma sunucusunun Googlebot veya tarayıcılara erişim izni verdiğinden ve resim dizinlerini engelleyen bir robots.txt dosyası olmadığından emin olun.
- Güvenli Arama: Resimler Google'ın Güvenli Arama politikalarına uygun olmalıdır.
Feed Spesifikasyonları
Alan şartları
VssPoi
Tek bir önemli yer (ÖY) öğesini (ör. otel veya restoran) temsil eder.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
poi_id | dize | Zorunlu | Zorunlu. İş ortağı tarafından oluşturulan ve bir ÖY'yi tanımlayan dize. |
name | object(Text) | Zorunlu | Zorunlu. ÖY'nin adı. |
telephone | dize | ÖY'nin ülke ve alan kodları dahil olmak üzere iletişim telefon numarası (ör. +14567891234). | |
url | dize | ÖY'nin herkese açık web sitesinin URL'si. Not: Bu bilgi yalnızca eşleştirme amacıyla kullanılacak olup gösterilmeyecektir. | |
location | nesne(GeoCoordinates) | Zorunlu | Zorunlu. ÖY'nin konumu. |
display_address | nesne(Text) | Kullanıcı arayüzünde gösterilen adres. | |
images | nesne dizisi(Image) | ÖY'nin resimleri. Maksimum resim sayısı: 5. | |
rating | sayı | ÖY'nin ortalama puanı. | |
num_ratings | sayı | rating alanı için katkıda bulunan puanların sayısı. | |
rating_scale | sayı | rating alanı için kullanılan derecelendirme ölçeği. Maksimum puan 5 ise rating_scale 5'tir. | |
category | enum(Category) | Zorunlu | Zorunlu. ÖY'nin kategorisini gösterir. |
description | object(Text) | ÖY'nin açıklaması. | |
| oneOf(additional_data) | Zorunlu | Bu oneOf'taki alanlardan yalnızca biri ayarlanabilir. |
Metin
Yerelleştirilmiş metni temsil eder.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
localizations | nesne dizisi(LocalizedString) | Yerelleştirilmiş dizeler. | |
default_locale | dize | Varsayılan dil olarak kullanılacak yerel ayar, yerelleştirmelerde bulunmalıdır. |
LocalizedString
Yerelleştirilmiş bir dizeyi temsil eder.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
locale | dize | Metnin dil etiketi (ör. "en", "en-US" veya "sr-Latn"). | |
text | dize | Belirtilen yerel ayardaki metin. |
GeoCoordinates
Bir konumun enlem, boylam ve adres dahil olmak üzere coğrafi verileri.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
latitude | sayı | [-90, +90] derece (dahil). Boylam ayarlanmışsa zorunludur, aksi takdirde isteğe bağlıdır. | |
longitude | sayı | [-180, +180] derece (dahil). Enlem ayarlanmışsa zorunludur, aksi takdirde isteğe bağlıdır. | |
| oneOf(addresses) | Zorunlu | Bu oneOf'taki alanlardan yalnızca biri ayarlanabilir. |
PostalAddress
Konumun posta adresi.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
country | dize | Zorunlu | Zorunlu. ISO 3166-1 alfa-2 ülke kodu kullanılarak belirtilen ülke (ör. "US"). |
locality | dize | Zorunlu | Zorunlu. Semt/şehir (ör. "Mountain View"). |
region | dize | Bölge/eyalet/il, ör. "CA". Bu alan yalnızca bölgenin genellikle adresin bir parçası olduğu ülkelerde zorunludur. (isteğe bağlı) | |
postal_code | dize | Zorunlu | Zorunlu. Posta kodu (ör. "94043"). |
street_address | dize | Zorunlu | Zorunlu. Açık adres (ör. "1600 Amphitheatre Pkwy"). |
Resim
Önemli yerin (ÖY) resmini temsil eder.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
url | dize | Resmin URL'si. Google, bu URL'de barındırılan medyayı tarar. Maksimum uzunluk: 2.000. | |
alt_text | nesne(Text) | Erişilebilirlik için kullanılacak alternatif metin. |
HotelData
Otele özgü feed verileri.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
hotel_star_class | sayı | Resmi otel sınıfı yıldız değeri. "5 yıldızlı otel" gibi bir etikette kullanılabilir. Bu değerin 0 ile 5 arasında bir tam sayı olması beklenir. Puan yoksa veya belirtilmemişse 0 puanı kullanılmalıdır. 0 değerine ayarlanırsa kullanıcılara kullanıcı arayüzünde yıldız sınıfı gösterilmez. | |
brand_ids | dize dizisi | Bu oteli gösterebilecek markalar. Bu alan boşsa otel, feed ile ilişkili markalardan herhangi birinin altında gösterilebilir. |
LocalData
İşletmeye özgü feed verileri.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
business_hours | nesne(BusinessHours) | İşletmenin normal çalışma saatleri. | |
price_range | nesne(PriceRange) | İşletme tarafından sunulan hizmetlerin fiyat aralığı. | |
establishment_category | nesne(Text) | Kuruluşun türü. | |
brand_landing_pages | nesne dizisi(BrandLandingPages) | Zorunlu | Zorunlu. Marka açılış sayfaları. En az bir tane sağlanmalıdır. |
BusinessHours
Bu konumun faaliyette olduğu zaman aralıklarını gösterir. [TimeRange][madden.vss_poi_feed.TimeRange] örneklerinin bir koleksiyonunu içerir. Örnek: Cumartesi günleri 09:00-12:00 ve 13:00-17:00 saatleri arasında açık: time_ranges { open_day: SATURDAY open_time: { hours: 9, minutes: 0 } close_day: SATURDAY close_time: { hours: 12, minutes: 0 } } time_rages { open_day: SATURDAY open_time: { hours: 13, minutes: 0 } close_day: SATURDAY close_time: { hours: 17, minutes: 0 } } Örnek: Cumartesi günleri 21:00'den pazar günleri 02:00'ye kadar açık: time_ranges { open_day: SATURDAY open_time: { hours: 21, minutes: 0 } close_day: SUNDAY close_time: { hours: 2, minutes: 0 } }
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
time_ranges | nesne dizisi(TimeRange) | Bu ÖY'nin açık olduğu saatler. Her dönem, ÖY'nin hafta içinde açık olduğu saat aralığını gösterir. |
TimeRange
ÖY'nin açık olduğu zaman aralığını gösterir. Belirtilen açılış günü/saatinde başlar ve belirtilen kapanış günü/saatinde sona erer. Kapanış zamanı, açılış zamanından sonra olmalıdır. Örneğin, aynı günün ilerleyen saatlerinde veya sonraki bir günde.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
open_day | enum(DayOfWeek) | Zaman aralığının başlangıç günü. | |
open_time | nesne(TimeOfDay) | Zaman aralığının başlangıç saati. | |
close_day | enum(DayOfWeek) | Zaman aralığının kapanış günü. | |
close_time | nesne(TimeOfDay) | Zaman aralığının kapanış zamanı. |
TimeOfDay
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
hours | sayı | Günün saatleri, 24 saat biçiminde. 0'dan büyük veya 0'a eşit olmalı ve genellikle 23'ten küçük veya 23'e eşit olmalıdır. Bir API, işletmenin kapanış saati gibi senaryolarda "24:00:00" değerine izin vermeyi seçebilir. | |
minutes | sayı | Saatin dakikaları. 0'dan büyük veya 0'a eşit ve 59'dan küçük veya 59'a eşit olmalıdır. | |
seconds | sayı | Bir dakikanın saniyeleri. 0'dan büyük veya 0'a eşit olmalı ve genellikle 59'dan küçük veya 59'a eşit olmalıdır. Bir API, artık saniyelere izin veriyorsa 60 değerine izin verebilir. | |
nanos | sayı | Saniyenin nanosaniye cinsinden kesirleri. 0'dan büyük veya 0'a eşit ve 999.999.999'dan küçük veya 999.999.999'a eşit olmalıdır. |
PriceRange
ÖÖ'nün sunduğu hizmetlerin fiyat aralığı.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
min_price | nesne(Money) | ÖY tarafından sunulan hizmetlerin minimum fiyatı. | |
max_price | nesne(Money) | ÖY tarafından sunulan hizmetlerin maksimum fiyatı. |
Para
Para birimi türüyle birlikte para miktarını temsil eder.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
currency_code | dize | ISO 4217'de tanımlanan üç harfli para birimi kodu. | |
units | sayı | Tutarın tam birimleri.
Örneğin, currencyCode "USD" ise 1 birim, 1 ABD dolarıdır. | |
nanos | sayı | Tutarın nano (10^-9) birim sayısı.
Değer, -999.999.999 ile +999.999.999 arasında (başlangıç ve bitiş değerleri dahil) olmalıdır.
units pozitifse nanos pozitif veya sıfır olmalıdır.
units sıfırsa nanos pozitif, sıfır veya negatif olabilir.
units negatifse nanos negatif veya sıfır olmalıdır.
Örneğin $-1,75,units=-1 ve nanos=-750.000.000 olarak gösterilir. |
BrandLandingPages
Tek bir önemli yer (ÖY) için yerelleştirilmiş marka açılış sayfaları.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
brand_id | dize | Zorunlu | Zorunlu. Bu yapılandırmanın geçerli olduğu marka. |
localized_landing_pages | nesne dizisi(LocalizedLandingPage) | Yerelleştirilmiş açılış sayfaları. URL ve yerel ayar alanlarının değerleri, tüm yerelleştirilmiş açılış sayfalarında benzersiz olmalıdır. | |
default_url | dize | Zorunlu | Zorunlu. Yerelleştirilmiş açılış sayfalarından hiçbiri kullanıcının diliyle eşleşmediğinde kullanılacak varsayılan açılış sayfası URL'si. |
LocalizedLandingPage
Önemli yer (ÖY) için yerelleştirilmiş açılış sayfası.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
url | dize | Açılış sayfasının URL'si. Maksimum uzunluk: 2.000 | |
locales | dize dizisi | Bu sayfayı, belirtilen dil tercihine sahip kullanıcılarla kısıtlar. "en", "en-US" veya "sr-Latn" gibi dil etiketleri içermelidir. |
Kategori
ÖY'nin kategorisini temsil eder.
Aşağıdaki additional_data oneof alanıyla eşleşmelidir.
| Ad | Açıklama |
|---|---|
UNKNOWN_CATEGORY | |
HOTEL | |
LOCAL |
HaftanınGünü
Haftanın bir gününü temsil eder.
| Ad | Açıklama |
|---|---|
DAY_OF_WEEK_UNSPECIFIED | Haftanın günü belirtilmemiş. |
MONDAY | Pazartesi |
TUESDAY | Salı |
WEDNESDAY | Çarşamba |
THURSDAY | Perşembe |
FRIDAY | Cuma |
SATURDAY | Cumartesi |
SUNDAY | Pazar |
additional_data
Zorunlu. Kategoriye özgü alanlar.
Bu alan, yukarıdaki category alanı ile eşleşmelidir.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
hotel_data | nesne(HotelData) |
| Otele özgü alanlar. |
local_data | object(LocalData) |
| Yerel ayarlara özgü alanlar. |
adresler
Zorunlu. Bir konumun adresi.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
address | object(PostalAddress) | Konumun posta adresi. |
Tanımlar
VssPoiFeed Tanımı
// Represents a Point of Interest (POI) data feed provided by a partner. export message VssPoiFeed { // The POIs in the feed. repeated VssPoi data = 1; }
VssPoi Definition
// Represents a single Point of Interest (POI) entity e.g. a hotel or // restaurant. export message VssPoi { // Required. A string generated by the partner that identifies a POI. string poi_id = 1; // The entity name, telephone, url and location are used to support // matching partner inventory with entities already present on Google. // Required. The name of the POI. Text name = 2; // The contact telephone number of the POI including its country and // area codes, e.g. +14567891234. string telephone = 3 [(datapol.semantic_type) = ST_PHONE_NUMBER]; // The url of the POI's public website. // Note: This will be used just for matching purposes, not for display. string url = 4; // Required. The location of the POI. GeoCoordinates location = 5; // The address displayed on the UI. Text display_address = 17; // Images of the POI. // Max number of images: 5. repeated Image images = 6; // Average rating for the POI. float rating = 12; // The number of contributing ratings for the `rating` field. int64 num_ratings = 13; // The rating scale used for the `rating` field. If max rating is 5, then // rating_scale is 5. int32 rating_scale = 14; // Represents the category of the POI. // It should match the `additional_data` oneof field below. export enum Category { LOCAL = 4; } // Required. Represents the category of the POI. Category category = 9; // A description of the POI. Text description = 16; // Required. Category specific fields. // It should match the `category` field above. oneof additional_data { // Local specific fields. LocalData local_data = 15; } }
Metin Tanımı
// Represents a text with localizations. message Text { // Represents a localized string. message LocalizedString { // The text's language tag, such as "en", "en-US" or "sr-Latn". string locale = 1; // The text in the specified locale. string text = 2; } // The localized strings. repeated LocalizedString localizations = 1; // The locale to use as the default language it must be present in the // localizations. string default_locale = 2; }
GeoCoordinates Tanımı
// The Geo data of a location, including latitude, longitude, and address. message GeoCoordinates { option (datapol.msg_semantic_type) = ST_LOCATION; // [-90, +90] degrees (inclusive). // Required if longitude is set, otherwise nice to have. double latitude = 1; // [-180, +180] degrees (inclusive). // Required if latitude is set, otherwise nice to have. double longitude = 2; // Required. Address for a location. oneof addresses { // Postal address of the location. PostalAddress address = 3; } }
PostalAddress Tanımı
// The postal address for the location. message PostalAddress { option (datapol.msg_semantic_type) = ST_LOCATION; // Required. The country, using ISO 3166-1 alpha-2 country code, e.g. "US". string country = 1; // Required. The locality/city, e.g. "Mountain View". string locality = 2; // The region/state/province, e.g. "CA". This field is only required in // countries where region is commonly a part of the address. (optional) string region = 3; // Required. The postal code, e.g. "94043". string postal_code = 4; // Required. The street address, e.g. "1600 Amphitheatre Pkwy". string street_address = 5; }
Resim Tanımı
// Represents an image of the Point of Interest (POI). export message Image { // The url of the image. Google will crawl the media hosted at this URL. // Max length: 2000. string url = 1; // The alternative text to be used for accessibility. Text alt_text = 2; }
LocalData Tanımı
// Establishment specific feed data. message LocalData { // The regular business hours of the establishment. BusinessHours business_hours = 1; // Price range of the services offered by the establishment. PriceRange price_range = 2; // The type of establishment. Text establishment_category = 3; // Required. The brand landing pages. At least one must be provided. repeated BrandLandingPages brand_landing_pages = 4; }
BrandLandingPages Definition
// The Localized brand landing pages for a single Point of Interest (POI). message BrandLandingPages { // Required. The brand this configuration applies to. string brand_id = 1 [(datapol.semantic_type) = ST_PARTNER_ID]; // Localized landing page for the Point of Interest (POI). message LocalizedLandingPage { // The url of the landing page. // Max length: 2000. string url = 1; // Restricts this page to users with the specified language preference. // Must contain language tags, such as "en", "en-US" or "sr-Latn". repeated string locales = 3; } // The localized landing pages. // The url and locales fields values must be unique across all the localized // landing pages. repeated LocalizedLandingPage localized_landing_pages = 2; // Required. The default landing page url to be used when none of the // localized landing pages matches the user's language. string default_url = 3; }
Örnekler
Önemli Yer Özet Akışı
Dosya adı: poi_1707240000.json
{ "data": [ { "poi_id": "test_restaurant_1", "name": { "localizations": [ { "locale": "en", "text": "Tasty Bites Test Restaurant" } ], "default_locale": "en" }, "telephone": "+1234567890", "url": "https://www.tastybitestest.com", "location": { "latitude": 37.422, "longitude": -122.084, "address": { "country": "US", "locality": "Mountain View", "postal_code": "94043", "street_address": "1600 Amphitheatre Pkwy" } }, "display_address": { "localizations": [ { "locale": "en", "text": "1600 Amphitheatre Pkwy, Mountain View, CA 94043" } ], "default_locale": "en" }, "images": [ { "url": "https://www.tastybitestest.com/images/interior.jpg", "alt_text": { "localizations": [ { "locale": "en", "text": "Cozy dining area of Tasty Bites" } ], "default_locale": "en" } } ], "rating": 4.7, "num_ratings": 150, "rating_scale": 5, "category": "LOCAL", "description": { "localizations": [ { "locale": "en", "text": "A mock restaurant for testing the POI feed ingestion." } ], "default_locale": "en" }, "local_data": { "establishment_category": { "localizations": [ { "locale": "en", "text": "Restaurant" } ], "default_locale": "en" }, "price_range": { "min_price": { "currency_code": "USD", "units": 15, "nanos": 0 }, "max_price": { "currency_code": "USD", "units": 45, "nanos": 0 } }, "business_hours": { "time_ranges": [ { "open_day": "MONDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "MONDAY", "close_time": { "hours": 21, "minutes": 0 } }, { "open_day": "TUESDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "TUESDAY", "close_time": { "hours": 21, "minutes": 0 } }, { "open_day": "WEDNESDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "WEDNESDAY", "close_time": { "hours": 21, "minutes": 0 } }, { "open_day": "THURSDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "THURSDAY", "close_time": { "hours": 22, "minutes": 0 } }, { "open_day": "FRIDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "FRIDAY", "close_time": { "hours": 23, "minutes": 0 } }, { "open_day": "SATURDAY", "open_time": { "hours": 10, "minutes": 0 }, "close_day": "SATURDAY", "close_time": { "hours": 23, "minutes": 0 } }, { "open_day": "SUNDAY", "open_time": { "hours": 10, "minutes": 0 }, "close_day": "SUNDAY", "close_time": { "hours": 20, "minutes": 0 } } ] }, "brand_landing_pages": [ { "brand_id": "tasty_bites_brand", "localized_landing_pages": [ { "url": "https://www.tastybitestest.com/en", "locales": ["en-US", "en-GB"] } ], "default_url": "https://www.tastybitestest.com" } ] } } ] }
Çok dilli ÖY feed'i
Dosya adı: poi_multilingual.json
{ "data": [ { "poi_id": "test_restaurant_1", "name": { "localizations": [ { "locale": "en", "text": "Tasty Bites Test Restaurant" }, { "locale": "fr", "text": "Restaurant de test Tasty Bites" } ], "default_locale": "en" }, "telephone": "+1234567890", "url": "https://www.tastybitestest.com", "location": { "latitude": 37.422, "longitude": -122.084, "address": { "country": "US", "locality": "Mountain View", "postal_code": "94043", "street_address": "1600 Amphitheatre Pkwy" } }, "display_address": { "localizations": [ { "locale": "en", "text": "1600 Amphitheatre Pkwy, Mountain View, CA 94043" }, { "locale": "fr", "text": "1600 Amphitheatre Pkwy, Mountain View, CA 94043" } ], "default_locale": "en" }, "images": [ { "url": "https://www.tastybitestest.com/images/interior.jpg", "alt_text": { "localizations": [ { "locale": "en", "text": "Cozy dining area of Tasty Bites" }, { "locale": "fr", "text": "Espace salle à manger accueillant de Tasty Bites" } ], "default_locale": "en" } } ], "rating": 4.7, "num_ratings": 150, "rating_scale": 5, "category": "LOCAL", "description": { "localizations": [ { "locale": "en", "text": "A mock restaurant for testing the POI feed ingestion." }, { "locale": "fr", "text": "Un faux restaurant pour tester l'ingestion de flux de points d'intérêt." } ], "default_locale": "en" }, "local_data": { "establishment_category": { "localizations": [ { "locale": "en", "text": "Restaurant" }, { "locale": "fr", "text": "Restaurant" } ], "default_locale": "en" }, "price_range": { "min_price": { "currency_code": "USD", "units": 15, "nanos": 0 }, "max_price": { "currency_code": "USD", "units": 45, "nanos": 0 } }, "business_hours": { "time_ranges": [ { "open_day": "MONDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "MONDAY", "close_time": { "hours": 21, "minutes": 0 } }, { "open_day": "TUESDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "TUESDAY", "close_time": { "hours": 21, "minutes": 0 } }, { "open_day": "WEDNESDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "WEDNESDAY", "close_time": { "hours": 21, "minutes": 0 } }, { "open_day": "THURSDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "THURSDAY", "close_time": { "hours": 22, "minutes": 0 } }, { "open_day": "FRIDAY", "open_time": { "hours": 11, "minutes": 0 }, "close_day": "FRIDAY", "close_time": { "hours": 23, "minutes": 0 } }, { "open_day": "SATURDAY", "open_time": { "hours": 10, "minutes": 0 }, "close_day": "SATURDAY", "close_time": { "hours": 23, "minutes": 0 } }, { "open_day": "SUNDAY", "open_time": { "hours": 10, "minutes": 0 }, "close_day": "SUNDAY", "close_time": { "hours": 20, "minutes": 0 } } ] }, "brand_landing_pages": [ { "brand_id": "tasty_bites_brand", "localized_landing_pages": [ { "url": "https://www.tastybitestest.com/fr", "locales": ["fr-FR", "fr-CA"] }, { "url": "https://www.tastybitestest.com/en", "locales": ["en-US", "en-GB"] } ], "default_url": "https://www.tastybitestest.com" } ] } } ] }