نظرة عامة
توفّر واجهة برمجة تطبيقات Freebase Search إمكانية الوصول إلى بيانات Freebase باستخدام طلب بحث نصي مجاني. يتم ترتيب نتائج طلب البحث والحصول على نتيجة مدى صلة رقمية.
يمكن لمطوّري البرامج تطبيق الفلاتر لتقييد نتائج البحث بأنواع معيّنة من البيانات. اطّلِع على البحث في كتاب الطبخ لمزيد من المعلومات عن كيفية إنشاء طلبات بحث تفصيلية.
إليك بعض الأمثلة حول الطريقة التي قد يريد مطوّرو البرامج من خلالها استخدام واجهة برمجة تطبيقات البحث:
- اقتراح كيانات تلقائيًا (على سبيل المثال، Freebase suggest Widget)
- الحصول على قائمة مرتبة للعناصر الأكثر بروزًا باسم معيّن.
- جارٍ البحث عن الكيانات باستخدام Search metaschema.
تعرض عيّنات الرموز التالية بعدة لغات متاحة كيفية إجراء بحث عن فنان موسيقي يتطابق مع النص "Cee Lo Green". ويُذكر أيضًا أنّه تم إنشاء فيديو بعنوان "السيدة القاتلة".
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'] }يستخدم هذا المثال المكتبات Httparty وAddressable.
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>يستخدم هذا المثال مكتبة 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>
اطّلِع أيضًا على صفحة مكتبات العملاء لمعرفة ما إذا كانت لغتك المفضّلة متوافقة.
مستندات واجهة برمجة تطبيقات البحث
يمكنك أيضًا الاطّلاع على المستندات التالية:
- اطّلِع على مستندات "بحث Google" المرجعية لمزيد من التفاصيل عن كيفية استخدام واجهة برمجة التطبيقات.
- اطّلِع على البحث في كتاب الطبخ لمزيد من المعلومات عن كيفية إنشاء طلبات بحث تفصيلية.
- اطّلِع على مستند بحث البيانات الوصفية للحصول على معلومات عن كيفية وصف العلاقات بين الكيانات والمواقع.
الاعتبارات الأمنية
تفهرس واجهة برمجة تطبيقات البحث المحتوى الذي ينشئه المستخدم والمخزّن في الرسم البياني Freebase ويبحث عنه. يعني ذلك أنه لا يمكنك استخدام المحتوى على صفحة ويب مباشرةً بدون الخروج منها بأمان أولاً.
يُرجى الاطِّلاع على البدء: الأمان لمزيد من المعلومات.
الفلترة المتقدّمة
تتيح واجهة برمجة تطبيقات البحث عددًا كبيرًا من قيود الفلتر لتوجيه البحث بشكلٍ أفضل إلى الكيانات الصحيحة.
على سبيل المثال، باستخدام قيد الفلتر "type;quot;، يمكننا عرض قائمة بأبرز الأشخاص في Freebase.
filter=(any type:/people/person)
تقبل قيود الفلتر مجموعة متنوعة من الإدخالات:
- أرقام التعريف التي يمكن للمستخدمين قراءتها لكيانات المستخدمين أو مخططاتهم، على سبيل المثال:
/people/person
لقيد النوع/film
لقيد النطاق
- أرقام تعريف Basebase المجانية، على سبيل المثال:
/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
، عامل التشغيل المنطقي ANDnot
should
، والتي يمكن استخدامها على المستوى الأعلى فقط، والتي تشير إلى أن القيد اختياري. أثناء النتيجة، يتم تقسيم النتيجة التي لا تتطابق معها القيود الاختيارية إلى نصفها لكل قيود اختيارية لا تتطابق معها.
على سبيل المثال:
للمطابقة على النوع /people/person
أو النطاق /film
، يُرجى محاولة ما يلي:
query=gore &filter=(any type:/people/person domain:/film)