Aramaya Genel Bakış

  1. Genel Bakış
  2. Güvenlikle ilgili olarak göz önünde bulundurulması gerekenler
  3. Gelişmiş filtreleme

Genel Bakış

Freebase Search API, serbest metin sorgusu verildiğinde Freebase verilerine erişim sağlar. Sorgunun sonuçları sıralanır ve sayısal bir alaka düzeyi puanı içerir.

Geliştiriciler, arama sonuçlarını belirli veri türleriyle sınırlamak için filtreler uygulayabilir. Ayrıntılı arama sorguları oluşturma hakkında daha fazla bilgi için Arama Yemek Kitabı'na bakın.

Geliştiricilerin Arama API'sini kullanmak isteyebileceği bazı örnekler:

Desteklenen çeşitli dillerdeki aşağıdaki kod örnekleri, "Cee Lo Green" metniyle eşleşen bir müzik sanatçısı için nasıl arama yapılacağını gösterir. Ek bir kısıtlama olarak, sanatçının "The Lady Killer" adlı bir eser oluşturduğu belirtilir.

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']
} 
Bu örnekte Httparty ve Addressable kitaplıkları kullanılmaktadır.

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>
Bu örnekte jQuery kitaplığı kullanılmaktadır.

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>

Ayrıca, en sevdiğiniz dilin desteklenip desteklenmediğini öğrenmek için İstemci Kitaplıkları sayfasına da göz atın.

Search API belgeleri

Ayrıca aşağıdaki belgelere de göz atın:

Güvenlikle ilgili olarak göz önünde bulundurulması gerekenler

Search API, Freebase grafiğinde depolanan kullanıcı tarafından oluşturulan içerikleri dizine ekler ve arar. Bu nedenle, bir web sayfasındaki içeriği önce güvenli bir şekilde kaçış karakteri eklemeden doğrudan kullanamazsınız.

Daha fazla bilgi için Başlangıç: Güvenlik başlıklı makaleye bakın.

Gelişmiş filtreleme

Arama API'si, aramayı doğru öğelere yönlendirmek için çok sayıda filtre kısıtlamasını destekler.

Örneğin, "tür" filtre kısıtlamasını kullanarak Freebase'teki en önemli kişilerin listesini gösterebiliriz.

filter=(any type:/people/person)

Filtre kısıtlamaları çeşitli girişleri kabul eder:

  • Şema öğeleri veya kullanıcılar için insanlar tarafından okunabilir kimlikler (örneğin):
    • /people/person tür kısıtlaması için
    • /film alan kısıtlaması için
  • Örneğin, Freebase MIDs:
    • Aynı /people/person türü kısıtlaması için /m/01g317
    • Yukarıdaki /film alan kısıtlaması için /m/010s
  • Tüzel kişi adları, örneğin:
    • "person" daha az hassas bir /people/person tür kısıtlaması için
    • "film" daha az hassas bir /film alan kısıtlaması için

Filtre kısıtlamaları birkaç kategoride sınıflandırılabilir. Daha fazla bilgi için Arama Yemek Kitabı'na bakın.

Filtre kısıtlamaları doğrudan SearchRequest içinde serbestçe birleştirilebilir ve tekrarlanabilir. Tekrarlanan filtre kısıtlama parametreleri bir OR sorgusunda birleştirilir. Farklı filtre kısıtlama parametreleri veya grupları, AND sorgusunda birleştirilir.

Örneğin:

"Gore adlı kişiler veya şehirler"i aramak için şunları deneyin:

query=gore
&filter=(any type:/people/person type:/location/citytown)

Bu birleştirme davranışı, kısıtlamaları birleştirme konusunda daha zengin bir arayüz sunan filtre parametresiyle geçersiz kılınabilir ve daha iyi kontrol edilebilir. Bu, operatörün aşağıdakilerden biri olduğu, muhtemelen rastgele iç içe yerleştirilmiş bir s-ifadesidir:

  • any, mantıksal olarak VEYA
  • all, mantıksal olarak VE
  • not
  • Yalnızca üst düzeyde kullanılabilen ve kısıtlamanın isteğe bağlı olduğunu belirten should. Puanlama sırasında, isteğe bağlı kısıtlamalarla eşleşmeyen eşleşmelerin puanı, eşleşmedikleri her isteğe bağlı kısıtlama için yarıya bölünür.

Örneğin:

/people/person türü veya /film alanıyla eşleşmek için şunları deneyin:

query=gore
&filter=(any type:/people/person domain:/film)