【问题标题】:How to use Twitter API json with java如何在 Java 中使用 Twitter API json
【发布时间】:2015-09-11 01:24:11
【问题描述】:

我正在尝试使用特殊的#hashtag 抓取推特的推文,并且从返回的 json 中我只需要在 cvs 中导出的推文的 ID、日期、用户 ID、文本。

我的代码如下所示。

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?谢谢。

【问题讨论】:

    标签: java json api twitter


    【解决方案1】:

    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】:

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

      【讨论】:

      • 不,响应完全没问题。我猜 obj.get("id") 是问题...如果我将其更改为 obj.get("statuses").toString() 它返回的东西太多了。我只想要文本、日期和用户。而且我不明白如何访问这些信息。
      【解决方案3】:

      如果您得到正确的响应,用户 Json 库(如 Jackson)会解析响应!

      【讨论】:

        猜你喜欢
        • 2023-03-27
        • 1970-01-01
        • 2019-01-15
        • 2016-01-10
        • 2014-07-25
        • 2016-10-14
        • 2011-10-15
        • 2015-11-24
        • 1970-01-01
        相关资源
        最近更新 更多