1

我无法理解这个 API。我已经下载(maven)google-api-services-freebase 并测试我尝试执行此代码:

 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 SEARCH 的方法(http://wiki.freebase.com/wiki/ApiSearch)。

4

2 回答 2

3

不幸的是,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库。

于 2012-06-06T20:33:46.027 回答
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"));
           }
       }        
}
于 2012-06-07T08:30:02.637 回答