Descripción general
![](https://developers.google.cn/static/freebase/images/Search-Service.png?hl=es-419)
La API de búsqueda de Freebase proporciona acceso a los datos de Freebase en función de una consulta de texto libre. Los resultados de la consulta están ordenados y tienen una puntuación de relevancia numérica.
Los desarrolladores pueden aplicar filtros para restringir los resultados de búsqueda a ciertos tipos de datos. Consulta la Guía de soluciones de búsqueda para obtener más información sobre cómo elaborar consultas de búsqueda detalladas.
Algunos ejemplos de cómo los desarrolladores pueden querer usar la API de búsqueda incluyen:
- Entidades de sugerencia automática (p.ej., widget de sugerencias de Freebase)
- Obtener una lista clasificada de las entidades más destacadas con un nombre determinado
- Buscar entidades con Metaesquema de búsqueda
Las siguientes muestras de código en varios idiomas admitidos muestran cómo realizar una búsqueda de un artista musical que coincida con el texto "Cee Lo Green". Una restricción adicional es que crearon algo llamado "La dama asesina".
Python
import json import urllib api_key = open(".api_key").read() query = 'blue bottle' service_url = 'https://www.googleapis.com/freebase/v1/search' params = { 'query': query, 'key': api_key } url = service_url + '?' + urllib.urlencode(params) response = json.loads(urllib.urlopen(url).read()) for result in response['result']: print(result['name'] + ' (' + str(result['score']) + ')')
Ruby
require 'rubygems' require 'cgi' require 'httparty' require 'json' require 'addressable/uri' API_KEY = open(".freebase_api_key").read() url = Addressable::URI.parse('https://www.googleapis.com/freebase/v1/search') url.query_values = { 'query' => 'Blue Bottle', 'key'=> API_KEY } response = HTTParty.get(url, :format => :json) response['result'].each { |topic| puts topic['name'] }En este ejemplo, se usan las bibliotecas Httparty y Addressable.
Java
package com.freebase.samples; import com.google.api.client.http.GenericUrl; import com.google.api.client.http.HttpRequest; import com.google.api.client.http.HttpRequestFactory; import com.google.api.client.http.HttpResponse; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.jayway.jsonpath.JsonPath; import java.io.FileInputStream; import java.util.Properties; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; public class SearchExample { public static Properties properties = new Properties(); public static void main(String[] args) { try { properties.load(new FileInputStream("freebase.properties")); HttpTransport httpTransport = new NetHttpTransport(); HttpRequestFactory requestFactory = httpTransport.createRequestFactory(); JSONParser parser = new JSONParser(); GenericUrl url = new GenericUrl("https://www.googleapis.com/freebase/v1/search"); url.put("query", "Cee Lo Green"); url.put("filter", "(all type:/music/artist created:\"The Lady Killer\")"); url.put("limit", "10"); url.put("indent", "true"); url.put("key", properties.get("API_KEY")); HttpRequest request = requestFactory.buildGetRequest(url); HttpResponse httpResponse = request.execute(); JSONObject response = (JSONObject)parser.parse(httpResponse.parseAsString()); JSONArray results = (JSONArray)response.get("result"); for (Object result : results) { System.out.println(JsonPath.read(result,"$.name").toString()); } } catch (Exception ex) { ex.printStackTrace(); } } }
JavaScript
<!DOCTYPE html> <html> <head> <script src="https://www.gstatic.com/external_hosted/jquery2.min.js"></script> </head> <body><aside class="warning"><strong>Warning: </strong>The Freebase API will be retired on June 30, 2015.</aside> <script> var service_url = 'https://www.googleapis.com/freebase/v1/search'; var params = { 'query': 'Cee Lo Green', 'filter': '(all type:/music/artist created:"The Lady Killer")', 'limit': 10, 'indent': true }; $.getJSON(service_url + '?callback=?', params).done(function(response) { $.each(response.result, function(i, result) { $('<div>', {text:result['name']}).appendTo(document.body); }); }); </script> </body> </html>En este ejemplo, se usa la biblioteca jQuery.
PHP
<!DOCTYPE html> <html> <body> <?php include('.freebase-api-key'); $service_url = 'https://www.googleapis.com/freebase/v1/search'; $params = array( 'query' => 'Blue Bottle', 'key' => $freebase_api_key ); $url = $service_url . '?' . http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = json_decode(curl_exec($ch), true); curl_close($ch); foreach($response['result'] as $result) { echo $result['name'] . '<br/>'; } ?> </body> </html>
Consulta también la página Bibliotecas cliente para ver si tu lenguaje favorito es compatible.
Documentación de la API de búsqueda
Consulta también la siguiente documentación:
- Consulta los documentos de referencia de la Búsqueda para obtener detalles sobre cómo usar la API.
- Consulta la Guía de soluciones de búsqueda para obtener más información sobre cómo elaborar consultas de búsqueda detalladas.
- Consulta el documento Metaesquema de Búsqueda para obtener información sobre cómo se describen las relaciones entre entidades y propiedades.
Consideraciones de seguridad
La API de búsqueda indexa y busca contenido generado por el usuario almacenado en el gráfico de Freebase. Esto significa que no puedes usar directamente el contenido de una página web sin haber escapado de manera segura primero.
Consulta Introducción: Seguridad para obtener más información.
Filtro avanzado
La API de búsqueda admite una gran cantidad de restricciones de filtro para orientar mejor la búsqueda a las entidades correctas.
Por ejemplo, con una restricción de filtro de tipo, podemos mostrar una lista de las personas más destacadas en Freebase.
filter=(any type:/people/person)
Las restricciones de filtro aceptan una variedad de entradas:
- ID legibles para entidades o usuarios de esquema, por ejemplo:
/people/person
para una restricción de tipo/film
para una restricción de dominio
- MID de Freebase, por ejemplo:
/m/01g317
para la misma restricción de tipo/people/person
/m/010s
para la restricción de dominio/film
anterior
- Nombres de entidades, por ejemplo:
"person"
para una restricción de tipo/people/person
menos precisa"film"
para una restricción de dominio/film
menos precisa
Las restricciones de filtro se pueden clasificar en varias categorías. Consulta la Guía de soluciones de Búsqueda para obtener más información.
Las restricciones de filtro se pueden combinar y repetir libremente directamente en SearchRequest
. Los parámetros de restricción de filtro repetidos se combinan en una consulta OR. Los diferentes parámetros o grupos de restricciones de filtro se combinan en una consulta AND.
Por ejemplo:
Para buscar &personas o ciudades llamadas Gore, prueba lo siguiente:
query=gore &filter=(any type:/people/person type:/location/citytown)
Este comportamiento de combinación se puede anular y controlar mejor con el parámetro de filtro, que ofrece una interfaz más completa para combinar restricciones. Es una expresión S, posiblemente anidada de forma arbitraria, en la que el operador es uno de los siguientes:
any
, lógicamente, un ORall
, lógicamente, un ANDnot
should
, que solo se puede usar en el nivel superior y que denota que la restricción es opcional. Durante la puntuación, las coincidencias que no tienen restricciones opcionales tienen su puntuación dividida por la mitad para cada restricción opcional con la que no coinciden.
Por ejemplo:
Para hacer coincidir con el tipo /people/person
o el dominio /film
, prueba lo siguiente:
query=gore &filter=(any type:/people/person domain:/film)