Ringkasan
Freebase Search API menyediakan akses ke data Freebase berdasarkan kueri teks bebas. Hasil kueri diurutkan dan memiliki skor relevansi numerik.
Developer dapat menerapkan filter untuk membatasi hasil penelusuran ke jenis data tertentu. Lihat Search Cookbook untuk mengetahui informasi selengkapnya tentang cara membuat kueri penelusuran yang mendetail.
Beberapa contoh cara penggunaan Search API oleh developer antara lain:
- Menyarankan entitas secara otomatis (misalnya, Freebase Suggest Widget)
- Mendapatkan daftar berperingkat entity yang paling penting dengan nama tertentu.
- Menemukan entitas menggunakan Search Metaschema.
Contoh kode berikut dalam beberapa bahasa yang didukung menunjukkan cara melakukan penelusuran artis musik yang cocok dengan teks “Cee Lo Green”. Batasan tambahan adalah bahwa mereka menciptakan sesuatu yang disebut “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'] }
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>
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>
Lihat juga halaman Client Libraries untuk mengetahui apakah bahasa favorit Anda didukung.
Dokumentasi Search API
Lihat juga dokumentasi berikut:
- Lihat Dokumen referensi Penelusuran untuk mengetahui detail cara menggunakan API.
- Lihat Search Cookbook untuk mengetahui informasi selengkapnya tentang cara membuat kueri penelusuran yang mendetail.
- Lihat dokumen Metaskema Penelusuran untuk mengetahui informasi tentang cara hubungan antara entity dan properti dijelaskan.
Pertimbangan keamanan
Search API mengindeks dan menelusuri konten buatan pengguna yang disimpan dalam grafik Freebase. Artinya, Anda tidak dapat langsung menggunakan konten di halaman web tanpa melakukan escape dengan aman terlebih dahulu.
Lihat Memulai: Keamanan untuk mengetahui informasi selengkapnya.
Pemfilteran lanjutan
Search API mendukung sejumlah besar batasan filter untuk menargetkan penelusuran ke entitas yang benar dengan lebih baik.
Misalnya, dengan menggunakan batasan filter "type", kita dapat menampilkan daftar orang-orang paling terkenal di Freebase.
filter=(any type:/people/person)
Batasan filter menerima berbagai input:
- ID yang dapat dibaca manusia untuk entitas atau pengguna skema, misalnya:
/people/personuntuk batasan jenis/filmuntuk batasan domain
- MID Freebase, misalnya:
/m/01g317untuk batasan jenis/people/personyang sama/m/010suntuk batasan domain/filmdi atas
- Nama entitas, misalnya:
"person"untuk batasan jenis/people/personyang kurang presisi"film"untuk batasan domain/filmyang kurang presisi
Batasan filter dapat diklasifikasikan ke dalam beberapa kategori. Lihat Search Cookbook untuk mengetahui detail selengkapnya.
Batasan filter dapat digabungkan dan diulang secara bebas di SearchRequest secara langsung. Parameter batasan filter berulang digabungkan menjadi kueri OR. Parameter atau grup batasan filter yang berbeda digabungkan menjadi kueri AND.
Contoh:
Untuk menelusuri "orang atau kota bernama Gore", coba:
query=gore &filter=(any type:/people/person type:/location/citytown)
Perilaku penggabungan ini dapat diganti dan dikontrol dengan lebih baik menggunakan parameter filter yang menawarkan antarmuka yang lebih kaya untuk menggabungkan batasan. Ini adalah ekspresi-s, yang mungkin disusun bertingkat secara arbitrer, dengan operatornya adalah salah satu dari:
any, secara logis adalah ORall, secara logis adalah ANDnotshould, yang hanya dapat digunakan di tingkat teratas dan yang menunjukkan bahwa batasan bersifat opsional. Selama pemberian skor, kecocokan yang tidak cocok dengan batasan opsional akan dibagi dua skornya untuk setiap batasan opsional yang tidak cocok.
Contoh:
Untuk mencocokkan jenis /people/person atau domain /film, coba:
query=gore &filter=(any type:/people/person domain:/film)