بررسی اجمالی
API جستجوی Freebase دسترسی به داده های Freebase را با درخواست متنی رایگان فراهم می کند. نتایج پرس و جو مرتب شده و دارای یک امتیاز مرتبط عددی هستند.
توسعه دهندگان می توانند فیلترهایی را برای محدود کردن نتایج جستجو به انواع خاصی از داده ها اعمال کنند. برای اطلاعات بیشتر در مورد نحوه ساخت پرس و جوهای جستجوی دقیق به جستجوی کتاب آشپزی مراجعه کنید.
چند نمونه از نحوه استفاده توسعه دهندگان از Search API عبارتند از:
- موجودیتهای پیشنهاد خودکار (مثلاً ابزارک پیشنهادی Freebase )
- دریافت لیست رتبه بندی شده از برجسته ترین نهادها با نام مشخص.
- یافتن موجودیت ها با استفاده از Search Metaschema .
نمونههای کد زیر در چندین زبان پشتیبانیشده نشان میدهند که چگونه میتوان یک هنرمند موسیقی را جستجو کرد که با متن «Cee Lo Green» مطابقت دارد. یک محدودیت اضافی این است که آنها چیزی به نام "قاتل خانم" ایجاد کردند.
پایتون
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']) + ')')
روبی
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'] }این مثال از کتابخانه های Httparty و Addressable استفاده می کند.
جاوا
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(); } } }
جاوا اسکریپت
<!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>این مثال از کتابخانه 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>
همچنین صفحه Client Libraries را ببینید تا ببینید آیا زبان مورد علاقه شما پشتیبانی می شود یا خیر.
جستجوی اسناد API
همچنین مستندات زیر را ببینید:
- برای جزئیات نحوه استفاده از API به اسناد مرجع جستجو مراجعه کنید.
- برای اطلاعات بیشتر در مورد نحوه ساخت پرس و جوهای جستجوی دقیق به جستجوی کتاب آشپزی مراجعه کنید.
- برای اطلاعات در مورد چگونگی توصیف روابط بین موجودیت ها و ویژگی ها، به سند Search Metaschema مراجعه کنید.
ملاحظات امنیتی
Search API محتوای تولید شده توسط کاربر را که در نمودار Freebase ذخیره شده است، فهرست و جستجو می کند. این بدان معنی است که شما نمی توانید مستقیماً از محتوای یک صفحه وب استفاده کنید بدون اینکه ابتدا از آن فرار کنید.
برای اطلاعات بیشتر به شروع به کار: امنیت مراجعه کنید.
فیلترینگ پیشرفته
Search API از تعداد زیادی محدودیت فیلتر پشتیبانی می کند تا جستجو را بهتر در موجودیت های صحیح هدف قرار دهد.
به عنوان مثال، با استفاده از یک محدودیت فیلتر "نوع"، می توانیم لیستی از برجسته ترین افراد در Freebase را نشان دهیم.
filter=(any type:/people/person)
محدودیت های فیلتر انواع ورودی ها را می پذیرند:
- شناسه های قابل خواندن توسط انسان برای موجودیت های طرحواره یا کاربران، به عنوان مثال:
-
/people/person
برای یک محدودیت نوع -
/film
برای یک محدودیت دامنه
-
- برای مثال، MIDهای Freebase:
-
/m/01g317
برای همان محدودیت نوع/people/person
-
/m/010s
برای محدودیت دامنه/film
بالا
-
- نام نهادها، به عنوان مثال:
-
"person"
برای یک محدودیت نوع/people/person
کمتر دقیق -
"film"
برای محدودیت دامنه/film
کمتر
-
محدودیت های فیلتر را می توان به چند دسته طبقه بندی کرد. برای جزئیات بیشتر به جستجوی کتاب آشپزی مراجعه کنید.
محدودیتهای فیلتر را میتوان آزادانه ترکیب کرد و مستقیماً در SearchRequest
تکرار کرد. پارامترهای مکرر محدودیت فیلتر در یک کوئری OR ترکیب می شوند. پارامترها یا گروه های مختلف محدودیت فیلتر در یک پرس و جو AND ترکیب می شوند.
مثلا:
برای جستجوی «افراد یا شهرهایی به نام گور »، سعی کنید:
query=gore &filter=(any type:/people/person type:/location/citytown)
این رفتار ترکیبی را می توان با پارامتر فیلتر که رابط غنی تری برای ترکیب محدودیت ها ارائه می دهد، نادیده گرفت و بهتر کنترل کرد. این یک عبارت s است، احتمالاً به صورت دلخواه تو در تو، که در آن عملگر یکی از موارد زیر است:
-
any
، منطقاً یک OR -
all
، به طور منطقی یک AND -
not
-
should
، که فقط در سطح بالایی قابل استفاده است و نشان دهنده اختیاری بودن محدودیت است. در طول امتیاز دهی، مسابقاتی که با محدودیت های اختیاری مطابقت ندارند، امتیاز آنها به ازای هر محدودیت اختیاری که مطابقت ندارند به نصف تقسیم می شود.
مثلا:
برای مطابقت در نوع /people/person
یا دامنه /film
، سعی کنید:
query=gore &filter=(any type:/people/person domain:/film)