Ringkasan
Freebase Search API menyediakan akses ke data Freebase dengan kueri teks gratis. Hasil kueri diurutkan dan memiliki skor relevansi numerik.
Developer dapat menerapkan filter untuk membatasi hasil penelusuran ke jenis data tertentu. Lihat Cookbook Penelusuran untuk informasi selengkapnya tentang cara membuat kueri penelusuran yang mendetail.
Beberapa contoh cara developer ingin menggunakan Search API meliputi:
- Entitas yang menyarankan otomatis (misalnya, Widget Saran Freebase)
- Mendapatkan daftar peringkat entitas paling penting dengan nama tertentu.
- Menemukan entitas menggunakan Search Metaschema.
Contoh kode berikut dalam beberapa bahasa yang didukung menunjukkan cara melakukan penelusuran untuk artis musik yang cocok dengan teks "Cee Lo Green". Batasan tambahan adalah mereka membuat 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'] }Contoh ini menggunakan library Httparty dan 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>Contoh ini menggunakan library 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>
Lihat juga halaman Library Klien untuk mengetahui apakah bahasa favorit Anda didukung.
Dokumentasi Search API
Lihat juga dokumentasi berikut:
- Lihat Dokumen referensi penelusuran untuk mengetahui detail tentang cara menggunakan API.
- Lihat Cookbook Penelusuran untuk informasi selengkapnya tentang cara membuat kueri penelusuran yang mendetail.
- Lihat dokumen Metaschema Penelusuran untuk informasi tentang bagaimana hubungan antara entity dan properti dijelaskan.
Pertimbangan keamanan
Search API mengindeks dan menelusuri konten buatan pengguna yang disimpan di grafik Freebase. Artinya Anda tidak dapat langsung menggunakan konten di halaman web tanpa meng-escape halaman tersebut dengan aman terlebih dahulu.
Lihat Mulai: Keamanan untuk mengetahui informasi selengkapnya.
Pemfilteran lanjutan
Search API mendukung banyak batasan filter untuk mengarahkan penelusuran ke entitas yang benar dengan lebih baik.
Misalnya, dengan menggunakan batasan filter "type", kita dapat menampilkan daftar orang-orang 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/person
untuk batasan jenis/film
untuk batasan domain
- MID Freebase, misalnya:
/m/01g317
untuk batasan jenis/people/person
yang sama/m/010s
untuk batasan domain/film
di atas
- Nama entitas, misalnya:
"person"
untuk batasan jenis/people/person
yang kurang akurat"film"
untuk batasan domain/film
yang kurang akurat
Batasan filter dapat diklasifikasikan ke dalam beberapa kategori. Lihat Buku resep Penelusuran untuk 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, mungkin bertingkat secara arbitrer, dengan operator adalah salah satu dari:
any
, secara logika ORall
, secara logis adalahnot
should
, yang hanya dapat digunakan di tingkat atas dan yang menunjukkan bahwa batasan bersifat opsional. Selama penilaian, pertandingan yang tidak cocok dengan batasan opsional akan dibagi skor setengahnya untuk setiap batasan opsional yang tidak mereka cocokkan.
Contoh:
Untuk mencocokkannya pada jenis /people/person
atau domain /film
, coba:
query=gore &filter=(any type:/people/person domain:/film)