如何使用Twitter API json与java

时间:2015-06-24 17:40:40

标签: java json api twitter

我正在尝试使用特殊的#hashtag抓取Twitter的推文,并且从返回的json中我只需要id,date,userid,在cvs中导出的​​推文文本。

我的代码看起来像这样。

import oauth.signpost.OAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;

import org.json.*;

public class CrawlTweets {


    static String AccessToken = "xxx";
    static String AccessSecret = "xxx";
    static String ConsumerKey = "xxx";
    static String ConsumerSecret = "xxx";

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        OAuthConsumer consumer = new CommonsHttpOAuthConsumer(
                ConsumerKey,
                ConsumerSecret);

        consumer.setTokenWithSecret(AccessToken, AccessSecret);

HttpGet request = new     HttpGet("https://api.twitter.com/1.1/search/tweets.json?q=%23Nutella&lang=en");
        consumer.sign(request);

        HttpClient client = new DefaultHttpClient();
        HttpResponse response = client.execute(request);


        JSONObject obj = new JSONObject(response);

        String id = obj.get("id").toString();

        System.out.println(id);

    }
}

我得到以下异常:

Exception in thread "main" org.json.JSONException: JSONObject["id"] not     found.
    at org.json.JSONObject.get(JSONObject.java:459)
    at CrawlTweets.main(CrawlTweets.java:41)

代码有什么问题?如何提取所提到的信息并放入cvs?谢谢。

3 个答案:

答案 0 :(得分:0)

您(可能)从Twitter收到错误 - 确保它responds OK并且它发送给您的json实际上是正确的。

答案 1 :(得分:0)

JSON响应格式不像obj.get("id")所暗示的那样平坦。

查看示例响应格式https://dev.twitter.com/rest/reference/get/search/tweets

obj.get("statuses")会返回一个JSON数组。您需要以某种方式迭代数组。对于JSONArray中的每个元素,都可以提取elementInArray.getString("id_str")

import org.json.*;

...

JSONArray arr = obj.getJSONArray("statuses");

for (int i = 0; i < arr.length(); i++)
{
    String id = arr.getJSONObject(i).getString("id_str");
    ......
}

答案 2 :(得分:0)

像杰克逊这样的用户Json库如果您的响应正确,则可以解析响应!