Panoramica
L'API Freebase Search fornisce l'accesso ai dati di Freebase tramite una query di testo senza costi. 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. Consulta il Libro di ricette per la ricerca per ulteriori informazioni su come creare query di ricerca dettagliate.
Ecco alcuni esempi di come gli sviluppatori potrebbero voler usare l'API Search:
- Entità con suggerimenti automatici (ad es. widget Suggerimenti Freebase)
- Recupero di un elenco classificato delle entità più importanti con un determinato nome.
- Trovare entità mediante Metaschema di ricerca.
I seguenti esempi di codice in diverse lingue supportate mostrano come eseguire una ricerca per un artista musicale che corrisponda al testo "Cee Lo Green". Un ulteriore vincolo è che è stato 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'] }In questo esempio vengono utilizzate le librerie Httparty e 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>In questo esempio viene utilizzata la libreria 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 anche la pagina Librerie client per sapere se il tuo linguaggio preferito è supportato.
Documentazione dell'API Search
Consulta anche la seguente documentazione:
- Per informazioni dettagliate su come utilizzare l'API, vedi i documenti di riferimento per la Ricerca.
- Consulta il Libro di ricette per la ricerca per ulteriori informazioni su come creare query di ricerca dettagliate.
- Per informazioni su come sono descritte le relazioni tra entità e proprietà, consulta il documento Metaschema di ricerca.
Considerazioni sulla sicurezza
L'API Search indicizza e cerca i contenuti generati dagli utenti archiviati nel grafico Freebase. Ciò significa che non puoi utilizzare direttamente i contenuti di una pagina web senza eseguire prima l'escape.
Per ulteriori informazioni, consulta la guida introduttiva alla sicurezza.
Filtro avanzato
L'API Search supporta un numero elevato di vincoli del filtro per indirizzare meglio la ricerca alle entità corrette.
Ad esempio, utilizzando un vincolo di filtro "type" possiamo mostrare un elenco delle persone più importanti in Freebase.
filter=(any type:/people/person)
I vincoli del filtro accettano vari input:
- ID leggibili da persone fisiche per entità o utenti dello schema, ad esempio:
/people/person
per un vincolo di tipo/film
per un vincolo del dominio
- MID freebase, ad esempio:
/m/01g317
per lo stesso vincolo di tipo/people/person
/m/010s
per il vincolo del dominio/film
sopra indicato
- 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 relativi al filtro possono essere classificati in alcune categorie. Per ulteriori dettagli, consulta il Libro di ricette.
I vincoli del filtro possono essere combinati e ripetuti senza costi direttamente in SearchRequest
. I parametri dei vincoli del filtro ripetuto vengono combinati in una query OR. Parametri o gruppi di vincoli di filtro diversi vengono combinati in una query AND.
Ad esempio:
Per cercare "persone o città denominate Gore", prova a:
query=gore &filter=(any type:/people/person type:/location/citytown)
Questo comportamento di combinazione può essere sostituito e migliorato controllato con il parametro filtro, che offre un'interfaccia più ricca per combinare i vincoli. Si tratta di un'espressione s, possibilmente arbitrariamente nidificata, in cui l'operatore è uno di:
any
, logicamente un ORall
, in modo logico Enot
should
, che può essere utilizzato solo al livello più alto e che indica che il vincolo è facoltativo. Durante il punteggio, le corrispondenze che non corrispondono ai vincoli facoltativi hanno un punteggio diviso a metà per ogni vincolo facoltativo a cui non corrispondono.
Ad esempio:
Per creare una corrispondenza con il dominio /people/person
o il dominio /film
, prova a:
query=gore &filter=(any type:/people/person domain:/film)