Обзор

API поиска Freebase предоставляет доступ к данным Freebase по произвольному текстовому запросу. Результаты запроса упорядочены и имеют числовую оценку релевантности.
Разработчики могут применять фильтры, чтобы ограничить результаты поиска определёнными типами данных. Подробнее о построении подробных поисковых запросов см. в книге «Поиск» .
Вот несколько примеров того, как разработчики могут использовать API поиска:
- Автоматически предлагающие сущности (например, Freebase Suggest Widget )
- Получение ранжированного списка наиболее примечательных объектов с заданным названием.
- Поиск сущностей с использованием Search Metaschema .
Следующие примеры кода на нескольких поддерживаемых языках показывают, как выполнить поиск исполнителя, соответствующего тексту «Cee Lo Green». Дополнительным ограничением является то, что они создали некий «The Lady Killer».
Питон
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'] }
Ява
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>
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 см. в справочных документах поиска .
- Дополнительную информацию о том, как составлять подробные поисковые запросы, см. в « Книге рецептов поиска» .
- Информацию об описании взаимосвязей между сущностями и свойствами см. в документе Search Metaschema.
Соображения безопасности
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
. Повторяющиеся параметры ограничений фильтра объединяются в запрос OR. Различные параметры или группы ограничений фильтра объединяются в запрос 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)