Descripción general

La API de Freebase Search proporciona acceso a los datos de Freebase a partir de una consulta de texto libre. Los resultados de la búsqueda se ordenan y tienen una puntuación de relevancia numérica.
Los desarrolladores pueden aplicar filtros para restringir los resultados de la búsqueda a ciertos tipos de datos. Consulta el Libro de cocina de la Búsqueda para obtener más información sobre cómo crear consultas de búsqueda detalladas.
Estos son algunos ejemplos de cómo los desarrolladores pueden usar la API de Search:
- Sugerencia automática de entidades (p.ej., Freebase Suggest Widget)
- Obtener una lista clasificada de las entidades más destacadas con un nombre determinado
- Cómo encontrar entidades con Search Metaschema
En las siguientes muestras de código en varios lenguajes admitidos, se muestra cómo realizar una búsqueda de un artista musical que coincida con el texto “Cee Lo Green”. Una restricción adicional es que haya creado algo llamado “The Lady Killer”.
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'] }
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>
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>
También puedes consultar la página Bibliotecas cliente para ver si se admite tu lenguaje favorito.
Documentación de la API de Search
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 el Libro de cocina de la Búsqueda para obtener más información sobre cómo crear consultas de búsqueda detalladas.
- Consulta el documento de Metasquema de búsqueda para obtener información sobre cómo se describen las relaciones entre entidades y propiedades.
Consideraciones de seguridad
La API de Search indexa y busca contenido generado por usuarios almacenado en el gráfico de Freebase. Esto significa que no puedes usar directamente el contenido de una página web sin escaparlo de forma segura primero.
Consulta Cómo comenzar: Seguridad para obtener más información.
Filtrado avanzado
La API de Search admite una gran cantidad de restricciones de filtro para orientar mejor la búsqueda hacia 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:
- Son IDs legibles para personas de entidades o usuarios del esquema, por ejemplo:
/people/person
para una restricción de tipo/film
para una restricción de dominio
- Por ejemplo, los MIDs de Freebase:
/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 algunas categorías. Consulta el Recetario de búsqueda para obtener más detalles.
Las restricciones de filtro se pueden combinar y repetir libremente en la SearchRequest
directamente. 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 enriquecida 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 indica que la restricción es opcional. Durante la puntuación, la puntuación de las coincidencias que no cumplen con las restricciones opcionales se divide a la mitad por cada restricción opcional que no cumplen.
Por ejemplo:
Para hacer coincidir el tipo /people/person
o el dominio /film
, prueba lo siguiente:
query=gore &filter=(any type:/people/person domain:/film)