Vue d'ensemble de la recherche

  1. Présentation
  2. Considérations de sécurité
  3. Filtrage avancé

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 :

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']
} 
Cet exemple utilise les bibliothèques Httparty et 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.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
Cet exemple utilise la bibliothèque jQuery.

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 :

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 OR
  • all, logiquement un AND
  • not
  • 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)