Text Search (nueva)

Text Search (nuevo) muestra información sobre un conjunto de lugares en función de una cadena; por ejemplo, "pizza en Nueva York", "tiendas de zapatos cerca de Ottawa" o "calle principal 123". El servicio responde con una lista de lugares que coinciden con la cadena de texto y con cualquier sesgo de ubicación que se haya establecido.

El servicio es especialmente útil para realizar consultas de direcciones ambiguas en un sistema automatizado, y los componentes sin dirección de la cadena pueden coincidir con empresas y direcciones. Algunos ejemplos de consultas de direcciones ambiguas son las direcciones con formato deficiente o las solicitudes que incluyen componentes sin dirección, como los nombres de las empresas. Es posible que las solicitudes como las dos primeros ejemplos de la siguiente tabla no muestren resultados, a menos que se establezca una ubicación, como la región, la restricción de ubicación o el sesgo de ubicación.

"10 High Street, UK" o "123 Main Street, EE.UU." Múltiples "calles principales" en el Reino Unido; varias "calles principales" en EE.UU. La consulta no muestra los resultados deseados, a menos que se establezca una restricción de ubicación.
"Restaurante de cadenas de Nueva York" Varias ubicaciones de "ChainRestaurant" en Nueva York sin dirección ni nombre
"10 High Street, Escher UK" o "123 Main Street, Pleasanton, EE.UU." Solo una "High Street" en la ciudad de Escher, en el Reino Unido, y solo una "Main Street" en la ciudad estadounidense de Pleasanton, CA.
“NombredeRestauranteÚnico Nueva York” Solo un establecimiento con este nombre en Nueva York; no es necesario diferenciar una dirección.
"restaurantes de pizza en Nueva York" Esta consulta contiene su restricción de ubicación, y "pizzería" es un tipo de lugar bien definido. Muestra varios resultados.
"+1 514-670-8700"

Esta consulta contiene un número de teléfono. Muestra varios resultados para los lugares asociados con ese número de teléfono.

El Explorador de APIs te permite realizar solicitudes en tiempo real para que puedas familiarizarte con la API y sus opciones:

Pruébala

Solicitudes de Text Search

Una solicitud de búsqueda de texto es una solicitud HTTP POST como la siguiente:

https://places.googleapis.com/v1/places:searchText

Pasa todos los parámetros en el cuerpo de la solicitud JSON o en los encabezados como parte de la solicitud POST. Por ejemplo:

curl -X POST -d '{
  "textQuery" : "Spicy Vegetarian Food in Sydney, Australia"
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: API_KEY' \
-H 'X-Goog-FieldMask: places.displayName,places.formattedAddress,places.priceLevel' \
'https://places.googleapis.com/v1/places:searchText'

Respuestas de Text Search (nuevo)

Text Search (nuevo) muestra un objeto JSON como respuesta. En la respuesta, figura lo siguiente:

  • El array places contiene todos los lugares coincidentes.
  • Cada lugar del array se representa con un objeto Place. El objeto Place contiene información detallada sobre un solo lugar.
  • La FieldMask pasada en la solicitud especifica la lista de campos que se muestran en el objeto Place.

El objeto JSON completo tiene el siguiente formato:

{
  "places": [
    {
      object (Place)
    }
  ]
}

Parámetros obligatorios

  • FieldMask

    Especifica la lista de campos que se mostrarán en la respuesta. Para ello, crea una máscara de campo de respuesta. Pasa la máscara de campo de respuesta al método mediante el parámetro de URL $fields o fields, o bien con el encabezado HTTP X-Goog-FieldMask. No hay una lista predeterminada de los campos que se muestran en la respuesta. Si omites la máscara de campo, el método mostrará un error.

    El enmascaramiento de campo es una práctica de diseño recomendada para garantizar que no solicites datos innecesarios, lo que ayuda a evitar tiempos de procesamiento y cargos de facturación innecesarios.

    Especifica una lista separada por comas de los tipos de datos de lugar que se mostrarán. Por ejemplo, para recuperar el nombre visible y la dirección del lugar.

    X-Goog-FieldMask: places.displayName,places.formattedAddress

    Usa * para recuperar todos los campos.

    X-Goog-FieldMask: *

    Especifica uno o más de los siguientes campos:

    • Los siguientes campos activan el SKU de Text Search (solo ID):

      places.id, places.name*

      * El campo places.name contiene el nombre de recurso del lugar expresado de la siguiente forma: places/PLACE_ID. Utiliza places.displayName para acceder al nombre del lugar en forma de texto.
    • Los siguientes campos activan el SKU de Text Search (Basic):

      places.accessibilityOptions, places.addressComponents, places.adrFormatAddress, places.businessStatus, places.displayName, places.formattedAddress, places.googleMapsUri, places.iconBackgroundColor, places.iconMaskBaseUri, places.location, places.photos, places.plusCode, places.primaryType, places.primaryTypeDisplayName, places.shortFormattedAddress, places.subDestinations, places.types, places.utcOffsetMinutes, places.viewport
    • Los siguientes campos activan el SKU de Text Search (Advanced):

      places.currentOpeningHours, places.currentSecondaryOpeningHours, places.internationalPhoneNumber, places.nationalPhoneNumber, places.priceLevel, places.rating, places.regularOpeningHours, places.regularSecondaryOpeningHours, places.userRatingCount, places.websiteUri
    • Los siguientes campos activan el SKU de Text Search (Preferred):

      places.allowsDogs, places.curbsidePickup, places.delivery, places.dineIn, places.editorialSummary, places.evChargeOptions, places.fuelOptions, places.goodForChildren, places.goodForGroups, places.goodForWatchingSports, places.liveMusic, places.menuForChildren, places.parkingOptions, places.paymentOptions, places.outdoorSeating, places.reservable, places.restroom, places.reviews, places.servesBeer, places.servesBreakfast/{2,}/{2,}/{2,}/places.servesBeerplaces.servesBrunchplaces.servesCocktailsplaces.servesCoffeeplaces.servesDessertsplaces.servesDinnerplaces.servesLunchplaces.servesVegetarianFoodplaces.servesWineplaces.takeout
  • textQuery

    Es la cadena de texto en la que se realiza la búsqueda, por ejemplo: "restaurante", "calle principal 123" o "el mejor lugar para visitar en Buenos Aires". La API muestra posibles coincidencias en función de esta string y ordena los resultados según la relevancia percibida.

Parámetros opcionales

  • includedType

    Restringe los resultados a los lugares que coinciden con el tipo especificado en la Tabla A. Solo se puede especificar un tipo. Por ejemplo:

    • "includedType":"bar"
    • "includedType":"pharmacy"
  • languageCode

    El idioma en el que se mostrarán los resultados.

    • Consulta la lista de idiomas disponibles. Google actualiza con frecuencia los idiomas admitidos, por lo que es posible que esta lista no sea exhaustiva.
    • Si no se proporciona languageCode, el valor predeterminado de la API es en. Si especificas un código de idioma no válido, la API mostrará un error INVALID_ARGUMENT.
    • La API hace todo lo posible para proporcionar una dirección que sea legible tanto para el usuario como para los locales. Para lograr ese objetivo, muestra las direcciones en el idioma local, transliteradas en una secuencia de comandos que el usuario puede leer si es necesario, teniendo en cuenta el idioma preferido. Todas las demás direcciones se muestran en el idioma preferido. Todos los componentes de dirección se muestran en el mismo idioma, que se elige a partir del primer componente.
    • Si un nombre no está disponible en el idioma preferido, la API usa la coincidencia más cercana.
    • El idioma preferido tiene una pequeña influencia en el conjunto de resultados que la API elige mostrar y el orden en el que se muestran. El geocodificador interpreta las abreviaturas de forma diferente según el idioma; por ejemplo, las abreviaturas para los tipos de calles o los sinónimos que pueden ser válidos en un idioma, pero no en otro.
  • locationBias

    Especifica un área de búsqueda. Esta ubicación sirve como sesgo, lo que significa que se pueden mostrar resultados en torno a la ubicación especificada, incluso resultados fuera del área especificada.

    Puedes especificar locationRestriction o locationBias, pero no ambos. Piensa en locationRestriction como la región en la que se especificarán los resultados, y como en locationBias, como en la región donde los resultados deben encontrarse cerca, pero pueden estar fuera del área.

    Especifica la región como una ventana gráfica rectangular o un círculo.

    • Un círculo se define por el punto central y el radio en metros. El radio debe ser de entre 0.0 y 50,000.0, inclusive. El radio predeterminado es 0.0. Por ejemplo:

      "locationBias": {
        "circle": {
          "center": {
            "latitude": 37.7937,
            "longitude": -122.3965
          },
          "radius": 500.0
        }
      }
    • Un rectángulo es un viewport de latitud y longitud, representado como dos puntos inferior y superior diagonalmente opuestos. El punto inferior marca la esquina suroeste del rectángulo, y el punto alto representa la esquina noreste del rectángulo.

      Una viewport se considera una región cerrada, lo que significa que incluye su límite. Los límites de latitud deben variar entre -90 y 90 grados inclusive, y los límites de longitud deben variar entre -180 y 180 grados inclusive:

      • Si low = high, el viewport consta de ese único punto.
      • Si low.longitude > high.longitude, el rango de longitud se invierte (el viewport cruza la línea de longitud de 180 grados).
      • Si low.longitude = -180 grados y high.longitude = 180 grados, el viewport incluye todas las longitudes.
      • Si low.longitude = 180 grados y high.longitude = -180 grados, el rango de longitud está vacío.
      • Si low.latitude > high.latitude, el rango de latitud está vacío.

      Se deben propagar los valores bajo y alto, y el cuadro representado no puede estar vacío. Un viewport vacío genera un error.

      Por ejemplo, este viewport abarca por completo la ciudad de Nueva York:

      "locationBias": {
        "rectangle": {
          "low": {
            "latitude": 40.477398,
            "longitude": -74.259087
          },
          "high": {
            "latitude": 40.91618,
            "longitude": -73.70018
          }
        }
      }
  • locationRestriction

    Especifica un área de búsqueda. No se muestran los resultados fuera del área especificada. Especifica la región como una viewport rectangular. Consulta la descripción de locationBias para obtener información sobre cómo definir la viewport.

    Puedes especificar locationRestriction o locationBias, pero no ambos. Piensa en locationRestriction como la región en la que se especificarán los resultados, y como en locationBias, como en la región donde los resultados deben encontrarse cerca, pero pueden estar fuera del área.

  • maxResultCount

    Especifica la cantidad máxima de resultados de lugares que se mostrarán. Debe ser un valor entre 1 y 20 (predeterminado) inclusive.

  • evOptions

    Especifica los parámetros para identificar los conectores de carga y las velocidades de carga de vehículos eléctricos (VE).

    • connectorTypes

      Filtra por el tipo de conector de carga de VE disponible en un lugar. Se filtrará un lugar que no admita ninguno de los tipos de conectores. Los tipos de conectores de carga de VE compatibles incluyen cargadores combinados (CA y CC), cargadores Tesla, cargadores compatibles con GB/T (para carga rápida de VE en China) y cargadores con tomacorrientes. Para obtener más información, consulta la documentación de referencia.

    • minimumChargingRateKw

      Filtra lugares por velocidad de carga de VE mínima en kilovatios (kW). Se filtran todos los lugares en los que se cobra una tarifa inferior a la mínima. Por ejemplo, para encontrar cargadores de VE con velocidades de carga de al menos 10 kW, puedes establecer este parámetro en "10".

  • minRating

    Restringe los resultados solo a aquellos cuya calificación promedio de los usuarios sea superior o igual a este límite. Los valores deben estar entre 0.0 y 5.0 (inclusive) en incrementos de 0.5. Por ejemplo: 0, 0.5, 1.0, ... , 5.0 inclusive. Los valores se redondean al punto 0.5 más cercano. Por ejemplo, un valor de 0.6 elimina todos los resultados con una calificación inferior a 1.0.

  • openNow

    Si es true, muestra solo los lugares que están abiertos en el momento en que se envía la consulta. Si es false, se devuelven todas las empresas, independientemente de su estado abierto. Los lugares que no especifican los horarios de atención en la base de datos de Google Places se muestran si estableces este parámetro en false.

  • priceLevels

    Restringe la búsqueda a los lugares marcados con determinados niveles de precios. La opción predeterminada es seleccionar todos los niveles de precios.

    Especifica un array de uno o más valores definidos por PriceLevel.

    Por ejemplo:

    "priceLevels":["PRICE_LEVEL_INEXPENSIVE", "PRICE_LEVEL_MODERATE"]
  • rankPreference

    Especifica cómo se clasifican los resultados en la respuesta. La API usa RELEVANCE de forma predeterminada cuando corresponde. Por ejemplo, para una consulta como "Restaurantes en la Ciudad de Nueva York", el valor predeterminado es RELEVANCE. En el caso de las consultas geográficas, como "Mountain View, CA", o cualquier otro tipo de consultas, no se aplica ningún valor predeterminado y los resultados aparecen en el orden en que se muestran en el backend.

    Los valores incluyen los siguientes:

    • DISTANCE: Clasifica los resultados por distancia.
    • RELEVANCE: Clasifica los resultados por relevancia.
  • regionCode

    El código regional que se usa para dar formato a la respuesta, especificado como un valor de código CLDR de dos caracteres. Este parámetro también puede tener un efecto de sesgo en los resultados de la búsqueda. No hay un valor predeterminado.

    Si el nombre del país del campo formattedAddress en la respuesta coincide con regionCode, el código de país se omitirá de formattedAddress. Este parámetro no tiene efecto en adrFormatAddress, que siempre incluye el nombre del país cuando está disponible, ni en shortFormattedAddress, que nunca lo incluye.

    La mayoría de los códigos CLDR son idénticos a los códigos ISO 3166-1, con algunas excepciones notables. Por ejemplo, el ccTLD del Reino Unido es "uk" (.co.uk), mientras que su código ISO 3166-1 es "gb" (técnicamente para la entidad de "Reino Unido de Gran Bretaña e Irlanda del Norte"). El parámetro puede afectar los resultados según la ley aplicable.

  • strictTypeFiltering

    Se usa con el parámetro includeType. Cuando se configura en true, solo se muestran los lugares que coinciden con los tipos especificados por includeType. Cuando es falso, el valor predeterminado, la respuesta puede contener lugares que no coinciden con los tipos especificados.

Ejemplos de Text Search

Busca un lugar por cadena de consulta

En el siguiente ejemplo, se muestra una solicitud de Text Search para "Comida vegetariana picante en Sídney, Australia":

curl -X POST -d '{
  "textQuery" : "Spicy Vegetarian Food in Sydney, Australia"
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: API_KEY' \
-H 'X-Goog-FieldMask: places.displayName,places.formattedAddress' \
'https://places.googleapis.com/v1/places:searchText'

Ten en cuenta que el encabezado X-Goog-FieldMask especifica que la respuesta contiene los siguientes campos de datos: places.displayName,places.formattedAddress. La respuesta tiene el siguiente formato:

{
  "places": [
    {
      "formattedAddress": "367 Pitt St, Sydney NSW 2000, Australia",
      "displayName": {
        "text": "Mother Chu's Vegetarian Kitchen",
        "languageCode": "en"
      }
    },
    {
      "formattedAddress": "175 First Ave, Five Dock NSW 2046, Australia",
      "displayName": {
        "text": "Veggo Sizzle - Vegan & Vegetarian Restaurant, Five Dock, Sydney",
        "languageCode": "en"
      }
    },
    {
      "formattedAddress": "29 King St, Sydney NSW 2000, Australia",
      "displayName": {
        "text": "Peace Harmony",
        "languageCode": "en"
      }
    },
    ...
  ]
}

Agrega más tipos de datos a la máscara de campo para mostrar información adicional. Por ejemplo, agrega places.types,places.websiteUri para incluir el tipo de restaurante y la dirección web en la respuesta:

curl -X POST -d '{
  "textQuery" : "Spicy Vegetarian Food in Sydney, Australia"
}' \
-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:searchText'

La respuesta ahora tiene el siguiente formato:

{
  "places": [
    {
      "types": [
        "vegetarian_restaurant",
        "vegan_restaurant",
        "chinese_restaurant",
        "restaurant",
        "food",
        "point_of_interest",
        "establishment"
      ],
      "formattedAddress": "367 Pitt St, Sydney NSW 2000, Australia",
      "websiteUri": "http://www.motherchusvegetarian.com.au/",
      "displayName": {
        "text": "Mother Chu's Vegetarian Kitchen",
        "languageCode": "en"
      }
    },
    {
      "types": [
        "vegan_restaurant",
        "thai_restaurant",
        "vegetarian_restaurant",
        "indian_restaurant",
        "italian_restaurant",
        "american_restaurant",
        "restaurant",
        "food",
        "point_of_interest",
        "establishment"
      ],
      "formattedAddress": "175 First Ave, Five Dock NSW 2046, Australia",
      "websiteUri": "http://www.veggosizzle.com.au/",
      "displayName": {
        "text": "Veggo Sizzle - Vegan & Vegetarian Restaurant, Five Dock, Sydney",
        "languageCode": "en"
      }
    },
    ...
  ]
}

Cómo filtrar lugares por nivel de precio

Usa la opción priceLevel para filtrar los resultados según restaurantes definidos como económicos o moderados:

curl -X POST -d '{
  "textQuery" : "Spicy Vegetarian Food in Sydney, Australia",
  "priceLevels":["PRICE_LEVEL_INEXPENSIVE", "PRICE_LEVEL_MODERATE"]
}' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: API_KEY' \
-H 'X-Goog-FieldMask: places.displayName,places.formattedAddress,places.priceLevel' \
'https://places.googleapis.com/v1/places:searchText'

En este ejemplo, también se usa el encabezado X-Goog-FieldMask para agregar el campo de datos places.priceLevel a la respuesta a fin de que tenga el siguiente formato:

{
  "places": [
    {
      "formattedAddress": "367 Pitt St, Sydney NSW 2000, Australia",
      "priceLevel": "PRICE_LEVEL_MODERATE",
      "displayName": {
        "text": "Mother Chu's Vegetarian Kitchen",
        "languageCode": "en"
      }
    },
    {
      "formattedAddress": "115 King St, Newtown NSW 2042, Australia",
      "priceLevel": "PRICE_LEVEL_MODERATE",
      "displayName": {
        "text": "Green Mushroom",
        "languageCode": "en"
      }
    },
    ...
  ]
}

Agrega opciones adicionales para definir mejor la búsqueda, como includedType, minRating, rankPreference, openNow y otros parámetros que se describen en Parámetros opcionales.

Cómo buscar lugares en un área

Usa locationRestriction o locationBias, pero no ambos, para restringir una búsqueda a un área. Piensa en locationRestriction como la región en la que se deben mostrar los resultados y en locationBias como en la región donde los resultados deben encontrarse cerca, pero pueden estar fuera del área.

En el siguiente ejemplo, se muestra una solicitud de Text Search para "comida vegetariana picante" ajustada a estar a menos de 500 metros de un punto en el centro de San Francisco. Esta solicitud solo muestra los primeros 10 resultados de los lugares que están abiertos.

curl -X POST -d '{
  "textQuery" : "Spicy Vegetarian Food",
  "openNow": true,
  "maxResultCount": 10,
  "locationBias": {
    "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' \
'https://places.googleapis.com/v1/places:searchText'

Buscar cargadores para VE con una velocidad de carga mínima

Usa minimumChargingRateKw y connectorTypes para buscar lugares con cargadores disponibles que sean compatibles con tu VE.

En el siguiente ejemplo, se muestra una solicitud de conectores de carga de VE de tipo 1 y Tesla y J1772 con una velocidad de carga mínima de 10 kW en Mountain View, California. Solo se devuelven cuatro resultados.

curl -X POST -d '{
    "textQuery": "EV Charging Station Mountain View",
    "maxResultCount": 4,
    "evOptions": {
      "minimumChargingRateKw": 10,
      "connectorTypes": ["EV_CONNECTOR_TYPE_J1772","EV_CONNECTOR_TYPE_TESLA"]
    }
  }' \
-H 'Content-Type: application/json' -H 'X-Goog-Api-Key: API_KEY' \
-H "X-Goog-FieldMask: places.displayName,places.evChargeOptions" \
'https://places.googleapis.com/v1/places:searchText'

La solicitud muestra la siguiente respuesta:

{
  "places": [
    {
      "displayName": {
        "text": "EVgo Charging Station",
        "languageCode": "en"
      },
      "evChargeOptions": {
        "connectorCount": 16,
        "connectorAggregation": [
          {
            "type": "EV_CONNECTOR_TYPE_CHADEMO",
            "maxChargeRateKw": 100,
            "count": 8,
            "availableCount": 5,
            "outOfServiceCount": 0,
            "availabilityLastUpdateTime": "2024-01-10T19:10:00Z"
          },
          {
            "type": "EV_CONNECTOR_TYPE_CCS_COMBO_1",
            "maxChargeRateKw": 100,
            "count": 2,
            "availableCount": 2,
            "outOfServiceCount": 0,
            "availabilityLastUpdateTime": "2024-01-10T19:10:00Z"
          },
          {
            "type": "EV_CONNECTOR_TYPE_CCS_COMBO_1",
            "maxChargeRateKw": 350,
            "count": 6,
            "availableCount": 3,
            "outOfServiceCount": 0,
            "availabilityLastUpdateTime": "2024-01-10T19:10:00Z"
          }
        ]
      }
    },
    {
      "displayName": {
        "text": "EVgo Charging Station",
        "languageCode": "en"
      },
      "evChargeOptions": {
        "connectorCount": 6,
        "connectorAggregation": [
          {
            "type": "EV_CONNECTOR_TYPE_CCS_COMBO_1",
            "maxChargeRateKw": 100,
            "count": 4,
            "availableCount": 3,
            "outOfServiceCount": 0,
            "availabilityLastUpdateTime": "2024-01-10T19:10:00Z"
          },
          {
            "type": "EV_CONNECTOR_TYPE_CCS_COMBO_1",
            "maxChargeRateKw": 350,
            "count": 2,
            "availableCount": 0,
            "outOfServiceCount": 2,
            "availabilityLastUpdateTime": "2024-01-10T19:10:00Z"
          }
        ]
      }
    },
    {
      "displayName": {
        "text": "EVgo Charging Station",
        "languageCode": "en"
      },
      "evChargeOptions": {
        "connectorCount": 5,
        "connectorAggregation": [
          {
            "type": "EV_CONNECTOR_TYPE_J1772",
            "maxChargeRateKw": 3.5999999046325684,
            "count": 1,
            "availableCount": 0,
            "outOfServiceCount": 1,
            "availabilityLastUpdateTime": "2024-01-10T19:10:00Z"
          },
          {
            "type": "EV_CONNECTOR_TYPE_CHADEMO",
            "maxChargeRateKw": 50,
            "count": 2,
            "availableCount": 0,
            "outOfServiceCount": 0,
            "availabilityLastUpdateTime": "2024-01-10T19:10:00Z"
          },
          {
            "type": "EV_CONNECTOR_TYPE_CCS_COMBO_1",
            "maxChargeRateKw": 50,
            "count": 2,
            "availableCount": 0,
            "outOfServiceCount": 0,
            "availabilityLastUpdateTime": "2024-01-10T19:10:00Z"
          }
        ]
      }
    },
    {
      "displayName": {
        "text": "Electric Vehicle Charging Station",
        "languageCode": "en"
      },
      "evChargeOptions": {
        "connectorCount": 10,
        "connectorAggregation": [
          {
            "type": "EV_CONNECTOR_TYPE_OTHER",
            "maxChargeRateKw": 210,
            "count": 10
          }
        ]
      }
    }
  ]
}

Pruébalo

El Explorador de APIs te permite realizar solicitudes de muestra para que puedas familiarizarte con la API y sus opciones.

  1. De manera opcional, expande Mostrar parámetros estándar y establece el parámetro fields en la máscara de campo.

  2. De manera opcional, edita el Cuerpo de la solicitud.

  3. Selecciona el botón Ejecutar. En el cuadro de diálogo emergente, elige la cuenta que deseas usar para realizar la solicitud.