Обзор
Freebase Search API предоставляет доступ к данным Freebase с помощью произвольного текстового запроса. Результаты запроса упорядочены и имеют числовую оценку релевантности.
Разработчики могут применять фильтры, чтобы ограничить результаты поиска определенными типами данных. Дополнительную информацию о том, как создавать подробные поисковые запросы, см. в Руководстве по поиску.
Некоторые примеры того, как разработчики могут захотеть использовать API поиска, включают:
- Сущности с автоматическим предложением (например, Freebase Suggest Widget )
- Получение ранжированного списка наиболее заметных сущностей с заданным именем.
- Поиск сущностей с помощью метасхемы поиска .
В следующих примерах кода на нескольких поддерживаемых языках показано, как выполнить поиск музыкального исполнителя, который соответствует тексту «Cee Lo Green». Дополнительным ограничением является то, что они создали что-то под названием «Леди-убийца».
питон
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']) + ')')
Рубин
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'] }В этом примере используются библиотеки Httparty и Addressable .
Ява
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>В этом примере используется библиотека 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>
Также см. страницу клиентских библиотек , чтобы узнать, поддерживается ли ваш любимый язык.
Документация по API поиска
Также см. следующую документацию:
- Дополнительные сведения об использовании API см. в справочных документах по поиску .
- Дополнительную информацию о том, как создавать подробные поисковые запросы, см. в Руководстве по поиску.
- См. документ Метасхема поиска для получения информации о том, как описываются отношения между сущностями и свойствами.
Соображения безопасности
API поиска индексирует и ищет пользовательский контент, хранящийся в графе Freebase. Это означает, что вы не можете напрямую использовать контент на веб-странице без предварительного безопасного экранирования.
Дополнительные сведения см. в разделе Начало работы: безопасность .
Расширенная фильтрация
API поиска поддерживает большое количество ограничений фильтрации, чтобы лучше ориентировать поиск на правильные объекты.
Например, используя ограничение фильтра «тип», мы можем показать список самых известных людей в Freebase.
filter=(any type:/people/person)
Ограничения фильтра принимают различные входные данные:
- Удобочитаемые идентификаторы объектов схемы или пользователей, например:
-
/people/person
для ограничения типа -
/film
для ограничения домена
-
- Freebase MID, например:
-
/m/01g317
для того же ограничения типа/people/person
-
/m/010s
для вышеуказанного ограничения домена/film
-
- Имена объектов, например:
-
"person"
для менее точного ограничения типа/people/person
-
"film"
для менее точного ограничения домена/film
-
Ограничения фильтра можно разделить на несколько категорий. См. поваренную книгу поиска для получения более подробной информации.
Ограничения фильтра можно свободно комбинировать и повторять непосредственно в SearchRequest
. Повторяющиеся параметры ограничения фильтра объединяются в запрос ИЛИ. Различные параметры или группы ограничений фильтра объединяются в запрос AND.
Например:
Чтобы найти «люди или города по имени Гор », попробуйте:
query=gore &filter=(any type:/people/person type:/location/citytown)
Это поведение объединения можно переопределить и лучше контролировать с помощью параметра фильтра, который предлагает более богатый интерфейс для ограничений объединения. Это s-выражение, возможно произвольно вложенное, где оператор является одним из:
-
any
, логически ИЛИ -
all
, логически И -
not
-
should
, который можно использовать только на верхнем уровне и который означает, что ограничение является необязательным. Во время подсчета очков совпадения, которые не соответствуют необязательным ограничениям, делятся пополам для каждого несоответствующего необязательного ограничения.
Например:
Чтобы сопоставить тип /people/person
или домен /film
, попробуйте:
query=gore &filter=(any type:/people/person domain:/film)