Übersicht

Die Freebase Search API bietet Zugriff auf Freebase-Daten auf Grundlage einer Freitextanfrage. Die Ergebnisse der Abfrage werden sortiert und haben einen numerischen Relevanzwert.
Entwickler können Filter anwenden, um die Suchergebnisse auf bestimmte Datentypen zu beschränken. Weitere Informationen zum Erstellen detaillierter Suchanfragen finden Sie im Search Cookbook.
Hier einige Beispiele für die Verwendung der Search API durch Entwickler:
- Automatische Vorschläge für Entitäten (z.B. Freebase Suggest Widget)
- Eine sortierte Liste der wichtigsten Entitäten mit einem bestimmten Namen abrufen.
- Entitäten mit Metaschema durchsuchen finden
Die folgenden Codebeispiele in mehreren unterstützten Sprachen zeigen, wie Sie nach einem Musikkünstler suchen, der dem Text „Cee Lo Green“ entspricht. Eine zusätzliche Einschränkung ist, dass er etwas namens „The Lady Killer“ erstellt hat.
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>
Auf der Seite Clientbibliotheken können Sie nachsehen, ob Ihre bevorzugte Sprache unterstützt wird.
Dokumentation zur Search API
Weitere Informationen finden Sie in der folgenden Dokumentation:
- Weitere Informationen zur Verwendung der API finden Sie unter Referenzdokumente durchsuchen.
- Weitere Informationen zum Erstellen detaillierter Suchanfragen finden Sie im Search Cookbook.
- Informationen dazu, wie die Beziehungen zwischen Entitäten und Attributen beschrieben werden, finden Sie im Metaschema für die Suche.
Sicherheitsaspekte
Die Search API indexiert und durchsucht nutzergenerierte Inhalte, die im Freebase-Diagramm gespeichert sind. Das bedeutet, dass Sie die Inhalte auf einer Webseite nicht direkt verwenden können, ohne sie vorher sicher zu escapen.
Weitere Informationen finden Sie unter Erste Schritte: Sicherheit.
Erweiterte Filterung
Die Search API unterstützt eine Vielzahl von Filterbedingungen, um die Suche besser auf die richtigen Einheiten auszurichten.
Mit einer Filterbeschränkung vom Typ „type“ können wir beispielsweise eine Liste der wichtigsten Personen in Freebase anzeigen.
filter=(any type:/people/person)
Für Filterbeschränkungen sind verschiedene Eingaben möglich:
- Für Menschen lesbare IDs für Schemaentitäten oder Nutzer, z. B.:
/people/person
für eine Typeinschränkung/film
für eine Domäne
- Beispiele für Freebase-MIDs:
/m/01g317
für dieselbe Einschränkung vom Typ/people/person
/m/010s
für die oben genannte/film
-Domaineinschränkung
- Entitätsnamen, z. B.:
"person"
für eine weniger genaue Einschränkung des Typs/people/person
"film"
für eine weniger genaue/film
-Domaineinschränkung
Filtereinschränkungen lassen sich in einige Kategorien einteilen. Weitere Informationen finden Sie im Search Cookbook.
Filtereinschränkungen können in der SearchRequest
beliebig kombiniert und wiederholt werden. Wiederholte Parameter für Filterbeschränkungen werden in einer ODER-Abfrage kombiniert. Verschiedene Parameter oder Gruppen von Filterbedingungen werden zu einer AND-Abfrage kombiniert.
Beispiel:
Wenn Sie nach „Personen oder Städten mit dem Namen Gore“ suchen möchten, geben Sie Folgendes ein:
query=gore &filter=(any type:/people/person type:/location/citytown)
Dieses Kombinationsverhalten kann mit dem Filterparameter überschrieben und besser gesteuert werden. Dieser bietet eine umfangreichere Schnittstelle zum Kombinieren von Einschränkungen. Es handelt sich um einen S-Ausdruck, der beliebig verschachtelt sein kann. Der Operator ist einer der folgenden:
any
, logisch ein ODERall
, logisch ein UNDnot
should
, das nur auf der obersten Ebene verwendet werden kann und angibt, dass die Einschränkung optional ist. Bei der Bewertung wird die Punktzahl von Übereinstimmungen, die nicht den optionalen Einschränkungen entsprechen, für jede optionale Einschränkung, die nicht erfüllt wird, halbiert.
Beispiel:
Wenn Sie nach dem Typ /people/person
oder der Domain /film
suchen möchten, versuchen Sie Folgendes:
query=gore &filter=(any type:/people/person domain:/film)