Ringkasan Penelusuran

  1. Ringkasan
  2. Pertimbangan keamanan
  3. Pemfilteran lanjutan

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']
} 
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.mi><n.js&qu>o<t;/sc>r<ipt<>/span>
</head
bodyaside class><=">;warning&<quot;st>rongWarning: /strongThe Freebase API will be retired< on Ju>n<e 30,<>/span>
  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=?',< pa>rams).done(function(response) {
    $.each(response.result, funct<ion(i, >r<esult>)< {
  >    $('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 = arra>y(
    'query' = &#>39;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['<;re>sult'>;<] as >$<resul>t) {
    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:

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/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 presisi
    • "film" untuk batasan domain /film yang 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 OR
  • all, secara logis adalah AND
  • not
  • should, 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)