עדכון נקודות עניין (POI)

יצירה והעלאה של פידים של נקודות עניין

כשיוצרים ומעלים פידים של נקודות עניין, צריך לפעול לפי ההוראות הבאות:

  • פועלים לפי המפרט שמתואר בפיד של נקודות עניין עבור קובצי נתונים של נקודות עניין. מומלץ להשתמש בשמות ייחודיים של קובצי נתונים של נקודות עניין בכל העלאה. כוללים חותמת זמן בשם הקובץ, לדוגמה, POI_1633621547.json.
  • העלאת פידים לשרת ה-SFTP של נקודות העניין המקומיות מדי יום כעדכונים מלאים.
  • פרטי שרת SFTP מופיעים בקטע הגדרה > פידים בפורטל השותפים.

בחירת שרתי פיד

מפרט הפיד

דרישות לגבי השדות

VssPoi

מייצג ישות יחידה של נקודת עניין (POI), למשל מלון או מסעדה.

שם השדהסוגדרישהתיאור
poi_idמחרוזת

חובה

חובה. מחרוזת שנוצרת על ידי השותף ומזהה נקודת עניין.
nameאובייקט
(Text)

חובה

חובה. שם נקודת העניין.
telephoneמחרוזת

מספר הטלפון של איש הקשר בנקודת העניין, כולל קוד המדינה וקידומת האזור, למשל ‎+14567891234.
urlמחרוזת

כתובת ה-URL של האתר הציבורי של נקודת העניין. הערה: הנתונים האלה ישמשו רק למטרות התאמה, ולא יוצגו.
locationאובייקט
(GeoCoordinates)

חובה

חובה. המיקום של נקודת העניין.
display_addressאובייקט
(Text)

הכתובת שמוצגת בממשק המשתמש.
imagesמערך של אובייקטים
(Image)

תמונות של נקודת העניין. מספר התמונות המקסימלי: 5.
ratingnumber

הדירוג הממוצע של נקודת העניין.
num_ratingsnumber

מספר הדירוגים שתרמו לערך בשדה rating.
rating_scalenumber

סולם הדירוג שמשמש בשדה rating. אם הדירוג המקסימלי הוא 5, אז הערך של rating_scale הוא 5.
categoryenum
(Category)

חובה

חובה. מייצג את הקטגוריה של נקודת העניין.
descriptionאובייקט
(Text)

תיאור של נקודת העניין.
oneOf
(additional_data)

חובה

אפשר להגדיר רק אחד מהשדות ב-oneOf הזה.

טקסט

ייצוג של טקסט עם לוקליזציות.

שם השדהסוגדרישהתיאור
localizationsמערך של אובייקטים
(LocalizedString)

המחרוזות המותאמות לשוק המקומי.
default_localeמחרוזת

הלוקאל שבו רוצים להשתמש כשפת ברירת המחדל חייב להיות קיים בלוקליזציות.

LocalizedString

מייצג מחרוזת מקומית.

שם השדהסוגדרישהתיאור
localeמחרוזת

תג השפה של הטקסט, כמו en,‏ en-US או sr-Latn.
textמחרוזת

הטקסט בלוקאל שצוין.

GeoCoordinates

הנתונים הגיאוגרפיים של מיקום, כולל קו רוחב, קו אורך וכתובת.

שם השדהסוגדרישהתיאור
latitudenumber

‫‎[-90, +90] מעלות (כולל). חובה אם האורך מוגדר, אחרת מומלץ.
longitudenumber

‫[-180, +180] מעלות (כולל). חובה אם מוגדר קו רוחב, אחרת מומלץ.
oneOf
(addresses)

חובה

אפשר להגדיר רק אחד מהשדות ב-oneOf הזה.

PostalAddress

הכתובת הפיזית של המיקום.

שם השדהסוגדרישהתיאור
countryמחרוזת

חובה

חובה. המדינה, באמצעות קוד מדינה מסוג ISO 3166-1 alpha-2, למשל US.
localityמחרוזת

חובה

חובה. היישוב או העיר, למשל Mountain View.
regionמחרוזת

האזור, המדינה או הפרובינציה, למשל CA. שדה החובה הזה נדרש רק במדינות שבהן האזור הוא בדרך כלל חלק מהכתובת. (אופציונלי)
postal_codeמחרוזת

חובה

חובה. המיקוד, לדוגמה: 94043.
street_addressמחרוזת

חובה

חובה. הכתובת, למשל '1600 Amphitheatre Pkwy'.

תמונה

מייצג תמונה של נקודת העניין.

שם השדהסוגדרישהתיאור
urlמחרוזת

כתובת ה-URL של התמונה. ‫Google תסרוק את המדיה שמתארחת בכתובת ה-URL הזו. אורך מקסימלי: 2,000.
alt_textאובייקט
(Text)

הטקסט החלופי שישמש לנגישות.

HotelData

נתוני פיד ספציפיים למלון.

שם השדהסוגדרישהתיאור
hotel_star_classnumber

דירוג הכוכבים הרשמי של המלון. אפשר להשתמש בתווית כמו "מלון 5 כוכבים". הערך צריך להיות מספר שלם בין 1 ל-5.
brand_idsמערך מחרוזות

המותגים שיכולים להציג את המלון הזה. אם השדה הזה ריק, המלון יכול להופיע בכל אחד מהמותגים שמשויכים לפיד.

LocalData

נתוני פיד ספציפיים למוסד.

שם השדהסוגדרישהתיאור
business_hoursאובייקט
(BusinessHours)

שעות הפעילות הרגילות של העסק.
price_rangeאובייקט
(PriceRange)

טווח המחירים של השירותים שהעסק מציע.
establishment_categoryאובייקט
(Text)

סוג המוסד.
brand_landing_pagesמערך של אובייקטים
(BrandLandingPages)

דפי הנחיתה של המותג.

BusinessHours

מייצג את תקופות הזמן שבהן המיקום הזה פתוח לעסקים. מחזיק אוסף של מופעים של [TimeRange][madden.vss_poi_feed.TimeRange] דוגמה: העסק פתוח בימי שבת בין השעות 09:00 ל-12:00 ובין השעות 13:00 ל-17:00: 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 } } דוגמה: העסק פתוח בימי שבת בין השעות 21:00 ליום ראשון בשעה 02:00: time_ranges { open_day: SATURDAY open_time: { hours: 21, minutes: 0 } close_day: SUNDAY close_time: { hours: 2, minutes: 0 } }

שם השדהסוגדרישהתיאור
time_rangesמערך של אובייקטים
(TimeRange)

אוסף של שעות שבהן נקודת העניין הזו פתוחה לקהל. כל תקופה מייצגת טווח שעות שבו הנקודה פתוחה במהלך השבוע.

TimeRange

מייצג טווח זמן שבו נקודת העניין פתוחה, החל משעת הפתיחה ביום הפתיחה שצוין ועד לשעת הסגירה ביום הסגירה שצוין. שעת הסגירה צריכה להיות אחרי שעת הפתיחה, למשל מאוחר יותר ביום הקנייה או ביום שלאחר מכן.

שם השדהסוגדרישהתיאור
open_dayenum
(DayOfWeek)

היום שבו מתחיל טווח הזמן.
open_timeאובייקט
(TimeOfDay)

שעת הפתיחה של טווח הזמן.
close_dayenum
(DayOfWeek)

היום שבו מסתיים טווח התאריכים.
close_timeאובייקט
(TimeOfDay)

שעת הסגירה של טווח הזמן.

TimeOfDay

שם השדהסוגדרישהתיאור
hoursnumber

שעות ביום בפורמט של 24 שעות. הערך חייב להיות גדול מ-0 או שווה לו, ובדרך כלל הוא צריך להיות קטן מ-23 או שווה לו. יכול להיות שממשק API יאפשר את הערך '24:00:00' בתרחישים כמו שעת סגירת העסק.
minutesnumber

מספר הדקות אחרי השעה השלמה. הערך חייב להיות גדול מ-0 או שווה לו, וקטן מ-59 או שווה לו.
secondsnumber

שניות בדקה. הערך חייב להיות גדול מ-0 או שווה לו, ובדרך כלל קטן מ-59 או שווה לו. יכול להיות ש-API יאפשר את הערך 60 אם הוא מאפשר שניות מעוברות.
nanosnumber

שברירי שניות, בננו-שניות. חייב להיות גדול מ-0 או שווה לו וקטן מ-999,999,999 או שווה לו.

PriceRange

טווח המחירים של השירותים שמוצעים בנקודת העניין.

שם השדהסוגדרישהתיאור
min_priceאובייקט
(Money)

המחיר המינימלי של השירותים שמוצעים בנקודת העניין.
max_priceאובייקט
(Money)

המחיר המקסימלי של השירותים שמוצעים בנקודת העניין.

כסף

מייצג סכום כסף עם סוג המטבע.

שם השדהסוגדרישהתיאור
currency_codeמחרוזת

קוד המטבע בן שלוש אותיות כפי שמוגדר בתקן ISO 4217.
unitsnumber

מספר היחידות השלמות של הסכום. לדוגמה: אם הערך של currencyCode הוא "USD", המשמעות היא ש-1 יחידה = 1 דולר ארה"ב.
nanosnumber

מספר יחידות הננו (10‎^-9) של הסכום. הערך חייב להיות בין ‎-999,999,999 ל- ‎+999,999,999, כולל. אם הערך של units הוא חיובי, הערך של nanos חייב להיות חיובי או אפס. אם הערך של units הוא אפס, הערך של nanos יכול להיות חיובי, אפס או שלילי. אם הערך של units הוא שלילי, הערך של nanos חייב להיות שלילי או אפס. לדוגמה, הסכום ‎ $-1.75 מיוצג כ-units=-1 וגם כ-nanos=-750,000,000.

BrandLandingPages

דפי נחיתה מותאמים לשוק המקומי של מותג עבור נקודת עניין אחת.

שם השדהסוגדרישהתיאור
brand_idמחרוזת

המותג שההגדרה הזו חלה עליו.
localized_landing_pagesמערך של אובייקטים
(LocalizedLandingPage)

דפי הנחיתה המותאמים לשוק המקומי. הערכים בשדות url ו-locales חייבים להיות ייחודיים בכל דפי הנחיתה המותאמים לשוק המקומי.
default_urlמחרוזת

כתובת ה-URL של דף הנחיתה שמוגדרת כברירת מחדל, שתשמש כששום אחת מכתובות ה-URL של דפי הנחיתה המותאמים לשפות שונות לא תואמת לשפה של המשתמש.

LocalizedLandingPage

דף נחיתה מותאם לשפה המקומית של נקודת העניין.

שם השדהסוגדרישהתיאור
urlמחרוזת

כתובת ה-URL של דף הנחיתה. אורך מקסימלי: 2,000.
localesמערך מחרוזות

מגביל את הגישה לדף הזה למשתמשים עם העדפת השפה שצוינה. חייב להכיל תגי שפה, כמו en,‏ en-US או sr-Latn.

קטגוריה

מייצג את הקטגוריה של נקודת העניין. הוא צריך להיות זהה לadditional_dataשדה oneof שבהמשך.

שםתיאור
UNKNOWN_CATEGORY
HOTEL
LOCAL

DayOfWeek

מייצג יום בשבוע.

שםתיאור
DAY_OF_WEEK_UNSPECIFIEDלא צוין יום בשבוע.
MONDAYשני
TUESDAYשלישי
WEDNESDAYרביעי
THURSDAYחמישי
FRIDAYשישי
SATURDAYשבת
SUNDAYראשון

additional_data

חובה. שדות ספציפיים לקטגוריה. הוא צריך להיות זהה לערך בשדה category שלמעלה.

שם השדהסוגדרישהתיאור
hotel_dataאובייקט
(HotelData)

המאפיין הזה לא יכול להיות משולב עם local_data

שדות ספציפיים למלון.
local_dataאובייקט
(LocalData)

לא ניתן להשתמש בו עם hotel_data

שדות ספציפיים לחנות מקומית.

כתובות

חובה. כתובת של מיקום.

שם השדהסוגדרישהתיאור
addressאובייקט
(PostalAddress)

הכתובת הפיזית של המיקום.
  • פורמט: JPEG,‏ PNG או WebP.
  • גודל קובץ מקסימלי: עד 30MB לכל תמונה.
  • מידות מקסימליות: פחות מ-75 מגה-פיקסל בסך הכול (רוחב x גובה < 75,000,000).
  • סוג כתובת ה-URL: נתיב ישיר לנכס התמונה (למשל, מסתיים ב-‎.jpg).
  • הרשאות: מוודאים ששרת האירוח מאפשר גישה ל-Googlebot או לסורקים, ואין קובץ robots.txt שחוסם את ספריות התמונות.

הגדרות

VssPoiFeed Definition

// 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

// 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;
  }

}

הגדרת טקסט

// 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

// 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

// 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;
}

הגדרת התמונה

// 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;
}

הגדרה של נתונים מקומיים

// 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;

  // The brand landing pages.
  repeated BrandLandingPages brand_landing_pages = 4;
}

הגדרה של BrandLandingPages

// The Localized brand landing pages for a single Point of Interest (POI).
message BrandLandingPages {
  // 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;

  // The default landing page url to be used when none of the localized
  // landing pages matches the user's language.
  string default_url = 3;
}

דוגמאות

עדכון נקודות עניין

שם הקובץ: 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"
          },
          {
            "brand_id": "delicious_eats_brand",
            "localized_landing_pages": [
              {
                "url": "https://www.deliciouseats.com/en",
                "locales": ["en-US", "en-GB"]
              }
            ],
            "default_url": "https://www.deliciouseats.com"
          }
        ]
      }
    }
  ]
}

פיד של נקודות עניין בשפות שונות

שם הקובץ: 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"
          },
          {
            "brand_id": "delicious_eats_brand",
            "localized_landing_pages": [
              {
                "url": "https://www.deliciouseats.com/fr",
                "locales": ["fr-FR", "fr-CA"]
              },
              {
                "url": "https://www.deliciouseats.com/en",
                "locales": ["en-US", "en-GB"]
              }
            ],
            "default_url": "https://www.deliciouseats.com"
          }
        ]
      }
    }
  ]
}