2012-06-05 36 views
1

我無法理解這個API。我已經下載了(Maven的)谷歌的API服務,遊離鹼與測試我試圖做這樣的代碼:如何在java中使用新的freebase api(api搜索)?

JsonHttpRequestInitializer initializer = 
     new GoogleKeyInitializer("MY KEY"); 
           HttpTransport httpTransport = new NetHttpTransport(); 
           JsonFactory jsonFactory = new JacksonFactory(); 

Freebase freebase = 
      Freebase.builder(httpTransport, 
      jsonFactory).setJsonHttpRequestInitializer(initializer).build(); 

現在我想這樣做:

https://www.googleapis.com/freebase/v1/search?query=cardiff&lang=en&type=university

而接下來,我想解析json輸出。

請問,這是在freebase對象中的方法嗎?我看到freebase.mqlreadfreebase.text但我找不到任何類似的API搜索(http://wiki.freebase.com/wiki/ApiSearch)方法。

回答

4

不幸的是,Java API客戶端還不支持Freebase Search。以下是如何使用Apache HttpClient來進行搜索。

HttpClient httpclient = new DefaultHttpClient(); 
JSONParser parser = new JSONParser(); 

List<NameValuePair> params = new ArrayList<NameValuePair>(); 
params.add(new BasicNameValuePair("query", "Blue Bottle")); 
params.add(new BasicNameValuePair("key", API_KEY)); 

String serviceURL = "https://www.googleapis.com/freebase/v1/search"; 
String url = serviceURL + "?" + URLEncodedUtils.format(params, "UTF-8");  
HttpResponse httpResponse = httpclient.execute(new HttpGet(url)); 
JSONObject response = (JSONObject)parser.parse(EntityUtils.toString(httpResponse.getEntity())); 
JSONArray results = (JSONArray)response.get("result"); 

for (Object result : results) { 
    System.out.println(JsonPath.read(result,"$.name").toString()); 
} 

此代碼還使用了json-simplejson-path庫。

3

謝謝。

這裏是我的代碼:

import com.google.gson.*; 
import org.apache.http.*; 

//... 

public static void searchTest(String query, String key, String params) throws IOException 
{   
     String query_envelope = "{\"query\":" + query + "}"; 
     String service_url = "https://www.googleapis.com/freebase/v1/search";  

     String url = service_url + "?query=" + URLEncoder.encode(query, "UTF-8") 
            + params 
            + "&key=" + key;  

     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response = httpclient.execute(new HttpGet(url)); 

     JsonParser parser = new JsonParser(); 
     JsonObject json_data = 
     (JsonObject)parser.parse(EntityUtils.toString(response.getEntity())); 
     JsonArray results = (JsonArray)json_data.get("result");    

     if(results != null) 
     { 
      for (Object planet : results) 
      { 
       System.out.println(((JsonObject)planet).get("name")); 
      } 
     }   
}