2015-06-24 47 views
0

我想抓取twitter的推特與特殊的#hashtag和從返回的json我只需要身份證,日期,用戶ID,在cvs中導出的​​推文的文本。如何使用Twitter的API JSON與java

我的代碼看起來像這樣。

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

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

您(可能)從twitter獲取錯誤 - 確保它是responds OK,並且它發送給您的json實際上是正確的。

+0

不,答案完全正確。我猜obj.get(「id」)是問題...如果我將它改爲obj.get(「statuses」)。toString()它返回的東西太多了。我只想要文字,日期和用戶。我不明白如何訪問這些信息。 – desperateCoder

0

用戶Json圖書館像傑克遜解析響應如果你得到的迴應權!