نظرة عامة على البحث

  1. نظرة عامة
  2. اعتبارات الأمان
  3. الفلترة المتقدّمة

نظرة عامة

توفّر واجهة برمجة تطبيقات 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>

اطّلِع أيضًا على صفحة مكتبات العملاء لمعرفة ما إذا كانت لغتك المفضّلة متوافقة.

مستندات واجهة برمجة تطبيقات البحث

يمكنك أيضًا الاطّلاع على المستندات التالية:

الاعتبارات الأمنية

تفهرس واجهة برمجة تطبيقات البحث المحتوى الذي ينشئه المستخدم والمخزّن في الرسم البياني 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، عامل التشغيل المنطقي AND
  • not
  • should، والتي يمكن استخدامها على المستوى الأعلى فقط، والتي تشير إلى أن القيد اختياري. أثناء النتيجة، يتم تقسيم النتيجة التي لا تتطابق معها القيود الاختيارية إلى نصفها لكل قيود اختيارية لا تتطابق معها.

على سبيل المثال:

للمطابقة على النوع /people/person أو النطاق /film، يُرجى محاولة ما يلي:

query=gore
&filter=(any type:/people/person domain:/film)