Ringkasan Penelusuran

  1. Ringkasan
  2. Pertimbangan keamanan
  3. Pemfilteran lanjutan

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:

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 OR
  • all, secara logis adalah
  • not
  • 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)