סקירה כללית

ממשק ה-API של חיפוש Freebase מספק גישה לנתוני Freebase בהינתן שאילתת טקסט חופשי. התוצאות של השאילתה מסודרות ויש להן ציון רלוונטיות מספרי.
מפתחים יכולים להחיל מסננים כדי להגביל את תוצאות החיפוש לסוגים מסוימים של נתונים. למידע נוסף על יצירת שאילתות חיפוש מפורטות, אפשר לעיין במדריך לחיפוש.
דוגמאות לשימושים של מפתחים ב-Search API:
- הצעות אוטומטיות לגבי ישויות (למשל, Freebase Suggest Widget)
- קבלת רשימה מדורגת של הישויות הבולטות ביותר עם שם נתון.
- איתור ישויות באמצעות מטא-סכמה של חיפוש.
בדוגמאות הקוד הבאות בכמה שפות נתמכות מוצגות דרכים לחיפוש אומן מוזיקלי שתואם לטקסט '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
מידע נוסף זמין במאמרי העזרה הבאים:
- פרטים על השימוש ב-API זמינים במאמרי העזרה בנושא חיפוש.
- למידע נוסף על יצירת שאילתות חיפוש מפורטות, אפשר לעיין במדריך לחיפוש.
- במסמך של מטא-סכמת החיפוש מוסבר איך מתוארים קשרי הגומלין בין ישויות ומאפיינים.
שיקולי אבטחה
ה-API של חיפוש Google מאנדקס ומחפש תוכן שנוצר על ידי משתמשים ומאוחסן בגרף Freebase. כלומר, אי אפשר להשתמש ישירות בתוכן בדף אינטרנט בלי לבצע קודם escape בטוח.
מידע נוסף זמין במאמר תחילת העבודה: אבטחה.
סינון מתקדם
ה-Search API תומך במספר רב של אילוצי סינון כדי לשפר את החיפוש של הישויות הנכונות.
לדוגמה, באמצעות אילוץ מסנן מסוג 'סוג', אנחנו יכולים להציג רשימה של האנשים הכי בולטים ב-Freebase.
filter=(any type:/people/person)
אפשר להזין מגוון ערכים להגבלות הסינון:
- מזהים שקלים לקריאה של ישויות או משתמשים בסכימה, לדוגמה:
-
/people/person
לאילוץ סוג -
/film
לאילוץ של הגבלת דומיין
-
- מזהי Freebase, לדוגמה:
-
/m/01g317
לאותו אילוץ מסוג/people/person
-
/m/010s
for the above/film
domain constraint
-
- שמות של ישויות, לדוגמה:
-
"person"
כדי להגדיר אילוץ פחות מדויק מסוג/people/person
-
"film"
לאילוץ דומיין פחות מדויק/film
-
אפשר לסווג את אילוצי המסנן לכמה קטגוריות. פרטים נוספים זמינים בספר המתכונים של חיפוש.
אפשר לשלב ולחזור על אילוצים של מסננים באופן חופשי ישירות ב-SearchRequest
. פרמטרים חוזרים של אילוצי סינון משולבים בשאילתת OR. פרמטרים או קבוצות שונים של אילוצי סינון משולבים בשאילתת AND.
למשל:
כדי לחפש 'אנשים או ערים בשם Gore', אפשר לנסות:
query=gore &filter=(any type:/people/person type:/location/citytown)
אפשר לבטל את ההתנהגות הזו של שילוב ולשלוט בה בצורה טובה יותר באמצעות פרמטר המסנן, שמציע ממשק עשיר יותר לשילוב אילוצים. זוהי s-expression, שיכולה להיות מקוננת באופן שרירותי, שבה האופרטור הוא אחד מהבאים:
any
, logically an OR-
all
, מבחינה לוגית, זה כמו AND not
-
should
, שאפשר להשתמש בו רק ברמה העליונה, ומציין שהאילוץ הוא אופציונלי. במהלך הניקוד, אם יש התאמות שלא עומדות באילוצים אופציונליים, הניקוד שלהן מחולק בחצי לכל אילוץ אופציונלי שהן לא עומדות בו.
למשל:
כדי להתאים לפי סוג /people/person
או לפי הדומיין /film
, אפשר לנסות:
query=gore &filter=(any type:/people/person domain:/film)