Auf dieser Seite finden Sie die technischen Daten für den POI-Feed (Point of Interest). Sie enthält eine Zusammenfassung der Pflichtfelder, umfassende Schemadefinitionen und ein JSON-Beispiel, das Sie bei der Implementierung unterstützt.
Feedspezifikationen
In diesem Abschnitt werden die Anforderungen und Definitionen für den POI-Feed beschrieben.
Anforderungen an Felder
| Feldname | Anforderung | Beschreibung |
|---|---|---|
| poi_id | Erforderlich | Ein vom Partner generierter String, der einen POI (Unterkunft) identifiziert. |
| name | Erforderlich | Der Name des POI. Dieser Name wird als Anzeigename der Unterkunft in der Aggregator-Bereich verwendet. |
| Telefon | Optional | Die Telefonnummer des POI, einschließlich Landes- und Ortsvorwahl, z. B. +14567891234. |
| URL | Optional | Die URL der öffentlichen Website des POI. Hinweis: Diese Angabe wird nur für den Abgleich verwendet, nicht für die Anzeige. |
| Standort | Erforderlich (Adresse) Von Vorteil (Breiten-/Längengrad) |
Der Standort des POI. Erforderlich: Die Adresse und die zugehörigen Felder sind erforderlich, um die Unterkunft richtig zuzuordnen. Optional: Der Breiten- und Längengrad. Falls angegeben, verwendet Google die Breiten- und Längengrade für die Anzeige von Unterkunftspins in der Karte Ihres Aggregator-Bereichs. |
| Bilder | Erforderlich (ein Bild) Von Vorteil (mehrere Bilder) |
Bilder des POI. Bilder sind für die Darstellung von Unterkünften wichtig. Wir empfehlen dringend, mindestens ein Bild hinzuzufügen. Sie können bis zu fünf Bilder angeben. Wenn mehrere Bilder angegeben werden, werden sie in der Reihenfolge verwendet, in der sie angegeben wurden (falls ein Bild nicht verwendet werden kann). Die Bilder werden überprüft, um sicherzustellen, dass sie nicht gegen die SafeSearch-Richtlinien von Google verstoßen. |
| rating | Empfohlen | Durchschnittliche Bewertung der Unterkunft. |
| num_ratings | Empfohlen | Die Anzahl der Bewertungen, die zum Feld „rating“ beigetragen haben. |
| rating_scale | Optional | Die Bewertungsskala, die für das Feld rating verwendet wird. Wenn die maximale Bewertung 5 ist, ist rating_scale 5. |
| Kategorie | Optional | Stellt die Kategorie der Unterkunft dar. |
| hotel_data | Optional | Hotelspezifische Felder. Weitere Informationen finden Sie unter HotelData-Definition. |
| hotel_star_class | Empfohlen | Die offizielle Hotelkategorie in Sternen. Dieser Wert muss eine Ganzzahl zwischen 0 und 5 sein. Wenn Ihr System halbe Sterne oder Dezimalwerte verwendet (z. B. 3.5), runden Sie auf eine Ganzzahl ab (3). Geben Sie den Wert „0“ an, wenn die Sternebewertung nicht verfügbar, unbekannt oder nicht angegeben ist. Wenn der Wert auf „0“ festgelegt ist, wird Nutzern auf der Benutzeroberfläche keine Hotelsterneklasse angezeigt. |
| brand_ids | Optional | Die Marken, die dieses Hotel präsentieren können. Wenn dieses Feld leer ist, kann das Hotel unter einer der mit dem Feed verknüpften Marken angezeigt werden. |
| Beschreibung | Optional | Eine detaillierte Beschreibung der Unterkunft. |
| display_address | Optional | Die in der Benutzeroberfläche angezeigte Adresse. |
Richtlinien für Bilder
Alle Bilder, die dem Feed hinzugefügt werden, müssen den folgenden Richtlinien entsprechen:
- Format: JPEG, PNG oder WebP.
- Maximale Dateigröße: unter 30 MB pro Bild
- Maximale Abmessungen: insgesamt weniger als 75 Megapixel (Breite × Höhe < 75.000.000).
- URL-Typ: Direkter Pfad zum Bild-Asset (z.B. mit der Endung .jpg).
- Berechtigungen: Achten Sie darauf, dass der Hostingserver und die
robots.txt-Datei den Zugriff auf die User-AgentsGooglebotundGooglebot-Imageerlauben und die Bildverzeichnisse nicht blockieren.
Mehrsprachiger Support
Der Feed für POIs unterstützt die Bereitstellung lokalisierter Inhalte für bestimmte Felder. Die folgenden Felder sind vom Typ Text und unterstützen die Lokalisierung:
namedescriptiondisplay_address
Wenn du Inhalte in mehreren Sprachen bereitstellen möchtest, musst du im Feld einen default_locale angeben und die lokalisierten Strings in der Liste localizations bereitstellen.
Geben Sie alle Lokalisierungen für eine Unterkunft in einem einzigen POI-Eintrag an. Teilen Sie eine einzelne Property nicht auf mehrere JSON-Dateien für verschiedene Sprachen auf.
Beispiel:
"name": {
"localizations": [
{
"locale": "en",
"text": "Banana Hotel"
},
{
"locale": "es",
"text": "Hotel Plátano"
}
],
"default_locale": "en"
}
Richtlinien für das Packen von Dateien
Damit die Aufnahme erfolgreich ist, müssen die folgenden Verpackungsanforderungen erfüllt sein:
- Einzelnes aggregiertes JSON-Archiv (erforderlich): Kombinieren Sie alle Immobilieneinträge in einer einzigen JSON-Datei. Wir empfehlen, sie in ein einzelnes GZIP-Archiv zu komprimieren und hochzuladen.
- Warnung zu Anti-Pattern: Verwenden Sie nicht eine Datei pro Unterkunft oder mehrere Dateien, die nach Land getrennt sind, im selben Archiv. Dieser Ansatz wird nicht unterstützt und führt zu Extraktionsfehlern.
Definitionen
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-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 { 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; } }
Text – Definition
// 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 – Definition
// 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 – Definition
// 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; }
Bilddefinition
// 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; }
HotelData-Definition
// 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 0 and 5. A rating of 0 // should be used if a rating is unavailable or not specified. When // set to 0, no star class will be displayed on the UI for users. int32 hotel_star_class = 1; // Deprecated. Use `brand_landing_pages` instead. // // 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, deprecated = true]; // The brand landing pages. repeated BrandLandingPages brand_landing_pages = 3; }
Beispiele
POI-Feed
Dateiname: 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"] } } ] }
Mehrsprachiger POI-Feed
Dateiname: 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"] } } ] }