مقدمه
یک درخواست جستجوی نزدیک (جدید) یک یا چند نوع مکان را میگیرد و لیستی از مکانهای منطبق در منطقه مشخص شده را برمیگرداند. یک ماسک فیلد که یک یا چند نوع داده را مشخص میکند، مورد نیاز است. جستجوی نزدیک (جدید) فقط از درخواستهای POST پشتیبانی میکند.
مرورگر APIها به شما امکان میدهد درخواستهای زنده ارسال کنید تا بتوانید با API و گزینههای API آشنا شوید:
برای دیدن نتایج جستجوی نزدیک (جدید) که روی نقشه نمایش داده میشود ، نسخه آزمایشی تعاملی را امتحان کنید.
درخواستهای جستجوی نزدیک (جدید)
یک درخواست جستجوی نزدیک (جدید) یک درخواست HTTP POST به یک URL به شکل زیر است:
https://places.googleapis.com/v1/places:searchNearby
تمام پارامترها را در بدنه درخواست JSON یا در هدرها به عنوان بخشی از درخواست POST ارسال کنید. برای مثال:
curl -X POST -d '{
"includedTypes": ["restaurant"],
"maxResultCount": 10,
"locationRestriction": {
"circle": {
"center": {
"latitude": 37.7937,
"longitude": -122.3965},
"radius": 500.0
}
}
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName" \
https://places.googleapis.com/v1/places:searchNearby
پاسخهای جستجوی نزدیک (جدید)
جستجوی نزدیک (جدید) یک شیء JSON را به عنوان پاسخ برمیگرداند. در پاسخ:
- آرایه
placesشامل تمام مکانهای منطبق است. - هر مکان در آرایه توسط یک شیء
Placeنمایش داده میشود. شیءPlaceحاوی اطلاعات دقیقی در مورد یک مکان واحد است. - فیلدماسک ارسالی در درخواست، لیست فیلدهای برگردانده شده در شیء
Placeرا مشخص میکند.
شیء کامل JSON به شکل زیر است:
{
"places": [
{
object (Place)
}
]
}پارامترهای مورد نیاز
فیلد ماسک
با ایجاد یک ماسک فیلد پاسخ، لیست فیلدهایی را که باید در پاسخ برگردانده شوند، مشخص کنید. ماسک فیلد پاسخ را با استفاده از پارامتر URL
$fieldsیاfieldsیا با استفاده از هدر HTTPX-Goog-FieldMaskبه متد ارسال کنید. هیچ لیست پیشفرضی از فیلدهای برگردانده شده در پاسخ وجود ندارد. اگر ماسک فیلد را حذف کنید، متد خطا برمیگرداند.ماسک کردن فیلد یک روش طراحی خوب برای اطمینان از عدم درخواست دادههای غیرضروری است که به جلوگیری از زمان پردازش غیرضروری و هزینههای صورتحساب کمک میکند.
لیستی از انواع دادههای مکان که با کاما از هم جدا شدهاند را برای برگرداندن مشخص کنید. به عنوان مثال، برای بازیابی نام نمایشی و آدرس مکان.
X-Goog-FieldMask: places.displayName,places.formattedAddress
برای بازیابی همه فیلدها از
*استفاده کنید.X-Goog-FieldMask: *
یک یا چند مورد از فیلدهای زیر را مشخص کنید:
فیلدهای زیر SKU مربوط به Nearby Search Pro را فعال میکنند:
places.accessibilityOptions
places.addressComponents
places.addressDescriptor*
places.adrFormatAddress
places.attributions
places.businessStatus
places.containingPlaces
places.displayName
places.formattedAddress
places.googleMapsLinks
places.googleMapsUri
places.iconBackgroundColor
places.iconMaskBaseUri
places.id
places.location
places.name**
places.movedPlace
places.movedPlaceId
places.photos
places.plusCode
places.postalAddress
places.primaryType
places.primaryTypeDisplayName
places.pureServiceAreaBusiness
places.shortFormattedAddress
places.subDestinations
places.types
places.utcOffsetMinutes
places.viewport
* توصیفگرهای آدرس عموماً برای مشتریان در هند در دسترس هستند و در جاهای دیگر آزمایشی میباشند.
فیلد places.name شامل نام منبع مکان به شکلplaces/ PLACE_IDاست. برای دسترسی به نام متنی مکانplaces.nameplaces.displayNameاستفاده کنید.فیلدهای زیر SKU جستجوی نزدیک سازمانی را فعال میکنند:
places.currentOpeningHours
places.currentSecondaryOpeningHours
places.internationalPhoneNumber
places.nationalPhoneNumber
places.priceLevel
places.priceRange
places.rating
places.regularOpeningHours
places.regularSecondaryOpeningHours
places.userRatingCount
places.websiteUriفیلدهای زیر، جستجوی نزدیک Enterprise + Atmosphere SKU را فعال میکنند:
places.allowsDogs
places.curbsidePickup
places.delivery
places.dineIn
places.editorialSummary
places.evChargeAmenitySummary
places.evChargeOptions
places.fuelOptions
places.generativeSummary
places.goodForChildren
places.goodForGroups
places.goodForWatchingSports
places.liveMusic
places.menuForChildren
places.neighborhoodSummary
places.parkingOptions
places.paymentOptions
places.outdoorSeating
places.reservable
places.restroom
places.reviews
places.reviewSummary
routingSummaries*
places.servesBeer
places.servesBreakfast
places.servesBrunch
places.servesCocktails
places.servesCoffee
places.servesDessert
places.servesDinner
places.servesLunch
places.servesVegetarianFood
places.servesWine
places.takeout
* فقط جستجوی متنی و جستجوی نزدیک
محدودیت مکانی
ناحیه مورد جستجو به صورت یک دایره مشخص شده است که با نقطه مرکز و شعاع بر حسب متر تعریف میشود. شعاع باید بین 0.0 تا 50000.0 باشد. شعاع پیشفرض 0.0 است. شما باید در درخواست خود مقداری بزرگتر از 0.0 برای آن تعیین کنید.
برای مثال:
"locationRestriction": { "circle": { "center": { "latitude": 37.7937, "longitude": -122.3965 }, "radius": 500.0 } }
پارامترهای اختیاری
انواع گنجاندهشده/انواع مستثنیشده، انواع اولیه گنجاندهشده/انواع اولیه مستثنیشده
به شما امکان میدهد لیستی از انواع را از انواع جدول A که برای فیلتر کردن نتایج جستجو استفاده میشوند، مشخص کنید. حداکثر ۵۰ نوع را میتوان در هر دسته محدودیت نوع مشخص کرد.
یک مکان فقط میتواند یک نوع اصلی از انواع جدول A مرتبط با خود داشته باشد. برای مثال، نوع اصلی ممکن است
"mexican_restaurant"یا"steak_house"باشد.includedPrimaryTypesوexcludedPrimaryTypesبرای فیلتر کردن نتایج بر اساس نوع اصلی یک مکان استفاده کنید.یک مکان همچنین میتواند چندین مقدار نوع از انواع جدول A مرتبط با خود داشته باشد. برای مثال، یک رستوران ممکن است انواع زیر را داشته باشد:
"seafood_restaurant"،"restaurant"،"food"،"point_of_interest"،"establishment". ازincludedTypesوexcludedTypesبرای فیلتر کردن نتایج در لیست انواع مرتبط با یک مکان استفاده کنید.وقتی یک نوع اصلی عمومی مانند
"restaurant"یا"hotel"را مشخص میکنید، پاسخ میتواند شامل مکانهایی با نوع اصلی خاصتر از نوع مشخص شده باشد. برای مثال، شما مشخص میکنید که نوع اصلی"restaurant"را شامل شود. در این صورت پاسخ میتواند شامل مکانهایی با نوع اصلی"restaurant"باشد، اما پاسخ همچنین میتواند شامل مکانهایی با نوع اصلی خاصتر مانند"chinese_restaurant"یا"seafood_restaurant"باشد.اگر جستجو با چندین محدودیت نوع مشخص شود، فقط مکانهایی که همه محدودیتها را برآورده میکنند، بازگردانده میشوند. برای مثال، اگر شما
{"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}را مشخص کنید، مکانهای برگردانده شده خدمات مرتبط با"restaurant"را ارائه میدهند اما در درجه اول به عنوان"steak_house"فعالیت نمیکنند.شاملانواع
فهرستی از انواع مکانها از جدول A که با کاما از هم جدا شدهاند تا جستجو شوند. اگر این پارامتر حذف شود، مکانهایی از همه نوع بازگردانده میشوند.
انواع مستثنی
فهرستی از انواع مکانها از جدول A که با ویرگول از هم جدا شدهاند تا از جستجو مستثنی شوند.
اگر هم
includedTypes(مانند"school") و هم نوعهایexcludedTypes(مانند"primary_school") را در درخواست مشخص کنید، پاسخ شامل مکانهایی میشود که به عنوان"school"طبقهبندی شدهاند اما به عنوان"primary_school"طبقهبندی نشدهاند. پاسخ شامل مکانهایی است که حداقل با یکی از نوعهایincludedTypesمطابقت دارند و هیچکدام ازexcludedTypesشامل نمیشوند.اگر انواع متناقضی وجود داشته باشد، مانند نوعی که هم در
includedTypesو همexcludedTypesظاهر میشود، خطایINVALID_REQUESTبرگردانده میشود.شامل انواع اولیه
فهرستی از انواع مکانهای اصلی از جدول A که با ویرگول از هم جدا شدهاند تا در جستجو لحاظ شوند.
انواع اولیه مستثنی شده
فهرستی از انواع مکانهای اصلی از جدول A که با ویرگول از هم جدا شدهاند تا از جستجو مستثنی شوند.
اگر انواع اصلی متناقضی وجود داشته باشد، مانند نوعی که هم در
includedPrimaryTypesو همexcludedPrimaryTypesظاهر میشود، خطایINVALID_ARGUMENTبرگردانده میشود.زبانکد
زبانی که نتایج با آن برگردانده میشوند.
- فهرست زبانهای پشتیبانیشده را ببینید. گوگل اغلب زبانهای پشتیبانیشده را بهروزرسانی میکند، بنابراین این فهرست ممکن است جامع نباشد.
- اگر
languageCodeارائه نشود، API به طور پیشفرضenرا در نظر میگیرد. اگر کد زبان نامعتبری را مشخص کنید، API خطایINVALID_ARGUMENTرا برمیگرداند. - این API تمام تلاش خود را میکند تا آدرسی را ارائه دهد که هم برای کاربر و هم برای افراد محلی قابل خواندن باشد. برای دستیابی به این هدف، آدرسهای خیابان را به زبان محلی برمیگرداند و در صورت لزوم با رعایت زبان ترجیحی، آنها را به اسکریپتی که توسط کاربر قابل خواندن باشد، تبدیل میکند. تمام آدرسهای دیگر به زبان ترجیحی برگردانده میشوند. اجزای آدرس همگی به همان زبانی برگردانده میشوند که از اولین جزء انتخاب شده است.
- اگر نامی در زبان مورد نظر موجود نباشد، API از نزدیکترین مورد منطبق استفاده میکند.
- زبان ترجیحی تأثیر کمی بر مجموعه نتایجی که API برای برگرداندن انتخاب میکند و ترتیب برگرداندن آنها دارد. کدگذار جغرافیایی بسته به زبان، اختصارات را به طور متفاوتی تفسیر میکند، مانند اختصارات مربوط به انواع خیابان یا مترادفهایی که ممکن است در یک زبان معتبر باشند اما در زبان دیگر معتبر نباشند.
حداکثر تعداد نتیجه
حداکثر تعداد نتایج مکانی را که باید برگردانده شود، مشخص میکند. باید بین ۱ تا ۲۰ (پیشفرض) باشد.
رتبه بندی
نوع رتبهبندی مورد استفاده. اگر این پارامتر حذف شود، نتایج بر اساس محبوبیت رتبهبندی میشوند. این میتواند یکی از موارد زیر باشد:
-
POPULARITY(پیشفرض) نتایج را بر اساس محبوبیت آنها مرتب میکند. - تابع
DISTANCEنتایج را بر اساس فاصلهشان از مکان مشخصشده به صورت صعودی مرتب میکند.
-
کد منطقه
کد منطقهای مورد استفاده برای قالببندی پاسخ، که به عنوان یک مقدار کد CLDR دو کاراکتری مشخص شده است. مقدار پیشفرضی وجود ندارد.
اگر نام کشور فیلد
formattedAddressدر پاسخ باregionCodeمطابقت داشته باشد، کد کشور ازformattedAddressحذف میشود. این پارامتر هیچ تاثیری برadrFormatAddressکه همیشه شامل نام کشور است، یاshortFormattedAddressکه هرگز شامل آن نمیشود، ندارد.بیشتر کدهای CLDR با کدهای ISO 3166-1 یکسان هستند، به جز برخی استثنائات قابل توجه. برای مثال، ccTLD بریتانیا "uk" (.co.uk) است در حالی که کد ISO 3166-1 آن "gb" است (از نظر فنی برای موجودیت "پادشاهی متحده بریتانیای کبیر و ایرلند شمالی"). این پارامتر میتواند بر اساس قانون مربوطه بر نتایج تأثیر بگذارد.
مثالهای جستجوی نزدیک (جدید)
مکانهایی از یک نوع پیدا کنید
مثال زیر یک درخواست جستجوی نزدیک (جدید) برای نمایش نام تمام رستورانها در شعاع ۵۰۰ متری، که با circle تعریف شده است، نشان میدهد:
curl -X POST -d '{
"includedTypes": ["restaurant"],
"maxResultCount": 10,
"locationRestriction": {
"circle": {
"center": {
"latitude": 37.7937,
"longitude": -122.3965},
"radius": 500.0
}
}
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName" \
https://places.googleapis.com/v1/places:searchNearby
توجه داشته باشید که هدر X-Goog-FieldMask مشخص میکند که پاسخ شامل فیلدهای داده زیر است: places.displayName . در این صورت، پاسخ به شکل زیر خواهد بود:
{ "places": [ { "displayName": { "text": "La Mar Cocina Peruana", "languageCode": "en" } }, { "displayName": { "text": "Kokkari Estiatorio", "languageCode": "en" } }, { "displayName": { "text": "Harborview Restaurant & Bar", "languageCode": "en" } }, ... }
برای برگرداندن اطلاعات بیشتر، انواع داده بیشتری را به ماسک فیلد اضافه کنید. برای مثال، places.formattedAddress,places.types,places.websiteUri را اضافه کنید تا آدرس، نوع و آدرس وب رستوران در پاسخ گنجانده شود:
curl -X POST -d '{
"includedTypes": ["restaurant"],
"maxResultCount": 10,
"locationRestriction": {
"circle": {
"center": {
"latitude": 37.7937,
"longitude": -122.3965},
"radius": 500.0
}
}
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName,places.formattedAddress,places.types,places.websiteUri" \
https://places.googleapis.com/v1/places:searchNearby
پاسخ اکنون به این شکل است:
{ "places": [ { "types": [ "seafood_restaurant", "restaurant", "food", "point_of_interest", "establishment" ], "formattedAddress": "PIER 1 1/2 The Embarcadero N, San Francisco, CA 94105, USA", "websiteUri": "http://lamarsf.com/", "displayName": { "text": "La Mar Cocina Peruana", "languageCode": "en" } }, { "types": [ "greek_restaurant", "meal_takeaway", "restaurant", "food", "point_of_interest", "establishment" ], "formattedAddress": "200 Jackson St, San Francisco, CA 94111, USA", "websiteUri": "https://kokkari.com/", "displayName": { "text": "Kokkari Estiatorio", "languageCode": "en" } }, ... }
مکانهایی با انواع مختلف پیدا کنید
مثال زیر یک درخواست جستجوی نزدیک (جدید) برای نمایش نام تمام فروشگاههای رفاه و فروشگاههای مشروبات الکلی در شعاع ۱۰۰۰ متری circle مشخص شده را نشان میدهد:
curl -X POST -d '{
"includedTypes": ["liquor_store", "convenience_store"],
"maxResultCount": 10,
"locationRestriction": {
"circle": {
"center": {
"latitude": 37.7937,
"longitude": -122.3965
},
"radius": 1000.0
}
}
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName,places.primaryType,places.types" \
https://places.googleapis.com/v1/places:searchNearby
places.primaryType و places.types را به ماسک فیلد اضافه میکند تا پاسخ شامل اطلاعات نوع مربوط به هر مکان باشد و انتخاب مکان مناسب از نتایج را آسانتر کند.حذف نوع مکان از جستجو
مثال زیر یک درخواست جستجوی نزدیک (جدید) را برای همه مکانهای از نوع "school" نشان میدهد، به استثنای همه مکانهای از نوع "primary_school" ، که نتایج را بر اساس فاصله رتبهبندی میکند:
curl -X POST -d '{
"includedTypes": ["school"],
"excludedTypes": ["primary_school"],
"maxResultCount": 10,
"locationRestriction": {
"circle": {
"center": {
"latitude": 37.7937,
"longitude": -122.3965
},
"radius": 1000.0
}
},
"rankPreference": "DISTANCE"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName" \
https://places.googleapis.com/v1/places:searchNearby
جستجوی همه مکانهای نزدیک به یک منطقه، رتبهبندی بر اساس فاصله
مثال زیر یک درخواست جستجوی نزدیک (جدید) برای مکانهای نزدیک به یک نقطه در مرکز شهر سانفرانسیسکو را نشان میدهد. در این مثال، شما پارامتر rankPreference را برای رتبهبندی نتایج بر اساس فاصله وارد میکنید:
curl -X POST -d '{
"maxResultCount": 10,
"rankPreference": "DISTANCE",
"locationRestriction": {
"circle": {
"center": {
"latitude": 37.7937,
"longitude": -122.3965
},
"radius": 1000.0
}
}
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName" \
https://places.googleapis.com/v1/places:searchNearby
دریافت توصیفگرهای آدرس
توصیفگرهای آدرس، اطلاعات نسبی در مورد موقعیت مکانی یک مکان، از جمله نشانههای نزدیک و مناطق اطراف آن را ارائه میدهند.
مثال زیر یک درخواست جستجوی نزدیک (جدید) برای مکانهای نزدیک یک مرکز خرید در سن خوزه را نشان میدهد. در این مثال، شما addressDescriptors در فیلد mask قرار میدهید:
curl -X POST -d '{
"maxResultCount": 5,
"locationRestriction": {
"circle": {
"center": {
"latitude": 37.321328,
"longitude": -121.946275
},"radius": 1000
}
},
"includedTypes": ["restaurant", "cafe"],
"excludedTypes": [],
"rankPreference":"POPULARITY"
}' \
-H 'Content-Type: application/json' \
-H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName,places.addressDescriptor" \
https://places.googleapis.com/v1/places:searchNearby
پاسخ شامل مکان مشخص شده در درخواست، فهرستی از مکانهای دیدنی نزدیک و فاصله آنها از مکان، و فهرستی از مناطق و ارتباط آنها با مکان است:
{ "places": [ { "displayName": { "text": "Westfield Valley Fair", "languageCode": "en" }, "addressDescriptor": { "landmarks": [ { "name": "places/ChIJ62_oCR7Lj4AR_MGWkSPotD4", "placeId": "ChIJ62_oCR7Lj4AR_MGWkSPotD4", "displayName": { "text": "Nordstrom", "languageCode": "en" }, "types": [ "clothing_store", "department_store", "establishment", "point_of_interest", "shoe_store", "store" ], "straightLineDistanceMeters": 114.76984, "travelDistanceMeters": 114.261856 }, { "name": "places/ChIJgexMlR_Lj4ARiKCKuhNnjn0", "placeId": "ChIJgexMlR_Lj4ARiKCKuhNnjn0", "displayName": { "text": "Valley Fair Mall Eyexam of CA", "languageCode": "en" }, "types": [ "establishment", "health", "point_of_interest" ], "straightLineDistanceMeters": 131.62566, "travelDistanceMeters": 237.33253 }, { "name": "places/ChIJWWIlNx7Lj4ARpe1E0ob-_GI", "placeId": "ChIJWWIlNx7Lj4ARpe1E0ob-_GI", "displayName": { "text": "Din Tai Fung", "languageCode": "en" }, "types": [ "establishment", "food", "point_of_interest", "restaurant" ], "straightLineDistanceMeters": 110.0775, "travelDistanceMeters": 171.41951 }, { "name": "places/ChIJwyfPQx7Lj4AR7bYI2A2Yc54", "placeId": "ChIJwyfPQx7Lj4AR7bYI2A2Yc54", "displayName": { "text": "Abercrombie & Fitch", "languageCode": "en" }, "types": [ "clothing_store", "establishment", "point_of_interest", "shoe_store", "store" ], "spatialRelationship": "DOWN_THE_ROAD", "straightLineDistanceMeters": 53.620117, "travelDistanceMeters": 2.4578214 }, { "name": "places/ChIJpycNQx7Lj4ARjhXw3PrM_kU", "placeId": "ChIJpycNQx7Lj4ARjhXw3PrM_kU", "displayName": { "text": "Hollister Co.", "languageCode": "en" }, "types": [ "clothing_store", "establishment", "point_of_interest", "shoe_store", "store" ], "spatialRelationship": "DOWN_THE_ROAD", "straightLineDistanceMeters": 56.53726, "travelDistanceMeters": 15.418246 } ], "areas": [ { "name": "places/ChIJb3F-EB7Lj4ARnHApQ_Hu1gI", "placeId": "ChIJb3F-EB7Lj4ARnHApQ_Hu1gI", "displayName": { "text": "Westfield Valley Fair", "languageCode": "en" }, "containment": "WITHIN" }, { "name": "places/ChIJXYuykB_Lj4AR1Ot8nU5q26Q", "placeId": "ChIJXYuykB_Lj4AR1Ot8nU5q26Q", "displayName": { "text": "Valley Fair", "languageCode": "en" }, "containment": "WITHIN" }, { "name": "places/ChIJtYoUX2DLj4ARKoKOb1G0CpM", "placeId": "ChIJtYoUX2DLj4ARKoKOb1G0CpM", "displayName": { "text": "Central San Jose", "languageCode": "en" }, "containment": "OUTSKIRTS" } ] } }, /.../ }
امتحانش کن!
مرورگر APIها به شما امکان میدهد درخواستهای نمونه ایجاد کنید تا با API و گزینههای API آشنا شوید.
آیکون API یعنی api را در سمت راست صفحه انتخاب کنید.
در صورت تمایل، پارامترهای درخواست را ویرایش کنید.
دکمه اجرا را انتخاب کنید. در کادر محاورهای، حسابی را که میخواهید برای ارسال درخواست استفاده کنید، انتخاب کنید.
در پنل APIs Explorer، آیکون تمام صفحه را در حالت تمام صفحه انتخاب کنید تا پنجره APIs Explorer باز شود.