Nguồn cấp dữ liệu Địa điểm yêu thích (POI)

Tạo và tải nguồn cấp dữ liệu địa điểm yêu thích lên

Khi tạo và tải nguồn cấp dữ liệu địa điểm yêu thích lên, hãy làm theo các hướng dẫn sau:

  • Tuân theo quy cách được mô tả trong nguồn cấp dữ liệu POI đối với tệp dữ liệu POI. Bạn nên sử dụng tên tệp dữ liệu POI riêng biệt cho mỗi lần tải lên. Thêm dấu thời gian vào tên tệp, ví dụ: POI_1633621547.json.
  • Tải nguồn cấp dữ liệu lên máy chủ SFTP của địa điểm yêu thích tại địa phương hằng ngày dưới dạng nội dung làm mới đầy đủ.
  • Bạn có thể tìm thấy thông tin chi tiết về máy chủ SFTP trong mục Cấu hình > Nguồn cấp dữ liệu của Partner Portal.

Chọn máy chủ nguồn cấp dữ liệu

  • Xem trạng thái nhập nguồn cấp dữ liệu trong phần Nhập > Nhật ký của Partner Portal.

Nguyên tắc đóng gói tệp

Để đảm bảo quá trình nhập thành công, hãy tuân thủ các yêu cầu sau về việc đóng gói:

  • Tệp lưu trữ JSON tổng hợp duy nhất (Bắt buộc): Kết hợp tất cả các bản ghi thực thể thành một tệp JSON duy nhất. Bạn nên nén tệp đó thành một tệp lưu trữ GZIP duy nhất rồi tải lên.
  • Cảnh báo về mẫu chống lại: Không sử dụng một tệp cho mỗi thực thể hoặc nhiều tệp được phân tách theo quốc gia trong cùng một kho lưu trữ. Cách này không được hỗ trợ và sẽ khiến quá trình trích xuất không thành công.

Hỗ trợ đa ngôn ngữ

Nguồn cấp dữ liệu Điểm yêu thích hỗ trợ việc cung cấp nội dung được bản địa hoá cho một số trường cụ thể. Các trường sau đây thuộc loại Text và hỗ trợ bản địa hoá:

  • name
  • description
  • display_address

Để cung cấp nội dung bằng nhiều ngôn ngữ, bạn phải chỉ định một default_locale trong trường và cung cấp các chuỗi đã bản địa hoá trong danh sách localizations. Cung cấp tất cả thông tin bản địa hoá cho một thực thể trong một mục nhập địa điểm yêu thích duy nhất. Đừng chia một thực thể duy nhất thành nhiều tệp JSON ngôn ngữ.

Ví dụ:

"name": {
  "localizations": [
    {
      "locale": "en",
      "text": "Tasty Bites Test Restaurant"
    },
    {
      "locale": "es",
      "text": "Restaurante de prueba Tasty Bites"
    }
  ],
  "default_locale": "en"
}

Nguyên tắc về hình ảnh

  • Định dạng: Phải là JPEG, PNG hoặc WebP.
  • Kích thước tệp tối đa: Dưới 30 MB mỗi hình ảnh.
  • Kích thước tối đa: Tổng kích thước dưới 75 Megapixel (chiều rộng x chiều cao < 75.000.000).
  • Loại URL: Đường dẫn trực tiếp đến thành phần hình ảnh (ví dụ: có đuôi .jpg).
  • Quyền: Đảm bảo máy chủ lưu trữ cho phép Googlebot hoặc Trình thu thập thông tin truy cập và không có tệp robots.txt nào chặn các thư mục hình ảnh.
  • Tìm kiếm an toàn: Hình ảnh phải tuân thủ chính sách tìm kiếm an toàn của Google.

Quy cách nguồn cấp dữ liệu

Yêu cầu về trường

VssPoi

Biểu thị một thực thể Địa điểm yêu thích (POI), ví dụ: khách sạn hoặc nhà hàng.

Tên trườngLoạiYêu cầuMô tả
poi_idchuỗi

Bắt buộc

Bắt buộc. Một chuỗi do đối tác tạo ra để xác định một địa điểm yêu thích.
nameobject
(Text)

Bắt buộc

Bắt buộc. Tên của địa điểm yêu thích.
telephonechuỗi

Số điện thoại liên hệ của địa điểm yêu thích, bao gồm cả mã quốc gia và mã vùng, ví dụ: +14567891234.
urlchuỗi

URL của trang web công khai của địa điểm yêu thích. Lưu ý: Thông tin này chỉ được dùng cho mục đích so khớp, không dùng để hiển thị.
locationobject
(GeoCoordinates)

Bắt buộc

Bắt buộc. Vị trí của POI.
display_addressobject
(Text)

Địa chỉ hiển thị trên giao diện người dùng.
imagesmảng đối tượng
(Image)

Hình ảnh về địa điểm yêu thích. Số lượng hình ảnh tối đa: 5.
ratingsố

Điểm xếp hạng trung bình cho địa điểm yêu thích.
num_ratingssố

Số lượng điểm xếp hạng đóng góp cho trường rating.
rating_scalesố

Thang điểm xếp hạng dùng cho trường rating. Nếu điểm xếp hạng tối đa là 5, thì rating_scale là 5.
categoryenum
(Category)

Bắt buộc

Bắt buộc. Đại diện cho danh mục của địa điểm yêu thích.
descriptionobject
(Text)

Nội dung mô tả về địa điểm yêu thích.
oneOf
(additional_data)

Bắt buộc

Bạn chỉ có thể đặt một trong các trường trong oneOf này.

Văn bản

Đại diện cho một văn bản có bản dịch.

Tên trườngLoạiYêu cầuMô tả
localizationsmảng đối tượng
(LocalizedString)

Các chuỗi được bản địa hoá.
default_localechuỗi

Địa điểm sử dụng làm ngôn ngữ mặc định phải có trong bản bản địa hoá.

LocalizedString

Biểu thị một chuỗi được bản địa hoá.

Tên trườngLoạiYêu cầuMô tả
localechuỗi

Thẻ ngôn ngữ của văn bản, chẳng hạn như "en", "en-US" hoặc "sr-Latn".
textchuỗi

Văn bản theo ngôn ngữ đã chỉ định.

GeoCoordins

Dữ liệu địa lý của một vị trí, bao gồm vĩ độ, kinh độ và địa chỉ.

Tên trườngLoạiYêu cầuMô tả
latitudesố

[-90, +90] độ (bao gồm). Bắt buộc nếu bạn đặt kinh độ, nếu không thì không bắt buộc.
longitudesố

[-180, +180] độ (bao gồm cả 2 giá trị này). Bắt buộc nếu bạn đặt vĩ độ, nếu không thì bạn nên đặt.
oneOf
(addresses)

Bắt buộc

Bạn chỉ có thể đặt một trong các trường trong oneOf này.

PostalAddress

Địa chỉ bưu chính của địa điểm.

Tên trườngLoạiYêu cầuMô tả
countrychuỗi

Bắt buộc

Bắt buộc. Quốc gia, sử dụng mã quốc gia ISO 3166-1 alpha-2, ví dụ: "US".
localitychuỗi

Bắt buộc

Bắt buộc. Địa phương/thành phố, ví dụ: "Mountain View".
regionchuỗi

Khu vực/tiểu bang/tỉnh, ví dụ: "CA". Trường này chỉ bắt buộc ở những quốc gia thường có khu vực trong địa chỉ. (không bắt buộc)
postal_codechuỗi

Bắt buộc

Bắt buộc. Mã bưu chính, ví dụ: "94043".
street_addresschuỗi

Bắt buộc

Bắt buộc. Địa chỉ đường phố, ví dụ: "1600 Amphitheatre Pkwy".

Hình ảnh

Đại diện cho hình ảnh của Địa điểm yêu thích (POI).

Tên trườngLoạiYêu cầuMô tả
urlchuỗi

URL của hình ảnh. Google sẽ thu thập dữ liệu nội dung nghe nhìn được lưu trữ tại URL này. Độ dài tối đa: 2000.
alt_textobject
(Text)

Văn bản thay thế sẽ được dùng để hỗ trợ tiếp cận.

HotelData

Dữ liệu cụ thể của nguồn cấp dữ liệu khách sạn.

Tên trườngLoạiYêu cầuMô tả
hotel_star_classsố

Giá trị sao chính thức của hạng khách sạn. Có thể dùng trong nhãn như "khách sạn 5 sao". Giá trị này phải là một số nguyên từ 0 đến 5. Bạn nên sử dụng điểm xếp hạng là 0 nếu không có điểm xếp hạng hoặc không chỉ định điểm xếp hạng. Khi được đặt thành 0, người dùng sẽ không thấy hạng sao nào trên giao diện người dùng.
brand_idsmảng chuỗi

Những thương hiệu có thể đăng khách sạn này. Nếu trường này trống, khách sạn có thể xuất hiện trong bất kỳ thương hiệu nào được liên kết với nguồn cấp dữ liệu.

LocalData

Dữ liệu nguồn cấp dữ liệu cụ thể của cơ sở.

Tên trườngLoạiYêu cầuMô tả
business_hoursobject
(BusinessHours)

Giờ hoạt động thông thường của cơ sở.
price_rangeobject
(PriceRange)

Khoảng giá của các dịch vụ do cơ sở cung cấp.
establishment_categoryobject
(Text)

Loại cơ sở.
brand_landing_pagesmảng đối tượng
(BrandLandingPages)

Bắt buộc

Bắt buộc. Trang đích của thương hiệu. Bạn phải cung cấp ít nhất một thông tin.

BusinessHours

Cho biết khoảng thời gian địa điểm này mở cửa kinh doanh. Chứa một tập hợp các thực thể [TimeRange][madden.vss_poi_feed.TimeRange]. Ví dụ: Mở cửa vào thứ Bảy từ 09:00 đến 12:00 và từ 13:00 đến 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 } } Ví dụ: Mở cửa vào thứ Bảy từ 21:00 đến 2:00 Chủ Nhật: time_ranges { open_day: SATURDAY open_time: { hours: 21, minutes: 0 } close_day: SUNDAY close_time: { hours: 2, minutes: 0 } }

Tên trườngLoạiYêu cầuMô tả
time_rangesmảng đối tượng
(TimeRange)

Tập hợp các khung giờ mà địa điểm yêu thích này mở cửa hoạt động. Mỗi khoảng thời gian đại diện cho một khoảng giờ mà địa điểm yêu thích mở cửa trong tuần.

TimeRange

Biểu thị khoảng thời gian mà địa điểm yêu thích mở cửa, bắt đầu vào ngày/giờ mở cửa được chỉ định và kết thúc vào ngày/giờ đóng cửa được chỉ định. Giờ đóng cửa phải sau giờ mở cửa, ví dụ: muộn hơn trong cùng ngày hoặc vào ngày tiếp theo.

Tên trườngLoạiYêu cầuMô tả
open_dayenum
(DayOfWeek)

Ngày mở cửa trong phạm vi thời gian.
open_timeobject
(TimeOfDay)

Giờ mở cửa của phạm vi thời gian.
close_dayenum
(DayOfWeek)

Ngày kết thúc của phạm vi thời gian.
close_timeobject
(TimeOfDay)

Giờ đóng của phạm vi thời gian.

TimeOfDay

Tên trườngLoạiYêu cầuMô tả
hourssố

Giờ trong ngày theo định dạng 24 giờ. Phải lớn hơn hoặc bằng 0 và thường phải nhỏ hơn hoặc bằng 23. Một API có thể chọn cho phép giá trị "24:00:00" cho các trường hợp như giờ đóng cửa của doanh nghiệp.
minutessố

Số phút trong một giờ. Phải lớn hơn hoặc bằng 0 và nhỏ hơn hoặc bằng 59.
secondssố

Số giây trong một phút. Phải lớn hơn hoặc bằng 0 và thường phải nhỏ hơn hoặc bằng 59. Một API có thể cho phép giá trị 60 nếu API đó cho phép giây nhuận.
nanossố

Phần giây, tính bằng nano giây. Phải lớn hơn hoặc bằng 0 và nhỏ hơn hoặc bằng 999.999.999.

PriceRange

Khoảng giá của các dịch vụ do địa điểm yêu thích cung cấp.

Tên trườngLoạiYêu cầuMô tả
min_priceobject
(Money)

Giá tối thiểu của các dịch vụ mà địa điểm yêu thích cung cấp.
max_priceobject
(Money)

Giá tối đa của các dịch vụ mà địa điểm yêu thích cung cấp.

Tiền

Biểu thị số tiền kèm theo loại đơn vị tiền tệ.

Tên trườngLoạiYêu cầuMô tả
currency_codechuỗi

Mã tiền tệ gồm 3 chữ cái được xác định trong ISO 4217.
unitssố

Đơn vị nguyên của số tiền. Ví dụ: nếu currencyCode là "USD", thì 1 đơn vị là 1 đô la Mỹ.
nanossố

Số đơn vị nano (10^-9) của số tiền. Giá trị phải nằm trong khoảng từ -999.999.999 đến +999.999.999, kể cả hai số này. Nếu units là số dương, thì nanos phải là số dương hoặc bằng 0. Nếu units bằng 0, thì nanos có thể là số dương, số 0 hoặc số âm. Nếu units là số âm, thì nanos phải là số âm hoặc bằng 0. Ví dụ: -1,75 USD được biểu thị là units=-1 và nanos=-750.000.000.

BrandLandingPages

Trang đích thương hiệu được bản địa hoá cho một Địa điểm yêu thích (POI).

Tên trườngLoạiYêu cầuMô tả
brand_idchuỗi

Bắt buộc

Bắt buộc. Thương hiệu áp dụng cấu hình này.
localized_landing_pagesmảng đối tượng
(LocalizedLandingPage)

Trang đích được bản địa hoá. Giá trị của các trường url và ngôn ngữ phải là duy nhất trên tất cả các trang đích được bản địa hoá.
default_urlchuỗi

Bắt buộc

Bắt buộc. URL trang đích mặc định được sử dụng khi không có trang đích nào được bản địa hoá có trang đích phù hợp với ngôn ngữ của người dùng.

LocalizedLandingPage

Trang đích được bản địa hoá cho Địa điểm yêu thích (POI).

Tên trườngLoạiYêu cầuMô tả
urlchuỗi

URL của trang đích. Độ dài tối đa: 2.000.
localesmảng chuỗi

Giới hạn trang này cho những người dùng có ngôn ngữ ưu tiên được chỉ định. Phải chứa thẻ ngôn ngữ, chẳng hạn như "en", "en-US" hoặc "sr-Latn".

Danh mục

Biểu thị danh mục của địa điểm yêu thích. Trường này phải khớp với trường additional_data oneof bên dưới.

TênMô tả
UNKNOWN_CATEGORY
HOTEL
LOCAL

DayOfWeek

Biểu thị một ngày trong tuần.

TênMô tả
DAY_OF_WEEK_UNSPECIFIEDNgày trong tuần không được chỉ định.
MONDAYThứ Hai
TUESDAYTuesday (thứ Ba)
WEDNESDAYWednesday (thứ Tư)
THURSDAYThursday (thứ Năm)
FRIDAYFriday (thứ Sáu)
SATURDAYSaturday (thứ Bảy)
SUNDAYChủ Nhật

additional_data

Bắt buộc. Các trường dành riêng cho danh mục. Tên này phải khớp với trường category ở trên.

Tên trườngLoạiYêu cầuMô tả
hotel_dataobject
(HotelData)

Loại trừ lẫn nhau với local_data

Các trường dành riêng cho khách sạn.
local_dataobject
(LocalData)

Không dùng được với hotel_data

Các trường dành riêng cho địa phương.

địa chỉ

Bắt buộc. Địa chỉ của một vị trí.

Tên trườngLoạiYêu cầuMô tả
addressobject
(PostalAddress)

Địa chỉ bưu chính của vị trí.

Định nghĩa

Định nghĩa VssPoiFeed

// Represents a Point of Interest (POI) data feed provided by a partner.
export message VssPoiFeed {
  // The POIs in the feed.
  repeated VssPoi data = 1;
}

Định nghĩa 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;
  }

}

Định nghĩa văn bản

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

Định nghĩa về 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;

  }
}

Định nghĩa 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;
}

Độ nét hình ảnh

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

Định nghĩa LocalData

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

Định nghĩa BrandLandingPages

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

Mẫu

Nguồn cấp dữ liệu địa điểm yêu thích

Tên tệp: 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"
          }
        ]
      }
    }
  ]
}

Nguồn cấp dữ liệu địa điểm yêu thích đa ngôn ngữ

Tên tệp: 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"
          }
        ]
      }
    }
  ]
}