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