Présentation

L'API Freebase Search permet d'accéder aux données Freebase à partir d'une requête en texte libre. Les résultats de la requête sont classés et associés à un score de pertinence numérique.
Les développeurs peuvent appliquer des filtres pour limiter les résultats de recherche à certains types de données. Pour savoir comment créer des requêtes de recherche détaillées, consultez le Guide pratique de la recherche.
Voici quelques exemples d'utilisation de l'API Search par les développeurs :
- Entités suggérées automatiquement (par exemple, widget de suggestions Freebase)
- Obtenir une liste classée des entités les plus notables portant un nom donné.
- Rechercher des entités à l'aide de Search Metaschema.
Les exemples de code suivants, dans plusieurs langages compatibles, montrent comment rechercher un artiste musical correspondant au texte "Cee Lo Green". Une contrainte supplémentaire est qu'il a créé quelque chose appelé "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.mi><n.js&qu>o<t;/sc>r<ipt<>/span> </head bodyaside class><=">;warning&<quot;st>rongWarning: /strongThe Freebase API will be retired< on Ju>n<e 30,<>/span> 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=?',< pa>rams).done(function(response) { $.each(response.result, funct<ion(i, >r<esult>)< { > $('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 = arra>y( 'query' = >39;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['<;re>sult'>;<] as >$<resul>t) { echo $result['name'] . 'br/'; } ? /body /html
Consultez également la page Bibliothèques clientes pour savoir si votre langage préféré est accepté.
Documentation de l'API Search
Consultez également la documentation suivante :
- Pour savoir comment utiliser l'API, consultez les documents de référence sur la recherche.
- Pour savoir comment créer des requêtes de recherche détaillées, consultez le Guide pratique de la recherche.
- Pour savoir comment les relations entre les entités et les propriétés sont décrites, consultez le document sur le métaschéma de recherche.
Considérations de sécurité
L'API Search indexe et recherche le contenu généré par les utilisateurs stocké dans le graphique Freebase. Cela signifie que vous ne pouvez pas utiliser directement le contenu d'une page Web sans l'échapper de manière sécurisée au préalable.
Pour en savoir plus, consultez Premiers pas : sécurité.
Filtrage avancé
L'API Search accepte un grand nombre de contraintes de filtrage pour mieux cibler les entités appropriées.
Par exemple, en utilisant une contrainte de filtre "type", nous pouvons afficher une liste des personnalités les plus notables de Freebase.
filter=(any type:/people/person)
Les contraintes de filtre acceptent différents types d'entrées :
- ID lisibles par l'homme pour les entités ou les utilisateurs du schéma, par exemple :
/people/person
pour une contrainte de type/film
pour une contrainte de domaine
- Exemples de MID Freebase :
/m/01g317
pour la même contrainte de type/people/person
/m/010s
pour la contrainte de domaine/film
ci-dessus
- Noms d'entités, par exemple :
"person"
pour une contrainte de type/people/person
moins précise"film"
pour une contrainte de domaine/film
moins précise
Les contraintes de filtrage peuvent être classées dans plusieurs catégories. Pour en savoir plus, consultez le guide de recherche.
Les contraintes de filtre peuvent être librement combinées et répétées directement dans SearchRequest
. Les paramètres de contrainte de filtre répétés sont combinés dans une requête OR. Différents paramètres ou groupes de contraintes de filtre sont combinés dans une requête AND.
Exemples :
Pour rechercher des "personnes ou villes nommées Gore", essayez :
query=gore &filter=(any type:/people/person type:/location/citytown)
Ce comportement de combinaison peut être remplacé et mieux contrôlé avec le paramètre de filtre, qui offre une interface plus riche pour combiner les contraintes. Il s'agit d'une s-expression, éventuellement imbriquée de manière arbitraire, où l'opérateur est l'un des suivants :
any
, logiquement un ORall
, logiquement un ANDnot
should
, qui ne peut être utilisé qu'au niveau supérieur et qui indique que la contrainte est facultative. Lors de la notation, le score des correspondances qui ne respectent pas les contraintes facultatives est divisé par deux pour chaque contrainte facultative non respectée.
Exemples :
Pour cibler le type /people/person
ou le domaine /film
, essayez :
query=gore &filter=(any type:/people/person domain:/film)