Visão geral
A API Freebase Search fornece acesso aos dados da Freebase com base em uma consulta de texto livre. Os resultados da consulta são ordenados e têm uma pontuação de relevância numérica.
Os desenvolvedores podem aplicar filtros para restringir os resultados da pesquisa a determinados tipos de dados. Consulte o Livro de receitas de pesquisa para mais informações sobre como criar consultas de pesquisa detalhadas.
Alguns exemplos de como os desenvolvedores podem usar a API Search:
- Entidades de sugestão automática (por exemplo, widget de sugestão do Freebase)
- Receber uma lista classificada das entidades mais notáveis com um determinado nome.
- Encontrar entidades usando o metasquema de pesquisa.
Os exemplos de código a seguir em várias linguagens compatíveis mostram como pesquisar um artista musical que corresponda ao texto "Cee Lo Green". Outra restrição é que ele criou algo chamado "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>
Consulte também a página Bibliotecas de cliente para saber se seu idioma preferido é compatível.
Documentação da API Search
Consulte também a seguinte documentação:
- Consulte os documentos de referência de pesquisa para saber como usar a API.
- Consulte o Livro de receitas de pesquisa para mais informações sobre como criar consultas de pesquisa detalhadas.
- Consulte o documento de metasquema de pesquisa para saber como as relações entre entidades e propriedades são descritas.
Considerações sobre segurança
A API Search indexa e pesquisa conteúdo gerado pelo usuário armazenado no gráfico do Freebase. Isso significa que não é possível usar diretamente o conteúdo de uma página da Web sem fazer o escape de forma segura primeiro.
Consulte Introdução: segurança para mais informações.
Filtragem avançada
A API Search é compatível com um grande número de restrições de filtro para direcionar melhor a pesquisa às entidades corretas.
Por exemplo, usando uma restrição de filtro "tipo", podemos mostrar uma lista das pessoas mais notáveis na Freebase.
filter=(any type:/people/person)
As restrições de filtro aceitam várias entradas:
- IDs legíveis para humanos de entidades ou usuários do esquema, por exemplo:
/people/personpara uma restrição de tipo/filmpara uma restrição de domínio
- MIDs do Freebase, por exemplo:
/m/01g317para a mesma restrição de tipo/people/person/m/010spara a restrição de domínio/filmacima
- Nomes de entidades, por exemplo:
"person"para uma restrição de tipo/people/personmenos precisa"film"para uma restrição de domínio/filmmenos precisa
As restrições de filtro podem ser classificadas em algumas categorias. Consulte o Cookbook de pesquisa para mais detalhes.
As restrições de filtro podem ser combinadas e repetidas livremente diretamente no SearchRequest. Parâmetros de restrição de filtro repetidos são combinados em uma consulta OR. Diferentes parâmetros ou grupos de restrição de filtro são combinados em uma consulta AND.
Por exemplo:
Para pesquisar "pessoas ou cidades chamadas Gore", tente:
query=gore &filter=(any type:/people/person type:/location/citytown)
Esse comportamento de combinação pode ser substituído e melhor controlado com o parâmetro de filtro, que oferece uma interface mais completa para combinar restrições. É uma expressão S, possivelmente aninhada de forma arbitrária, em que o operador é um dos seguintes:
any, logicamente um ORall, logicamente um ANDnotshould, que só pode ser usado no nível superior e indica que a restrição é opcional. Durante a pontuação, as correspondências que não atendem às restrições opcionais têm a pontuação dividida pela metade para cada restrição opcional que não atendem.
Por exemplo:
Para corresponder ao tipo /people/person ou ao domínio /film, tente:
query=gore &filter=(any type:/people/person domain:/film)