我正在尝试使用特殊的#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?谢谢。
答案 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库如果您的响应正确,则可以解析响应!