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:
- Varlıkları otomatik olarak önerme (ör. Freebase Suggest Widget)
- Belirli bir ada sahip en önemli varlıkların sıralı listesi alınıyor.
- Arama Meta Şeması'nı kullanarak varlıkları bulma.
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:
- API'nin nasıl kullanılacağıyla ilgili ayrıntılar için Arama referans dokümanları'na bakın.
- Ayrıntılı arama sorguları oluşturma hakkında daha fazla bilgi için Arama Yemek Kitabı'na göz atın.
- Varlıklar ve mülkler arasındaki ilişkilerin nasıl açıklandığı hakkında bilgi edinmek için Arama Metaschema 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ç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
- Tür kısıtlaması için
- 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
- Aynı
- 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"
- Daha dar bir
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 VEYAall
, mantıksal olarak VEnot
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)