Descripción general de la búsqueda

  1. Descripción general
  2. Consideraciones de seguridad
  3. Filtro avanzado

Descripción general

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:

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:

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 OR
  • all, lógicamente, un AND
  • not
  • 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)