مرور کلی جستجو

  1. بررسی اجمالی
  2. ملاحظات امنیتی
  3. فیلترینگ پیشرفته

بررسی اجمالی

API جستجوی Freebase دسترسی به داده های Freebase را با درخواست متنی رایگان فراهم می کند. نتایج پرس و جو مرتب شده و دارای یک امتیاز مرتبط عددی هستند.

توسعه دهندگان می توانند فیلترهایی را برای محدود کردن نتایج جستجو به انواع خاصی از داده ها اعمال کنند. برای اطلاعات بیشتر در مورد نحوه ساخت پرس و جوهای جستجوی دقیق به جستجوی کتاب آشپزی مراجعه کنید.

چند نمونه از نحوه استفاده توسعه دهندگان از Search API عبارتند از:

نمونه‌های کد زیر در چندین زبان پشتیبانی‌شده نشان می‌دهند که چگونه می‌توان یک هنرمند موسیقی را جستجو کرد که با متن «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

همچنین مستندات زیر را ببینید:

ملاحظات امنیتی

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)