이 페이지에서는 관심 장소 (POI) 피드의 기술 사양을 자세히 설명합니다. 여기에는 필수 필드 요약, 포괄적인 스키마 정의, 구현을 안내하는 JSON 샘플이 포함되어 있습니다.
피드 사양
이 섹션에서는 관심 장소 피드의 요구사항과 정의를 설명합니다.
필드 요구사항
| 필드 이름 | 요구사항 | 설명 |
|---|---|---|
| poi_id | 필수 | 관심 장소 (숙박 시설)를 식별하는 파트너가 생성한 문자열입니다. |
| 이름 | 필수 | 관심 장소의 이름입니다. 이 이름은 애그리게이터 단위에서 속성의 표시 이름으로 사용됩니다. |
| 전화 | 참고사항 | 국가 및 지역 번호를 포함한 관심 장소의 연락처 전화번호입니다(예: +14567891234). |
| URL | 참고사항 | 관심 장소의 공개 웹사이트 URL입니다. 참고: 이 정보는 일치 목적으로만 사용되며 표시되지 않습니다. |
| 위치 | 필수 (주소) 권장 (위도/경도) |
관심 장소의 위치입니다. 필수: 숙박 시설과 올바르게 일치시키려면 주소 및 관련 입력란이 필요합니다. 선택사항: 위도 및 경도 제공된 경우 Google은 애그리게이터 단위 지도에 숙박 시설 핀을 표시할 때 위도/경도를 사용합니다. |
| 이미지 | 필수 (이미지 1개) 권장 (여러 개) |
관심 장소의 이미지입니다. 이미지는 숙박 시설을 표시하는 데 중요한 역할을 합니다. 이미지를 1개 이상 추가하는 것이 좋습니다. 이미지는 최대 5개까지 제공할 수 있습니다. 여러 개가 제공되면 제공된 순서대로 사용됩니다 (이미지를 사용할 수 없는 경우). 이미지가 Google의 세이프서치 정책을 위반하지 않는지 확인하기 위해 검토가 진행됩니다. |
| 평가 | 추천 | 숙박 시설의 평균 평점입니다. |
| num_ratings | 추천 | rating 필드의 평점 수입니다. |
| rating_scale | 참고사항 | rating 필드에 사용되는 평가 척도입니다. 최대 평점이 5이면 rating_scale은 5입니다. |
| 카테고리 | 참고사항 | 속성의 카테고리를 나타냅니다. |
| hotel_data | 참고사항 | 호텔 관련 필드입니다. 자세한 내용은 HotelData 정의를 참고하세요. |
| hotel_star_class | 추천 | 공식 호텔 등급 별표 값입니다. 이 값은 0에서 5 사이의 정수여야 합니다. 시스템에서 별 반 개 또는 소수점 값 (예: 3.5)을 사용하는 경우 정수 (3)로 내림합니다. 별 등급을 사용할 수 없거나, 알 수 없거나, 지정되지 않은 경우 0 값을 제공하세요. 0으로 설정하면 사용자 UI에 호텔 성급이 표시되지 않습니다. |
| brand_ids | 참고사항 | 이 호텔을 표시할 수 있는 브랜드입니다. 이 필드가 비어 있으면 피드와 연결된 모든 브랜드에 호텔이 표시될 수 있습니다. |
| 설명 | 참고사항 | 속성에 대한 자세한 설명입니다. |
| display_address | 참고사항 | UI에 표시되는 주소입니다. |
이미지 가이드라인
피드에 추가되는 모든 이미지는 다음 가이드라인을 따라야 합니다.
- 형식: JPEG, PNG 또는 WebP여야 합니다.
- 최대 파일 크기: 이미지당 30MB 미만
- 최대 크기: 총 7,500만 픽셀 미만 (너비 x 높이 < 75,000,000)
- URL 유형: 이미지 확장 소재로 연결되는 직접 경로 (예: .jpg로 끝남)
- 권한: 호스팅 서버와
robots.txt파일이Googlebot및Googlebot-Image사용자 에이전트에 대한 액세스를 허용하고 이미지 디렉터리를 차단하지 않는지 확인합니다.
다국어 지원
관심 장소 피드는 특정 필드에 현지화된 콘텐츠를 제공하는 것을 지원합니다. 다음 필드는 Text 유형이며 현지화를 지원합니다.
namedescriptiondisplay_address
여러 언어로 콘텐츠를 제공하려면 필드에 default_locale를 지정하고 localizations 목록에 현지화된 문자열을 제공해야 합니다.
단일 관심 장소 항목에 숙박 시설의 모든 현지화를 제공합니다. 여러 언어 JSON 파일 간에 단일 속성을 분할하지 마세요.
예:
"name": {
"localizations": [
{
"locale": "en",
"text": "Banana Hotel"
},
{
"locale": "es",
"text": "Hotel Plátano"
}
],
"default_locale": "en"
}
파일 패키징 가이드라인
성공적인 처리를 위해 다음 패키징 요구사항을 준수하세요.
- 단일 집계 JSON 보관 파일 (필수): 모든 숙박 시설 레코드를 단일 JSON 파일로 결합합니다. 단일 GZIP 보관 파일로 압축하여 업로드하는 것이 좋습니다.
- 안티패턴 경고: 동일한 보관 파일에서 숙박 시설당 하나의 파일을 사용하거나 국가별로 구분된 여러 파일을 사용하지 마세요. 이 접근 방식은 지원되지 않으며 추출 실패를 유발합니다.
정의
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; }
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; } }
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; }
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; }
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 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; }
샘플
관심 장소 피드
파일명: 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"] } } ] }
다국어 관심 장소 피드
파일명: 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"] } } ] }