نظرة عامة

تتيح واجهة Freebase Search API الوصول إلى بيانات Freebase عند تقديم طلب بحث بنص حر. يتم ترتيب نتائج طلب البحث وتتضمّن نتيجة رقمية تحدّد مدى الصلة بالموضوع.
يمكن للمطوّرين تطبيق فلاتر لحصر نتائج البحث بأنواع معيّنة من البيانات. راجِع دليل البحث للحصول على مزيد من المعلومات حول كيفية إنشاء طلبات بحث مفصّلة.
في ما يلي بعض الأمثلة على كيفية استخدام المطوّرين لواجهة برمجة التطبيقات Search API:
- اقتراح الكيانات تلقائيًا (مثل Freebase Suggest Widget)
- الحصول على قائمة مرتبة بأبرز الكيانات التي تحمل اسمًا معيّنًا
- العثور على كيانات باستخدام Search Metaschema
تعرض نماذج الرموز التالية بلغات متعدّدة متوافقة كيفية إجراء بحث عن فنان موسيقي يطابق النص "Cee Lo Green". وهناك قيد إضافي وهو أنّه أنشأ أغنية بعنوان "The Lady Killer".
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.mi><n.js&qu>o<t;/sc>r<ipt<>/span> </head bodyaside class><=">;warning&<quot;st>rongWarning: /strongThe Freebase API will be retired< on Ju>n<e 30,<>/span> 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=?',< pa>rams).done(function(response) { $.each(response.result, funct<ion(i, >r<esult>)< { > $('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 = arra>y( 'query' = >39;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['<;re>sult'>;<] as >$<resul>t) { echo $result['name'] . 'br/'; } ? /body /html
يمكنك أيضًا الاطّلاع على صفحة مكتبات البرامج لمعرفة ما إذا كانت لغتك المفضّلة متوافقة.
مستندات Search API
يمكنك أيضًا الاطّلاع على المستندات التالية:
- لمزيد من التفاصيل حول كيفية استخدام واجهة برمجة التطبيقات، يمكنك الاطّلاع على المستندات المرجعية الخاصة بخدمة "بحث Google".
- راجِع دليل البحث للحصول على مزيد من المعلومات حول كيفية إنشاء طلبات بحث مفصّلة.
- راجِع مستند مخطط البيانات الوصفية الخاص بميزة "بحث Google" للحصول على معلومات حول كيفية وصف العلاقات بين الكيانات والسمات.
الاعتبارات الأمنية
تتولّى Search API فهرسة المحتوى من إنشاء المستخدمين والبحث فيه، وهو المحتوى المخزّن في الرسم البياني Freebase. وهذا يعني أنّه لا يمكنك استخدام المحتوى مباشرةً على صفحة ويب بدون إيقاف تفعيله بأمان أولاً.
لمزيد من المعلومات، يُرجى الاطّلاع على البدء: الأمان.
الفلترة المتقدّمة
تتيح Search API عددًا كبيرًا من قيود الفلترة لتوجيه البحث بشكل أفضل إلى العناصر الصحيحة.
على سبيل المثال، باستخدام قيد فلتر "النوع"، يمكننا عرض قائمة بأبرز الشخصيات في Freebase.
filter=(any type:/people/person)
تقبل قيود الفلتر مجموعة متنوعة من الإدخالات:
- معرّفات قابلة للقراءة من قِبل الإنسان لكيانات المخطط أو المستخدمين، على سبيل المثال:
/people/person
لقيد نوع/film
لقيد النطاق
- معرّفات 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
، منطقيًا ORall
، منطقيًا "و"not
should
، التي يمكن استخدامها فقط في المستوى الأعلى وتشير إلى أنّ القيد اختياري. أثناء التسجيل، يتم تقسيم درجة التطابقات التي لا تتطابق مع القيود الاختيارية إلى النصف لكل قيد اختياري لا تتطابق معه.
على سبيل المثال:
للمطابقة حسب النوع /people/person
أو النطاق /film
، جرِّب ما يلي:
query=gore &filter=(any type:/people/person domain:/film)