Panoramica rete di ricerca

  1. Panoramica
  2. Considerazioni sulla sicurezza
  3. Filtri avanzati

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:

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:

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 OR
  • all, in modo logico E
  • not
  • 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)