Panoramica

L'API Freebase Search fornisce l'accesso ai dati di Freebase data una query di testo libero. I risultati della query sono ordinati e hanno un punteggio di pertinenza numerico.
Gli sviluppatori possono applicare filtri per limitare i risultati di ricerca a determinati tipi di dati. Per saperne di più su come creare query di ricerca dettagliate, consulta la Guida alla ricerca.
Ecco alcuni esempi di come gli sviluppatori potrebbero voler utilizzare l'API Search:
- Suggerimento automatico di entità (ad es. widget di suggerimento Freebase)
- Ottenere un elenco classificato delle entità più importanti con un determinato nome.
- Trovare entità utilizzando Search Metaschema.
I seguenti esempi di codice in diverse lingue supportate mostrano come eseguire una ricerca di un artista musicale che corrisponda al testo "Cee Lo Green". Un ulteriore vincolo è che abbia creato qualcosa chiamato "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>
Consulta anche la pagina Librerie client per verificare se la tua lingua preferita è supportata.
Documentazione dell'API Search
Consulta anche la seguente documentazione:
- Per informazioni dettagliate su come utilizzare l'API, consulta i documenti di riferimento per la ricerca.
- Per saperne di più su come creare query di ricerca dettagliate, consulta la Guida alla ricerca.
- Consulta il documento Metaschema di ricerca per informazioni su come vengono descritte le relazioni tra entità e proprietà.
Considerazioni sulla sicurezza
L'API Search indicizza e cerca i contenuti generati dagli utenti memorizzati nel grafico Freebase. Ciò significa che non puoi utilizzare direttamente i contenuti di una pagina web senza prima eseguirne l'escape in modo sicuro.
Per ulteriori informazioni, consulta la sezione Guida introduttiva: sicurezza.
Filtro avanzato
L'API Search supporta un numero elevato di vincoli di filtro per indirizzare meglio la ricerca alle entità corrette.
Ad esempio, utilizzando un vincolo di filtro "tipo", possiamo mostrare un elenco delle persone più importanti di Freebase.
filter=(any type:/people/person)
I vincoli di filtro accettano una serie di input:
- ID leggibili per le persone per entità o utenti dello schema, ad esempio:
/people/person
per un vincolo di tipo/film
per un vincolo di dominio
- MID di Freebase, ad esempio:
/m/01g317
per lo stesso vincolo di tipo/people/person
/m/010s
per il vincolo di dominio/film
riportato sopra
- Nomi delle entità, ad esempio:
"person"
per un vincolo di tipo/people/person
meno preciso"film"
per un vincolo di dominio/film
meno preciso
I vincoli dei filtri possono essere classificati in alcune categorie. Per ulteriori dettagli, consulta il Search Cookbook.
I vincoli di filtro possono essere combinati e ripetuti liberamente direttamente in SearchRequest
. I parametri di vincolo di filtro ripetuti vengono combinati in una query OR. Diversi parametri o gruppi di vincoli di filtro vengono combinati in una query AND.
Ad esempio:
Per cercare "persone o città di nome Gore", prova a cercare:
query=gore &filter=(any type:/people/person type:/location/citytown)
Questo comportamento di combinazione può essere sostituito e controllato meglio con il parametro filter, che offre un'interfaccia più ricca per combinare i vincoli. È un'espressione S, possibilmente nidificata in modo arbitrario, in cui l'operatore è uno dei seguenti:
any
, logicamente un ORall
, logicamente un ANDnot
should
, che può essere utilizzato solo a livello superiore e che indica che il vincolo è facoltativo. Durante l'assegnazione del punteggio, il punteggio delle corrispondenze che non soddisfano i vincoli facoltativi viene diviso a metà per ogni vincolo facoltativo che non soddisfano.
Ad esempio:
Per la corrispondenza con il tipo /people/person
o il dominio /film
, prova a:
query=gore &filter=(any type:/people/person domain:/film)