Aramaya Genel Bakış

  1. Genel bakış
  2. Güvenlikle ilgili dikkat edilmesi gereken noktalar
  3. Gelişmiş filtreleme

Genel bakış

Freebase Search API, ücretsiz metin sorgusu olanağıyla Freebase verilerine erişim sağlar. Sorgu sonuçları sıralanır ve sayısal bir alaka düzeyi puanı bulunur.

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 göz atın.

Aşağıda, geliştiricilerin Search API'yi nasıl kullanmak isteyebileceğine ilişkin bazı örnekler verilmiştir:

Desteklenen birkaç dilde 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. Diğer bir kısıtlama da "The Lady Killer" adlı bir yapım oluşturmalarıdır.

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>

En sevdiğiniz dilin desteklenip desteklenmediğini öğrenmek için İstemci Kitaplıkları sayfasını da inceleyin.

Search API dokümanları

Ayrıca aşağıdaki dokümanlara bakın:

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

Search API, Freebase grafiğinde depolanan, kullanıcı tarafından oluşturulan içeriği dizine ekler ve arar. Yani, güvenli bir şekilde çıkış yapmadan bir web sayfasındaki içeriği doğrudan kullanamazsınız.

Daha fazla bilgi için Başlarken: Güvenlik bölümüne bakın.

Gelişmiş filtreleme

Search API, aramayı doğru öğelere daha iyi hedeflemek için çok sayıda filtre kısıtlamasını destekler.

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

filter=(any type:/people/person)

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

  • Şema varlıkları veya kullanıcılar için okunabilir kimlikler. Örneğin:
    • Tür kısıtlaması için /people/person
    • Alan kısıtlaması için /film
  • Freebase MID'leri, örneğin:
    • Aynı /people/person türü kısıtlaması için /m/01g317
    • Yukarıdaki /film alan kısıtlaması için /m/010s
  • Varlık adları, örneğin:
    • Daha dar bir /people/person türü kısıtlaması için "person"
    • Daha az hassas /film alan kısıtlaması için "film"

Filtre kısıtlamaları birkaç kategoriye ayrılabilir. Daha fazla bilgi için Rehber'de Arama bölümünü inceleyin.

Filtre kısıtlamaları doğrudan SearchRequest içinde serbest bir şekilde birleştirilebilir ve tekrarlanabilir. Tekrarlanan filtre kısıtlaması parametreleri VEYA sorgusunda birleştirilir. Farklı filtre kısıtlama parametreleri veya grupları VE sorgusunda birleştirilir.

Örneğin:

Kahrı adı verilen kişileri veya şehirleri aramak için şunları deneyin:

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

Bu birleştirme davranışı, kısıtlamaları birleştirmek için daha zengin bir arayüz sağlayan filtre parametresiyle geçersiz kılınabilir ve daha iyi kontrol edilebilir. Bu, muhtemelen şunlardan biri olan bir s ifadesidir: Operatörün şunlardan biri olabilir:

  • any, mantıksal olarak bir VEYA
  • all, mantıksal olarak VE
  • not
  • should, yalnızca üst düzeyde kullanılabilir ve kısıtlamanın isteğe bağlı olduğunu gösterir. 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üyle veya /film alanıyla eşleştirmek için şunları deneyin:

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