2015-06-24 5 views
0

Я пытаюсь просканировать твиттер для твитов со специальным #hashtag и возвращающимся json Мне нужно только id, date, userid, текст твита, экспортированный в 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 Libraries, как Jackson, анализирует ответ, если вы получаете ответ правильно!

Смежные вопросы