Questa pagina descrive in dettaglio le specifiche tecniche del feed dei punti d'interesse (PDI). Include un riepilogo dei campi obbligatori, definizioni complete dello schema e un esempio JSON per guidare l'implementazione.
Specifiche del feed
Questa sezione descrive i requisiti e le definizioni del feed dei PDI.
Requisiti dei campi
| Nome campo | Requisito | Descrizione |
|---|---|---|
| poi_id | Obbligatorio | Una stringa generata dal partner che identifica un punto d'interesse (proprietà). |
| name | Obbligatorio | Il nome del PDI. Questo nome verrà utilizzato come nome visualizzato della proprietà nell'unità dell'aggregatore. |
| telephone | Consigliabile | Il numero di telefono di contatto del PDI, inclusi i codici paese e area, ad esempio +14567891234. |
url |
Consigliabile | L'URL del sito web pubblico del PDI. Nota: questo verrà utilizzato solo a fini di corrispondenza, non per la visualizzazione. |
| location | Obbligatorio (indirizzo) Consigliabile (latitudine/longitudine) |
La località del PDI. Obbligatorio: l'indirizzo e i campi associati sono obbligatori per trovare la corrispondenza corretta con la proprietà. Consigliabile: la latitudine e la longitudine. Se fornito, Google utilizzerà la latitudine/longitudine nella visualizzazione dei segnaposto delle proprietà nella mappa dell'unità dell'aggregatore. |
| images | Altamente consigliato (una immagine) Consigliabile (più immagini) |
Immagini del PDI. Le immagini saranno importanti per la visualizzazione delle proprietà. Ti consigliamo vivamente di aggiungere almeno un'immagine. Puoi fornire più immagini fino a un massimo di 5. Se ne vengono fornite più di una, verranno utilizzate nell'ordine in cui sono state fornite (nel caso in cui un'immagine non sia utilizzabile). Le immagini verranno esaminate per verificare che non violino le norme di Ricerca sicura di Google. |
| rating | Consigliabile | Punteggio medio della proprietà. |
| num_ratings | Consigliabile | Il numero di valutazioni che contribuiscono al campo rating. |
| rating_scale | Consigliabile | La scala di valutazione utilizzata per il campo rating. Se la valutazione massima è 5, allora rating_scale è 5. |
| category | Consigliabile | Rappresenta la categoria della proprietà. |
| hotel_data | Consigliabile | Campi specifici dell'hotel. Per i dettagli, consulta la definizione di HotelData. |
| hotel_star_class | Consigliabile | Il valore ufficiale delle stelle della categoria hotel. Questo valore deve essere un numero intero compreso tra 1 e 5. |
| brand_ids | Consigliabile | I brand che possono mostrare questo hotel. Se questo campo è vuoto, l'hotel può essere visualizzato in uno qualsiasi dei brand associati al feed. |
| description | Consigliabile | Una descrizione dettagliata della proprietà. |
| display_address | Consigliabile | L'indirizzo visualizzato nell'interfaccia utente. |
Linee guida per le immagini
Tutte le immagini aggiunte al feed devono rispettare le seguenti linee guida:
- Formato: deve essere JPEG, PNG o WebP.
- Dimensione massima del file: meno di 30 MB per immagine.
- Dimensioni massime: meno di 75 megapixel totali (larghezza x altezza < 75.000.000).
- Tipo di URL: percorso diretto all'asset immagine (ad es. termina con .jpg).
- Autorizzazioni: assicurati che il server di hosting consenta l'accesso a Googlebot o ai crawler e che non ci siano file robots.txt che bloccano le directory delle immagini.
Supporto multilingue
Il feed dei punti d'interesse supporta la fornitura di contenuti localizzati per campi specifici. I seguenti campi sono di tipo Text e supportano la localizzazione:
namedescriptiondisplay_address
Per fornire contenuti in più lingue, devi specificare un default_locale nel campo e fornire le stringhe localizzate nell'elenco localizations.
Fornisci tutte le localizzazioni per una proprietà in una singola voce PDI. Non dividere una singola proprietà tra più file JSON di lingua.
Esempio:
"name": {
"localizations": [
{
"locale": "en",
"text": "Banana Hotel"
},
{
"locale": "es",
"text": "Hotel Plátano"
}
],
"default_locale": "en"
}
Linee guida per la creazione di pacchetti di file
Per garantire l'inserimento corretto, rispetta i seguenti requisiti di creazione di pacchetti:
- Archivio JSON aggregato singolo (obbligatorio): combina tutti i record delle proprietà in un unico file JSON. Ti consigliamo di comprimerlo in un unico archivio GZIP e di caricarlo.
- Avviso anti-pattern: non utilizzare un file per proprietà o più file separati per paese nello stesso archivio. Questo approccio non è supportato e causerà errori di estrazione.
Definizioni
Definizione di 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; }
Definizione di 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 { UNKNOWN_CATEGORY = 0; HOTEL = 1; 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 { // Hotel specific fields. HotelData hotel_data = 10; // Local specific fields. LocalData local_data = 15; } }
Definizione di Text
// 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; }
Definizione di 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; } }
Definizione di 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; }
Definizione di Image
// 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; }
Definizione di HotelData
// Hotel specific feed data. message HotelData { // The official hotel class star value. // Can be used in a label like "5-star hotel." // This value is expected to be an integer between 1 and 5. int32 hotel_star_class = 1; // The brands that can display this hotel. // If this field is empty, the hotel can be displayed under any of the // brands associated with the feed. repeated string brand_ids = 2 [(datapol.semantic_type) = ST_PARTNER_ID]; }
Esempi
Feed dei punti d'interesse
Nome file: poi_1707240000.json
{ "data": [ { "poi_id": "hotel_banana", "name": { "localizations": [ { "locale": "en", "text": "Banana Hotel" } ], "default_locale": "en" }, "telephone": "+16195550100", "url": "https://www.example-banana-hotel.com", "location": { "latitude": 32.7157, "longitude": -117.1611, "address": { "country": "US", "locality": "San Diego", "region": "CA", "postal_code": "92101", "street_address": "2845 W 7th St" } }, "images": [ { "url": "https://www.example.com/banana_hotel.jpg", "alt_text": { "localizations": [ { "locale": "en", "text": "Banana Hotel Exterior" } ] } } ], "rating": 4.5, "category": "HOTEL", "hotel_data": { "hotel_star_class": 4, "brand_ids": ["brand_a", "brand_b"] } }, { "poi_id": "hotel_kiwi", "name": { "localizations": [ { "locale": "en", "text": "Kiwi Hotel" } ], "default_locale": "en" }, "telephone": "+41445550100", "url": "https://www.example-kiwi-hotel.com", "location": { "latitude": 47.3769, "longitude": 8.5417, "address": { "country": "CH", "locality": "Zurich", "postal_code": "8001", "street_address": "Bahnhofstrasse 10" } }, "images": [ { "url": "https://www.example.com/kiwi_hotel.jpg", "alt_text": { "localizations": [ { "locale": "en", "text": "Kiwi Hotel Lobby" } ] } } ], "rating": 4.0, "category": "HOTEL", "hotel_data": { "hotel_star_class": 3, "brand_ids": ["brand_c"] } }, { "poi_id": "hotel_croissant", "name": { "localizations": [ { "locale": "en", "text": "Croissant Hotel" } ], "default_locale": "en" }, "telephone": "+41445550200", "url": "https://www.example-croissant-hotel.com", "location": { "latitude": 47.3686, "longitude": 8.5392, "address": { "country": "CH", "locality": "Zurich", "postal_code": "8002", "street_address": "Paradeplatz 1" } }, "images": [ { "url": "https://www.example.com/croissant_hotel.jpg", "alt_text": { "localizations": [ { "locale": "en", "text": "Croissant Hotel View" } ] } } ], "rating": 5.0, "category": "HOTEL", "hotel_data": { "hotel_star_class": 5 } }, { "poi_id": "hotel_tiburon", "name": { "localizations": [ { "locale": "en", "text": "Hotel Tiburon" } ], "default_locale": "en" }, "telephone": "+15105550100", "url": "https://www.example-tiburon-hotel.com", "location": { "latitude": 37.7652, "longitude": -122.2416, "address": { "country": "US", "locality": "Alameda", "region": "CA", "postal_code": "94501", "street_address": "1100 Atlantic Ave" } }, "images": [ { "url": "https://www.example.com/tiburon_hotel.jpg", "alt_text": { "localizations": [ { "locale": "en", "text": "Hotel Tiburon Pool" } ] } } ], "rating": 4.2, "category": "HOTEL", "hotel_data": { "hotel_star_class": 5, "brand_ids": ["brand_a"] } } ] }
Feed dei PDI multilingue
Nome file: poi_multilingual.json
{ "data": [ { "poi_id": "hotel_banana_multilingual", "name": { "localizations": [ { "locale": "en", "text": "Banana Hotel" }, { "locale": "es", "text": "Hotel Plátano" }, { "locale": "fr", "text": "Hôtel Banane" } ], "default_locale": "en" }, "description": { "localizations": [ { "locale": "en", "text": "A beautiful hotel shaped like a banana." }, { "locale": "es", "text": "Un hermoso hotel con forma de plátano." }, { "locale": "fr", "text": "Un bel hôtel en forme de banane." } ], "default_locale": "en" }, "display_address": { "localizations": [ { "locale": "en", "text": "123 Banana Way, Fruit City, CA 90000" }, { "locale": "es", "text": "123 Vía Plátano, Ciudad Fruta, CA 90000" } ], "default_locale": "en" }, "telephone": "+16195550100", "url": "https://www.example-banana-hotel.com", "location": { "latitude": 32.7157, "longitude": -117.1611, "address": { "country": "US", "locality": "Fruit City", "region": "CA", "postal_code": "90000", "street_address": "123 Banana Way" } }, "images": [ { "url": "https://www.example.com/banana_hotel.jpg", "alt_text": { "localizations": [ { "locale": "en", "text": "Banana Hotel Exterior" }, { "locale": "es", "text": "Exterior del Hotel Plátano" } ] } } ], "rating": 4.5, "category": "HOTEL", "hotel_data": { "hotel_star_class": 4, "brand_ids": ["brand_mango", "brand_apricot"] } } ] }