テキスト検索(新版)は、「渋谷 ピザショップ」「表参道 靴店」「123 番地」といった文字列に対して、場所のセットについての情報を返します。テキスト文字列と、その時点で設定済みの地域バイアスをもとに、場所のリストを返すサービスです。
テキスト検索(新版)では、必須パラメータに加えて、 オプション パラメータを使用してクエリを絞り込むことで、より良い結果を得ることができます。
テキスト検索で場所のリストを取得する
GMSPlacesClient
searchByTextWithRequest: を呼び出してテキスト検索リクエストを作成し、
リクエスト パラメータとレスポンスを処理するコールバック メソッド(
GMSPlaceSearchByTextResultCallback 型)を定義する
GMSPlaceSearchByTextRequest
オブジェクトを渡します。
GMSPlaceSearchByTextRequest オブジェクトは、リクエストに必要なパラメータとオプション パラメータをすべて指定します。必須パラメータは次のとおりです。
GMSPlaceオブジェクトで返されるフィールドのリスト。フィールド マスクとも呼ばれます。GMSPlacePropertyで定義されます。フィールド リストで 1 つ以上のフィールドを指定しない場合、またはフィールド リストを省略した場合、呼び出しはエラーを返します。- テキスト クエリ。
このテキスト検索リクエストの例では、レスポンスの GMSPlace オブジェクトに、検索結果の各 GMSPlace オブジェクトの場所名とプレイス ID が含まれるように指定しています。また、レスポンスをフィルタして、「レストラン」タイプの場所のみを返すようにしています。
Places Swift SDK
let restriction = GMSPlaceRectangularLocationOption( northEast: CLLocationCoordinate2D(latitude: 20, longitude: 30), southWest: CLLocationCoordinate2D(latitude: 40, longitude: 50) ) let searchByTextRequest = SearchByTextRequest( textQuery: "pizza in New York", placeProperties: [ .name, .placeID ], locationRestriction: restriction, includedType: .restaurant, maxResultCount: 5, minRating: 3.5, priceLevels: [ .moderate, .inexpensive ], isStrictTypeFiltering: true ) switch await placesClient.searchByText(with: searchByTextRequest) { case .success(let places): // Handle places case .failure(let placesError): // Handle error }
Swift
// Create the GMSPlaceSearchByTextRequest object. let myProperties = [GMSPlaceProperty.name, GMSPlaceProperty.placeID].map {$0.rawValue} let request = GMSPlaceSearchByTextRequest(textQuery:"pizza in New York", placeProperties:myProperties) request.isOpenNow = true request.includedType = "restaurant" request.maxResultCount = 5 request.minRating = 3.5 request.rankPreference = .distance request.isStrictTypeFiltering = true request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0) // Array to hold the places in the response var placeResults: [GMSPlace] = [] let callback: GMSPlaceSearchByTextResultCallback = { [weak self] results, error in guard let self, error == nil else { if let error { print(error.localizedDescription) } return } guard let results = results as? [GMSPlace] else { return } placeResults = results } GMSPlacesClient.shared().searchByText(with: request, callback: callback)
Objective-C
// Create the GMSPlaceSearchByTextRequest object. GMSPlaceSearchByTextRequest *request = [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyName, GMSPlacePropertyPlaceID]]; request.isOpenNow = YES; request.includedType = @"restaurant"; request.maxResultCount = 5; request.minRating = 3.5; request.rankPreference = GMSPlaceSearchByTextRankPreferenceDistance; request.isStrictTypeFiltering = YES; request.priceLevels = @[ @(kGMSPlacesPriceLevelFree), @(kGMSPlacesPriceLevelCheap) ]; request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0); // Array to hold the places in the response _placeResults = [NSArray array]; // Create the GMSPlaceSearchByTextRequest object. [_placesClient searchByTextWithRequest:request callback:^(NSArray<GMSPlace *> *_Nullable placeResults, NSError * _Nullable error) { if (error != nil) { NSLog(@"An error occurred %@", [error localizedDescription]); return; } else { if (placeResults.count > 0) { // Get list of places. _placeResults = placeResults; } } } ];
テキスト検索のレスポンス
テキスト検索 API は、一致する場所ごとに 1 つの GMSPlace オブジェクトを含む、一致する場所の配列を
形式で
GMSPlace
オブジェクトで返します。
営業ステータスを取得する
GMSPlacesClient オブジェクトには、isOpenWithRequest というメンバー関数(Swift では isOpenRequest、GooglePlacesSwift では isPlaceOpenRequest)が含まれています。この関数は、呼び出しで指定された時間に基づいて、場所が現在営業中かどうかを示すレスポンスを返します。
このメソッドは、次のものを含む GMSPlaceIsOpenWithRequest 型の単一の引数を受け取ります。
- A
GMSPlaceオブジェクト、またはプレイス ID を指定する文字列。必要なフィールドを含む Place オブジェクトの作成について詳しくは、Place Details をご覧ください。
- 確認する時間を指定するオプションの
NSDate(Obj-C)またはDate(Swift)オブジェクト。時間を指定しない場合、デフォルトは現在です。 - レスポンスを処理する
GMSPlaceOpenStatusResponseCallbackメソッド。 >
GMSPlaceIsOpenWithRequest メソッドでは、GMSPlace オブジェクトに次のフィールドを設定する必要があります:
GMSPlacePropertyUTCOffsetMinutesGMSPlacePropertyBusinessStatusGMSPlacePropertyOpeningHoursGMSPlacePropertyCurrentOpeningHoursGMSPlacePropertySecondaryOpeningHours
これらのフィールドが Place オブジェクトに指定されていない場合、またはプレイス ID を渡した場合、メソッドは GMSPlacesClient GMSFetchPlaceRequest: を使用してフィールドを取得します。
isOpenWithRequest のレスポンス
isOpenWithRequest は、ビジネスが営業中か、休業中か、ステータスが不明かを示すブール値 status を含む GMSPlaceIsOpenResponse オブジェクトを返します。
| 言語 | 営業中の場合の値 | 休業中の場合の値 | ステータスが不明な場合の値 |
|---|---|---|---|
| Places Swift | true |
false |
nil |
| Swift | .open |
.closed |
.unknown |
| Objective-C | GMSPlaceOpenStatusOpen |
GMSPlaceOpenStatusClosed |
GMSPlaceOpenStatusUnknown |
isOpenWithRequest の課金
GMSPlacePropertyUTCOffsetMinutesフィールドとGMSPlacePropertyBusinessStatusフィールドは、Basic Data SKU で課金されます。その他の営業時間については、Place Details Enterprise SKU で課金されます。- 以前のリクエストで
GMSPlaceオブジェクトにこれらのフィールドがすでに含まれている場合、再度課金されることはありません。
例: GMSPlaceIsOpenWithRequest リクエストを作成する
次の例は、既存の GMSPlace オブジェクト内で GMSPlaceIsOpenWithRequest を初期化する方法を示しています。Places Swift SDK
let isOpenRequest = IsPlaceOpenRequest(place: place) switch await placesClient.isPlaceOpen(with: isOpenRequest) { case .success(let isOpenResponse): switch isOpenResponse.status { case true: // Handle open case false: // Handle closed case nil: // Handle unknown case .failure(let placesError): // Handle error }
Swift
let isOpenRequest = GMSPlaceIsOpenRequest(place: place, date: nil) GMSPlacesClient.shared().isOpen(with: isOpenRequest) { response, error in if let error = error { // Handle Error } switch response.status { case .open: // Handle open case .closed: // Handle closed case .unknown: // Handle unknown } }
Objective-C
GMSPlaceIsOpenRequest *isOpenRequest = [[GMSPlaceIsOpenRequest alloc] initWithPlace:place date:nil]; [[GMSPlacesClient sharedClient] isOpenWithRequest:isOpenRequest callback:^(GMSPlaceIsOpenResponse response, NSError *_Nullable error) { if (error) { // Handle error } switch (response.status) { case GMSPlaceOpenStatusOpen: // Handle open case GMSPlaceOpenStatusClosed: // Handle closed case GMSPlaceOpenStatusUnknown: // Handle unknown } }];
ページネーション
テキスト検索では、ページネーション オブジェクト(
hasNextPage ブール値)が提供されます。これは、テキスト検索
呼び出しに対する最初のレスポンスで返されます。次のページがある場合は、fetchNextPage() 関数を使用して
読み込むことができます。
次の例は、次のページがあるかどうかを確認し、ページを読み込む方法を示しています。
Swift
public struct PlaceSearchPagination { public var pageSize: Int public var hasNextPage: Bool public func fetchNextPage() async -> SearchByTextResponse } public struct SearchByTextResponse { public var pagination: PlaceSearchPagination? public var places: [Place]? public var error: PlaceError? } PlacesClient.swift public func searchByText(with request: SearchByTextRequest) async -> SearchByTextResponse let searchByTextRequest = SearchByTextRequest(textQuery: "restaurants", placeProperties: [PlaceProperty.displayName], locationBias: CircularCoordinateRegion(center: CLLocationCoordinate2D(latitude: 0, longitude: 0), radius: 100)) searchByTextRequest.maxResultCount = 10 var searchByTextResponse = await PlacesClient.shared.searchByText(with: searchByTextRequest) print("Found \(searchByTextResponse.places.count) places") searchByTextResponse.pagination.pageSize = 20 // Continue making requests until no more results are found in pagination object while searchByTextResponse.pagination.hasNextPage { searchByTextResponse = await searchByTextResponse.pagination.fetchNextPage() print("Found \(searchByTextResponse.places.count) places") }
Objective-C
GMSPlaceSearchByTextRequest *searchByTextRequest = [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery: @"restaurants" placeProperties: @[GMSPlacePropertyAll]]; searchByTextRequest.maxResultCount = 10; __block void (^recursiveCallback)(GMSPlaceSearchByTextResponse *, NSError *); recursiveCallback = ^(GMSPlaceSearchByTextResponse * response, NSError* error) { NSLog(@"Found %d places", response.places.count); if (response.pagination.hasNextPage) { [response.pagination fetchNextPageWithCompletion:recursiveCallback]; } }; [GMSPlacesClient.sharedClient searchByTextWithRequest:searchByTextRequest completion:recursiveCallback];
必須パラメータ
GMSPlaceSearchByTextRequest オブジェクトを使用して、検索に必要なパラメータを指定します。
-
フィールド リスト
返す Place Data プロパティを指定します。返すデータ フィールドを指定する
GMSPlaceプロパティのリストを渡します。フィールド マスクを省略すると、リクエストはエラーを返します。フィールド リストは、不要なデータをリクエストしないようにするための優れた設計手法です。これにより、不要な処理時間や 課金が発生するのを防ぐことができます。
次のフィールドを 1 つ以上指定します。
次のフィールドは、テキスト検索の基本事項 ID Only SKU をトリガーします。
GMSPlacePropertyPlaceID次のフィールドは、テキスト検索 Pro SKU をトリガーします。
GMSPlacePropertyAddressComponents
GMSPlacePropertyBusinessStatus
GMSPlacePropertyCoordinate
GMSPlacePropertyFormattedAddress
GMSPlacePropertyIconBackgroundColor
GMSPlacePropertyIconImageURL
GMSPlacePropertyName
GMSPlacePropertyPhotos
GMSPlacePropertyPlusCode
GMSPlacePropertyTypes
GMSPlacePropertyUTCOffsetMinutes
GMSPlacePropertyViewport
GMSPlacePropertyWheelchairAccessibleEntrance次のフィールドは、テキスト検索 Enterprise SKU をトリガーします。
GMSPlacePropertyCurrentOpeningHours
GMSPlacePropertySecondaryOpeningHours
GMSPlacePropertyPhoneNumber
GMSPlacePropertyPriceLevel
GMSPlacePropertyRating
GMSPlacePropertyOpeningHours
GMSPlacePropertyUserRatingsTotal
GMSPlacePropertyWebsite次のフィールドは、テキスト検索 Enterprise Plus SKU をトリガーします。
GMSPlacePropertyCurbsidePickup
GMSPlacePropertyDelivery
GMSPlacePropertyDineIn
GMSPlacePropertyEditorialSummary
GMSPlacePropertyReservable
GMSPlacePropertyReviews
GMSPlacePropertyServesBeer
GMSPlacePropertyServesBreakfast
GMSPlacePropertyServesBrunch
GMSPlacePropertyServesDinner
GMSPlacePropertyServesLunch
GMSPlacePropertyServesVegetarianFood
GMSPlacePropertyServesWine
GMSPlacePropertyTakeout
-
textQuery
検索するテキスト文字列(「レストラン」、「123 番通り 」、「サンフランシスコのおすすめスポット」など)です。
オプション パラメータ
GMSPlaceSearchByTextRequest オブジェクトを使用して、検索のオプション パラメータを指定します。
includedType
結果を、 表 A で定義された指定したタイプに一致する場所に制限します。 指定できるタイプは 1 つだけです。次に例を示します。
isOpenNow
trueの場合、クエリが送信された時点で営業している場所のみを返します。 `false` の場合、営業ステータスに関係なくすべてのビジネスを返します。このパラメータをfalseに設定すると、Google プレイスのデータベースに営業時間が指定されていない場所が 返されます。isStrictTypeFiltering
includeTypeパラメータとともに使用します。`true` に設定すると、true`includeType` で指定されたタイプに一致する場所のみが返されます。includeTypeデフォルトの false の場合、レスポンスには指定したタイプに一致しない場所が含まれることがあります。locationBias
検索する領域を指定します。この場所はバイアスとして機能します。つまり、 指定した場所の周辺の結果が返される可能性があります。指定した領域外の結果も含まれます。
locationRestrictionまたはlocationBiasを指定できますが、両方は指定できません。locationRestrictionは結果が収まる必要のあるリージョンを指定し、locationBiasは結果が近くにある必要のあるリージョンを指定しますが、領域外にすることもできます。リージョンを矩形のビューポートまたは円として指定します。
円は、中心点と半径(メートル単位)で定義されます。半径 は 0.0 ~ 50000.0 の範囲で指定してください。デフォルトの半径は 0.0 です。 次に例を示します。
let request = SearchByTextRequest() request.locationBias = GMSPlaceCircularLocationOption(CLLocationCoordinate2DMake(40.7, -74.0), 200.0)
長方形は緯度経度のビューポートで、対角線上の 2 つの 低点と高点で表されます。低点は長方形の南西 隅を示し、高点は長方形の北東 隅を表します。
ビューポートは閉じた領域と見なされます。つまり、境界が含まれます。緯度の範囲は -90 ~ 90 度、経度の範囲は -180 ~ 180 度にする必要があります。
low=highの場合、ビューポートはその 1 点で構成されます。low.longitude>high.longitudeの場合、経度の範囲が反転します(ビューポートが 180 度の経度線を越えます)。low.longitude= -180 度、high.longitude= 180 度の場合、ビューポートにはすべての 経度が含まれます。low.longitude= 180 度、high.longitude= -180 度の場合、経度の範囲は 空になります。low.latitude>high.latitudeの場合、緯度の範囲は空になります。
locationRestriction
検索する領域を指定します。指定した領域外の結果は返されません。 リージョンを矩形のビューポートとして指定します。ビューポートの定義については、
locationBiasの説明をご覧ください。locationRestrictionまたはlocationBiasを指定できますが、両方は指定できません。locationRestrictionは結果が収まる必要のあるリージョンを指定し、locationBiasは結果が近くにある必要のあるリージョンを指定しますが、領域外にすることもできます。-
maxResultCount
返される場所の結果の最大数を指定します。1 ~ 20(デフォルト)の範囲で指定してください。
minRating
結果を、ユーザーの評価の平均が この上限以上のものに限定します。値は 0.0 ~ 5.0 の範囲で、 0.5 刻みで指定してください。例: 0、0.5、1.0、...、5.0。値は 最も近い 0.5 に切り上げられます。たとえば、値が 0.6 の場合、評価が 1.0 未満の結果はすべて 除外されます。
-
priceLevels
検索を、特定の価格帯でマークされている場所に制限します。 デフォルトでは、すべての価格帯が選択されます。
PriceLevelで定義された値の 1 つ以上の配列を指定します。次に例を示します。
let request = SearchByTextRequest() request.priceLevels = [GMSPlacesPriceLevel.moderate.rawValue, GMSPlacesPriceLevel.cheap.rawValue]
rankPreference
クエリのタイプに基づいて、レスポンスで結果をランク付けする方法を指定します。
- 「ニューヨーク市のレストラン」などのカテゴリ クエリの場合、
.relevance(検索の関連性で結果をランク付け)がデフォルトです。rankPreferenceを.relevanceまたは.distance(距離で結果をランク付け)に設定できます。 - 「Mountain View, CA」などのカテゴリ以外のクエリの場合は、
`rankPreference` を設定しないことをおすすめします。
rankPreference
- 「ニューヨーク市のレストラン」などのカテゴリ クエリの場合、
regionCode
レスポンスのフォーマットに使用するリージョン コード。 2 文字の CLDR コード値として指定します。このパラメータは、検索結果にバイアスをかけることもできます 。デフォルト値はありません。
レスポンスのアドレス フィールドの国名が リージョン コードと一致する場合、国コードはアドレスから省略されます。
ほとんどの CLDR コードは ISO 3166-1 コードと同一ですが、 いくつか注意が必要な例外もあります。たとえば、イギリスの ccTLD は 「uk」(.co.uk)ですが、ISO 3166-1 コードは「gb」(厳密には 「グレートブリテンおよび北アイルランド連合王国」のエンティティ用)です。 このパラメータは、適用される法律に基づいて結果に影響を与える可能性があります。
shouldIncludePureServiceAreaBusinesses
trueの場合、検索結果に純粋な非店舗型ビジネスを返します。純粋な非店舗型ビジネスとは、客先に出向いてサービスを提供し、ビジネス拠点の住所では接客しないビジネスです。次に例を示します。
Places Swift SDK
let request = SearchByTextRequest() request.shouldIncludePureServiceAreaBusinesses = true
Swift
let request = SearchByTextRequest() request.shouldIncludePureServiceAreaBusinesses: true
Objective-C
GMSPlaceSearchByTextRequest *request = [[GMSPlaceSearchByTextRequest alloc] initWithTextQuery:@"pizza in New York" placeProperties:@[GMSPlacePropertyAll]]; request.shouldIncludePureServiceAreaBusinesses = YES;
アプリに属性を表示する
アプリで
GMSPlacesClientから取得した情報(写真やクチコミなど)を表示する場合は、必要な帰属情報も表示する必要があります。
たとえば、reviews オブジェクトの GMSPlacesClient プロパティ
には、最大 5 つの
GMSPlaceReview
オブジェクトの配列が含まれています。各 GMSPlaceReview オブジェクトには、帰属情報と著作者の帰属情報を含めることができます。
アプリでクチコミを表示する場合は、帰属情報または著作者の帰属情報も表示する必要があります。
詳細については、 帰属情報に関するドキュメントをご覧ください。