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:
- Otomatik olarak önerilen öğeler (ör. Freebase Suggest Widget)
- Belirli bir ada sahip en önemli varlıkların sıralı listesini alma
- Search Metaschema'yı kullanarak öğe bulma.
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'] }
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>
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:
- API'nin nasıl kullanılacağıyla ilgili ayrıntılar için Arama referans belgelerine bakın.
- Ayrıntılı arama sorguları oluşturma hakkında daha fazla bilgi için Arama Yemek Kitabı'na bakın.
- Varlıklar ve özellikler arasındaki ilişkilerin nasıl tanımlandığı hakkında bilgi edinmek için Arama Meta Şeması dokümanına 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ç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
- Aynı
- 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 VEYAall
, mantıksal olarak VEnot
- 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)