總覽
Freebase Search API 可讓您免費取得存取的文字查詢,存取 Freebase 資料。查詢結果會排序,且具有數值關聯性分數。
開發人員可以套用篩選器,將搜尋結果限制為特定類型的資料。如要進一步瞭解如何建立詳細的搜尋查詢,請參閱搜尋教戰手冊。
以下列舉開發人員可能會如何使用 Search API:
- 自動建議實體 (例如 Freebase 建議小工具)
- 取得特定名稱中最常見實體的排名清單。
- 使用搜尋中繼結構定義尋找實體。
以下提供幾種支援語言的程式碼範例,說明如何搜尋與「Cee Lo Green」一詞相符的音樂人。另一個限制是名為「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'] }這個範例使用 Httparty 和 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
這個範例使用 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>
另請參閱用戶端程式庫頁面,確認系統是否支援您偏好的語言。
Search API 說明文件
另請參閱說明文件:
- 如要進一步瞭解如何使用 API,請參閱搜尋參考說明文件。
- 如要進一步瞭解如何建立詳細的搜尋查詢,請參閱搜尋教戰手冊。
- 請參閱搜尋中繼結構定義文件,瞭解實體與屬性之間的關係。
安全性考量
在 API 中,Search API 會對使用者產生的內容建立索引並搜尋其內容。也就是說,在未直接逸出的情況下,您就無法直接使用網頁上的內容。
詳情請參閱「開始使用:安全性」。
進階篩選
Search API 支援大量篩選器限制,以便更精準地搜尋適當的實體。
例如,使用「類型」篩選器限制,我們可顯示 Freebase 中最值得注意的對象清單。
filter=(any type:/people/person)
篩選器限制可接受多種輸入值:
- 使用者可理解的結構定義實體或使用者 ID,例如:
- 類型限制的
/people/person
- 網域限制的
/film
- 類型限制的
- Freebase MID,例如:
- 相同
/people/person
類型限制條件的/m/01g317
- 上述
/film
網域限制的/m/010s
- 相同
- 實體名稱,例如:
- 將
"person"
用於較精確的/people/person
類型限制 "film"
可提供更精細的/film
網域限制
- 將
篩選器限制可分為幾個類別。詳情請參閱搜尋教戰手冊。
可以直接在 SearchRequest
中自由合併並篩選篩選器限制。系統會將重複的篩選器限制參數合併為「或」查詢。系統會將不同的篩選器限制參數或群組合併為 AND 查詢。
例如:
如要搜尋「Gore」的人物或城市,請嘗試:
query=gore &filter=(any type:/people/person type:/location/citytown)
您可以利用篩選參數覆寫這個合併行為,並進一步控管篩選器參數,以提供更豐富的組合來合併限制。這是一種 s 運算式 (可能為任意巢狀),其中運算子為以下其中一種:
any
(邏輯方式為 OR)all
,邏輯運算子為「AND」not
should
,只能在頂層使用,代表限制條件。在計分期間,不符合選用限制的相符項目會以分數分隔為無法配對的每項選用限制條件的一半。
例如:
如要比對 /people/person
類型或 /film
網域,請嘗試以下做法:
query=gore &filter=(any type:/people/person domain:/film)