ÖY feed'leri oluşturma ve yükleme
ÖY feed'leri oluşturup yüklerken aşağıdaki talimatları uygulayın:
- Önemli yer verileri dosyaları için Önemli yer feed'i bölümünde açıklanan spesifikasyona uyun. Her yükleme için benzersiz ÖYV verisi dosya adları kullanmanızı öneririz. Dosya adına zaman damgası ekleyin. Örneğin,
POI_1633621547.json. - Feed'leri yerel ÖY SFTP sunucusuna günlük olarak tam yenileme şeklinde yükleyin.
- SFTP sunucusu ayrıntılarını İş Ortağı Portalı'nın Yapılandırma > Feed'ler bölümünde bulabilirsiniz.
- Feed alımı durumunu İş Ortağı Portalı'nın Alım > Geçmiş bölümünde görüntüleyin.
Feed Spesifikasyonları
Alan koşulları
VssPoi
Tek bir önemli yer (ÖY) varlığını (ö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 yalnızca eşleştirme amacıyla kullanılır, görüntüleme amacıyla kullanılmaz. | |
location | object(GeoCoordinates) | Zorunlu | Zorunlu. ÖY'nin konumu. |
display_address | object(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 puan sayısı. | |
rating_scale | sayı | rating alanı için kullanılan derecelendirme ölçeği. Maksimum puan 5 ise rating_scale 5 olur. | |
category | enum(Category) | Zorunlu | Zorunlu. ÖY'nin kategorisini gösterir. |
description | object(Text) | Önemli yerin 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
Enlem, boylam ve adres dahil olmak üzere bir konumun 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. Yerleşim yeri/ş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 gösterir.
| 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 | object(Text) | Erişilebilirlik için kullanılacak alternatif metin. |
HotelData
Otele özel 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 1 ile 5 arasında bir tam sayı olması beklenir. | |
brand_ids | dize dizisi | Bu oteli gösterebilecek markalar. Bu alan boşsa otel, feed'le ilişkili markaların herhangi birinin altında gösterilebilir. |
LocalData
İşletmeye özgü feed verileri.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
business_hours | object(BusinessHours) | Kuruluşun normal çalışma saatleri. | |
price_range | object(PriceRange) | Tesisin sunduğu hizmetlerin fiyat aralığı. | |
establishment_category | object(Text) | Kuruluşun türü. | |
brand_landing_pages | nesne dizisi(BrandLandingPages) | Markanın açılış sayfaları. |
BusinessHours
Bu konumun açık olduğu zaman aralıklarını gösterir. [TimeRange][madden.vss_poi_feed.TimeRange] örnekleri 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'dan Pazar günleri 02:00'a 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'nün açık olduğu zaman aralığını gösterir. Belirtilen açılış günü/saati ile başlar ve belirtilen kapanış günü/saati ile 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 açık olduğu gün. | |
open_time | object(TimeOfDay) | Zaman aralığının başlangıç zamanı. | |
close_day | enum(DayOfWeek) | Zaman aralığının kapanış günü. | |
close_time | object(TimeOfDay) | Zaman aralığının kapanış zamanı. |
TimeOfDay
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
hours | sayı | Bir günün saatleri (24 saatlik biçimde). 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 dakikası. 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 | object(Money) | ÖY'nin sunduğu hizmetlerin minimum fiyatı. | |
max_price | object(Money) | ÖY'nün sunduğu hizmetlerin maksimum fiyatı. |
Para
Para birimi türüyle birlikte bir para tutarını gösterir.
| 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 (değerler 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 ABD doları 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 | Bu yapılandırmanın uygulandığı marka. | |
localized_landing_pages | nesne dizisi(LocalizedLandingPage) | Yerelleştirilmiş açılış sayfaları. URL ve yerel ayar alan değerleri, yerelleştirilmiş tüm açılış sayfalarında benzersiz olmalıdır. | |
default_url | dize | 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 gösterir.
Aşağıdaki additional_data oneof alanı ile 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 | object(HotelData) |
| Otele özgü alanlar. |
local_data | object(LocalData) |
| Yerel olarak belirli alanlar. |
adresler
Zorunlu. Bir konumun adresi.
| Alan Adı | Tür | Gereksinim | Açıklama |
|---|---|---|---|
address | object(PostalAddress) | Konumun posta adresi. |
- 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 doğrudan giden yol (ör. .jpg ile biter).
- İzinler: Barındırma sunucusunun Googlebot veya tarayıcılara erişime izin verdiğinden ve resim dizinlerini engelleyen bir robots.txt dosyası olmadığından emin olun.
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; // The brand landing pages. repeated BrandLandingPages brand_landing_pages = 4; }
BrandLandingPages Tanımı
// 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; }
Örnekler
Önemli Yer Feed'i
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" }, { "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" } ] } } ] }
Ç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" }, { "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" } ] } } ] }