简体   繁体   English

如何在Java中使用新的Freebase API(API搜索)?

[英]How to use new freebase api (api search) in java?

I cant understand this API. 我无法理解此API。 I have downloaded (maven) google-api-services-freebase and to test I have tried to do this code: 我已经下载(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();

Now i want to do this: 现在我要这样做:

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

And next, I want to parse the json output. 接下来,我想解析json输出。

Please, where is the method to this in freebase object?. 请问,freebase对象中该方法在哪里? I see freebase.mqlread and freebase.text but i cant find any method similar for API SEARCH (http://wiki.freebase.com/wiki/ApiSearch). 我看到了freebase.mqlreadfreebase.text,但找不到与API SEARCH(http://wiki.freebase.com/wiki/ApiSearch)类似的任何方法。

Unfortunately, the Java API Client doesn't support Freebase Search yet. 不幸的是,Java API客户端尚不支持Freebase Search。 Here's how to do a search using Apache HttpClient instead. 以下是使用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());
}

This code also uses the json-simple and json-path libraries. 此代码还使用json-simplejson-path库。

Thank you. 谢谢。

Here is my code: 这是我的代码:

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"));
           }
       }        
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM