Places Aggregate API 클라이언트 라이브러리 예시

이 페이지에는 Places Aggregate API 클라이언트 라이브러리를 사용하는 방법의 예가 나와 있습니다.

클라이언트 라이브러리 설치

설치 안내는 Places Aggregate API 클라이언트 라이브러리를 참고하세요.

인증

클라이언트 라이브러리를 사용할 때는 애플리케이션 기본 사용자 인증 정보(ADC)를 사용하여 인증합니다. ADC 설정은 애플리케이션 기본 사용자 인증 정보에 대한 사용자 인증 정보 제공을 참고하세요. 클라이언트 라이브러리에서 ADC를 사용하는 방법은 클라이언트 라이브러리를 사용하여 인증을 참고하세요.

API 키를 사용하여 클라이언트 라이브러리에 인증할 수도 있습니다. 예를 들면 다음과 같습니다.

자바

import java.util.HashMap;
import java.util.Map;
import com.google.api.gax.core.NoCredentialsProvider;
import com.google.api.gax.rpc.FixedHeaderProvider;
import com.google.api.gax.rpc.HeaderProvider;
import com.google.maps.areainsights.v1.AreaInsightsClient;
import com.google.maps.areainsights.v1.AreaInsightsSettings;
// ...
String apiKey = "API_KEY";
// Create a HeaderProvider to inject the API key into every request.
Map<String, String> headers = new HashMap<>();
headers.put("x-goog-api-key", apiKey);
HeaderProvider headerProvider = FixedHeaderProvider.create(headers);
// Configure the client settings.
AreaInsightsSettings areaInsightsSettings =
    AreaInsightsSettings.newBuilder()
        // Use the header provider to add the API key.
        .setHeaderProvider(headerProvider)
        // Tell the client not to use Application Default Credentials.
        .setCredentialsProvider(NoCredentialsProvider.create())
        .build();
// Create the client using these custom settings.
try (AreaInsightsClient areaInsightsClient = AreaInsightsClient.create(areaInsightsSettings)) {
  // ...
}

Go

areainsightspb "cloud.google.com/go/maps/areainsights/apiv1/areainsightspb"
"google.golang.org/api/option" // Import the option package when using an API key
"google.golang.org/genproto/googleapis/type/latlng"
...
// Initialize the client, passing the API key
clientOpts := []option.ClientOption{option.WithAPIKey("API_KEY")}
c, err := areainsights.NewClient(ctx, clientOpts...)

NodeJS

// Instantiates the Places client, passing the API key
const areaInsightsClient = new AreaInsightsClient({
  apiKey: "API_KEY",
});

Python

  client = areainsights_v1.AreaInsightsAsyncClient(
    # Instantiates the insights client, passing the API key
    client_options={"api_key": "API_KEY"}
  )

.NET

using Google.Maps.AreaInsights.V1;
using Google.Api.Gax.Grpc;
using Grpc.Core;
// ...
var apiHeader = CallSettings.FromHeader("X-Goog-Api-Key", "API_KEY");
var defaultSettings = AreaInsightsSettings.GetDefault();
var settings = new AreaInsightsSettings
{
    // Merge the API key header into the settings for the ComputeInsights method.
    ComputeInsightsSettings = defaultSettings.ComputeInsightsSettings.MergedWith(apiHeader)
};
// Create a client builder with the custom settings.
AreaInsightsClientBuilder builder = new AreaInsightsClientBuilder
{
    Settings = settings,
    // Use SslCredentials to create a secure channel for API key authentication.
    ChannelCredentials = new SslCredentials()
};
// Build the client from the builder.
AreaInsightsClient areaInsightsClient = await builder.BuildAsync();

애플리케이션에서 API 키를 사용하는 경우 저장 및 전송 중에 안전하게 보호되도록 해야 합니다. API 키를 공개적으로 노출하면 계정에 예상치 않은 비용이 부과될 수 있습니다.

이 페이지의 예시에서는 애플리케이션 기본 사용자 인증 정보를 사용합니다.

컴퓨팅 통계

다음은 클라이언트 라이브러리를 사용하여 컴퓨팅 통계를 호출하는 방법의 예입니다.

자바

import com.google.api.core.ApiFuture;
import com.google.maps.areainsights.v1.AreaInsightsClient;
import com.google.maps.areainsights.v1.ComputeInsightsRequest;
import com.google.maps.areainsights.v1.ComputeInsightsResponse;
import com.google.maps.areainsights.v1.Filter;
import com.google.maps.areainsights.v1.Insight;
import com.google.maps.areainsights.v1.LocationFilter;
import com.google.maps.areainsights.v1.OperatingStatus;
import com.google.maps.areainsights.v1.RatingFilter;
import com.google.maps.areainsights.v1.TypeFilter;
import com.google.type.LatLng;
// ...
public static void callComputeInsights() throws Exception {
  // Use try-with-resources to automatically close the client.
  try (AreaInsightsClient areaInsightsClient = AreaInsightsClient.create()) {
    // Build the request.
    ComputeInsightsRequest request =
        ComputeInsightsRequest.newBuilder()
            .addInsights(Insight.INSIGHT_COUNT)
            .setFilter(
                Filter.newBuilder()
                    .setLocationFilter(
                        LocationFilter.newBuilder()
                            .setCircle(
                                LocationFilter.Circle.newBuilder()
                                    .setLatLng(
                                        LatLng.newBuilder()
                                            .setLatitude(37.7749)
                                            .setLongitude(-122.4194)
                                            .build())
                                    .setRadius(2000)
                                    .build()))
                    .setTypeFilter(TypeFilter.newBuilder().addIncludedTypes("restaurant").build())
                    .addOperatingStatus(OperatingStatus.OPERATING_STATUS_OPERATIONAL)
                    .setRatingFilter(RatingFilter.newBuilder().setMinRating(4.2f).build())
                    .build())
            .build();
    // Make the API call.
    ApiFuture futureResponse =
        areaInsightsClient.computeInsightsCallable().futureCall(request);
    ComputeInsightsResponse response = futureResponse.get();
    System.out.println(response);
  }
}

Go

package main
import (
  "context"
  "fmt"
  "log"
  areainsights "cloud.google.com/go/maps/areainsights/apiv1"
  areainsightspb "cloud.google.com/go/maps/areainsights/apiv1/areainsightspb"
  "google.golang.org/genproto/googleapis/type/latlng"
)
func main() {
  ctx := context.Background()
  // Initialize the client
  c, err := areainsights.NewClient(ctx)
  if err != nil {
    log.Fatalf("NewClient: %v", err)
  }
  defer c.Close()
  minRating := float32(4.2)
  // Create the ComputeInsightsRequest
  req := &areainsightspb.ComputeInsightsRequest{
    Insights: []areainsightspb.Insight{
      areainsightspb.Insight_INSIGHT_COUNT,
    },
    Filter: &areainsightspb.Filter{
      LocationFilter: &areainsightspb.LocationFilter{
        Area: &areainsightspb.LocationFilterCircle{
          Circle: &areainsightspb.LocationFilter_Circle{
            Center: &areainsightspb.LocationFilter_Circle_LatLng{
              LatLng: &latlng.LatLng{
                Latitude:  37.7749,
                Longitude: -122.4194,
              },
            },
            Radius: 2000,
          },
        },
      },
      TypeFilter: &areainsightspb.TypeFilter{
        // Filter for restaurants
        IncludedTypes: []string{"restaurant"},
      },
      OperatingStatus: []areainsightspb.OperatingStatus{
        areainsightspb.OperatingStatus_OPERATING_STATUS_OPERATIONAL,
      },
      RatingFilter: &areainsightspb.RatingFilter{
        MinRating: &minRating,
      },
    },
  }
  // Call ComputeInsights
  resp, err := c.ComputeInsights(ctx, req)
  if err != nil {
    log.Fatalf("ComputeInsights failed: %v", err)
  }
  // Process the response
  // Since we requested a count, use the GetCount() method to retrieve the result.
  count := resp.GetCount()
  fmt.Printf("Found a total of %d operational restaurants with a rating of %.1f or higher in the specified area.\n", count, minRating)
}

NodeJS

// Imports the library
const {AreaInsightsClient, protos} = require('@googlemaps/areainsights');
// Instantiates a client
const areaInsightsClient = new AreaInsightsClient();
async function computeInsights() {
  // Build the request
  const request = {
    insights: [protos.google.maps.areainsights.v1.Insight.INSIGHT_COUNT],
    filter: {
      locationFilter: {
        circle: {
          latLng: {
            latitude: 37.7749,
            longitude: -122.4194,
          },
          radius: 2000,
        },
      },
      typeFilter: {
        includedTypes: ['restaurant'],
      },
      operatingStatus: [
        protos.google.maps.areainsights.v1.OperatingStatus
          .OPERATING_STATUS_OPERATIONAL,
      ],
      ratingFilter: {
        minRating: 4.2,
      },
    },
  };
  // Make the request
  const [response] = await areaInsightsClient.computeInsights(request);
  console.log(response);
}
computeInsights();

Python

import asyncio
from google.maps import areainsights_v1
from google.type import latlng_pb2
async def places_aggregate():
    client = areainsights_v1.AreaInsightsAsyncClient()
    # Build the request
    request = areainsights_v1.ComputeInsightsRequest(
        insights=[areainsights_v1.Insight.INSIGHT_COUNT],
        filter=areainsights_v1.Filter(
            location_filter=areainsights_v1.LocationFilter(
                circle=areainsights_v1.LocationFilter.Circle(
                    lat_lng=latlng_pb2.LatLng(latitude=37.7749, longitude=-122.4194),
                    radius=2000
                )
            ),
            type_filter=areainsights_v1.TypeFilter(
                included_types=["restaurant"]
            ),
            operating_status=[areainsights_v1.OperatingStatus.OPERATING_STATUS_OPERATIONAL],
            rating_filter=areainsights_v1.RatingFilter(
                min_rating=4.2
            )
        )
    )
    # Make the request
    response = await client.compute_insights(request=request)
    return response
print(asyncio.run(places_aggregate()))

.NET

using Google.Maps.AreaInsights.V1;
// ...
public static async Task GetPlacesAggregateCountAsync()
{
    // Create the client.
    AreaInsightsClient areaInsightsClient = await AreaInsightsClient.CreateAsync();
    // Build the request
    var request = new ComputeInsightsRequest
    {
        Insights = { Insight.Count },
        Filter = new Filter
        {
            LocationFilter = new LocationFilter
            {
                // Define the search area as a circle with a 2km radius.
                Circle = new LocationFilter.Types.Circle
                {
                    LatLng = new Google.Type.LatLng { Latitude = 37.7749, Longitude = -122.4194 },
                    Radius = 2000
                }
            },
            TypeFilter = new TypeFilter
            {
                // Filter for places of type "restaurant".
                IncludedTypes = { "restaurant" }
            },
            // Filter for places that are operational.
            OperatingStatus = { OperatingStatus.Operational },
            RatingFilter = new RatingFilter
            {
                // Filter for places with a minimum user rating of 4.2.
                MinRating = 4.2f
            }
        }
    };
    // Make the request
    ComputeInsightsResponse response = await areaInsightsClient.ComputeInsightsAsync(request);
    // Return the count from the response.
    return response.Count;
}

이 요청은 샌프란시스코 도심에서 반경 2km 이내에 있으며 운영 중인 레스토랑 중 사용자 평점이 4.2 이상인 레스토랑의 수를 반환합니다.