Übersicht
Die Freebase Search API bietet Zugriff auf Freebase-Daten bei einer Freitextabfrage. Die Ergebnisse der Abfrage sind geordnet 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 Cookbook zur Suche.
Hier sind einige Beispiele dafür, wie Entwickler die Search API verwenden können:
- Automatisch vorgeschlagene Entitäten (z.B. Freebase Suggest Widget)
- Abrufen einer Rangliste der bekanntesten Entitäten mit einem bestimmten Namen.
- Entitäten mit Search Metaschema suchen.
Die folgenden Codebeispiele in mehreren unterstützten Sprachen zeigen, wie eine Suche nach einem Musiker durchgeführt wird, der mit dem Text „Cee Lo Green“ übereinstimmt. Eine zusätzliche Einschränkung besteht darin, dass er eine Datei 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'] }In diesem Beispiel werden die Bibliotheken Httparty und Addressable verwendet.
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 diesem Beispiel wird die jQuery-Bibliothek verwendet.
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>
Sehen Sie auf der Seite Clientbibliotheken nach, ob Ihre bevorzugte Sprache unterstützt wird.
Search API-Dokumentation
Weitere Informationen finden Sie in der folgenden Dokumentation:
- Weitere Informationen zur Verwendung der API finden Sie in den Referenzdokumenten suchen.
- Weitere Informationen zum Erstellen detaillierter Suchanfragen finden Sie im Cookbook zur Suche.
- Weitere Informationen zur Beschreibung der Beziehungen zwischen Entitäten und Eigenschaften finden Sie im Meta-Schema für die Suche.
Sicherheitsaspekte
Die Search API indexiert und durchsucht von Nutzern erstellte Inhalte, die in der Freebase-Grafik gespeichert sind. Das bedeutet, dass Sie den Inhalt auf einer Webseite nicht direkt verwenden können, ohne zuerst sicher zu entkommen.
Weitere Informationen finden Sie unter Erste Schritte: Sicherheit.
Erweiterte Filterung
Die Search API unterstützt eine Vielzahl von Filtereinschränkungen, um die Suche besser auf die richtigen Entitäten auszurichten.
Wenn wir beispielsweise die Filtereinschränkung „Typ“ verwenden, können wir eine Liste der bekanntesten Personen in Freebase anzeigen.
filter=(any type:/people/person)
Für Filtereinschrä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 Domaineinschränkung
- Freebase-MIDs, z. B.:
/m/01g317
für dieselbe Einschränkung des Typs/people/person
/m/010s
für die oben angegebene Domaineinschränkung/film
- Namen von Entitäten, z. B.:
"person"
für eine weniger genaue Einschränkung des Typs/people/person
"film"
für eine weniger genaue Domaineinschränkung für/film
Filtereinschränkungen können in verschiedene Kategorien eingeteilt werden. Weitere Informationen findest du im Cookbook zur Suche.
Filtereinschränkungen können direkt in SearchRequest
kombiniert und wiederholt werden. Wiederholte Filtereinschränkungsparameter werden in einer ODER-Abfrage kombiniert. Verschiedene Filtereinschränkungsparameter oder -gruppen werden in einer UND-Abfrage kombiniert.
Beispiel:
Wenn Sie nach Personen oder Städten mit dem Namen Gore suchen möchten, versuchen Sie Folgendes:
query=gore &filter=(any type:/people/person type:/location/citytown)
Dieses Kombinationsverhalten kann überschrieben und besser mit dem Filterparameter gesteuert werden, der eine umfassendere Schnittstelle zur Kombination von Einschränkungen bietet. Hierbei handelt es sich um einen s-Ausdruck, der möglicherweise beliebig verschachtelt ist, wobei der Operator entweder
any
, logisch ODERall
, logisch UNDnot
should
, die nur auf oberster Ebene verwendet werden kann. Sie gibt an, dass die Einschränkung optional ist. Während der Bewertung wird die Punktzahl von Übereinstimmungen, die nicht mit optionalen Einschränkungen übereinstimmen, für jede optionale Einschränkung, die sie nicht erfüllen, halbiert.
Beispiel:
Für den Abgleich mit dem Typ /people/person
oder der Domain /film
versuchen Sie Folgendes:
query=gore &filter=(any type:/people/person domain:/film)