2013-10-07 31 views
2

我試圖做一個草圖,從特定用戶的Twitter時間軸中獲取最後100條推文。我使用Twitter4j和草圖工作正常,但我瞭解到,默認情況下,Twitter4J將時間軸結果限制爲20.如何從使用處理和Twitter4j的用戶時間線獲得20個以上的結果?

我已經看到此頁面瞭解使用查詢時獲取超過100個,但似乎在嘗試獲取特定用戶的時間表時要以不同的方式工作。 How to retrieve more than 100 results using Twitter4j

感謝您的期待!

這裏是我的草圖:

import twitter4j.conf.*; 
import twitter4j.internal.async.*; 
import twitter4j.internal.org.json.*; 
import twitter4j.internal.logging.*; 
import twitter4j.json.*; 
import twitter4j.internal.util.*; 
import twitter4j.management.*; 
import twitter4j.auth.*; 
import twitter4j.api.*; 
import twitter4j.util.*; 
import twitter4j.internal.http.*; 
import twitter4j.*; 
import twitter4j.internal.json.*; 


ConfigurationBuilder cb = new ConfigurationBuilder(); 

cb.setOAuthConsumerKey("XXXXXX"); 
cb.setOAuthConsumerSecret("XXXXXX"); 
cb.setOAuthAccessToken("XXXXXX"); 
cb.setOAuthAccessTokenSecret("XXXXXX"); 

java.util.List statuses = null; 

Twitter twitter = new TwitterFactory(cb.build()).getInstance(); 

String userName ="XXXXXX"; 
int numTweets = 100; 
String[] twArray = new String[numTweets]; 



    try { 
    statuses = twitter.getUserTimeline(userName); 
    } 
    catch(TwitterException e) { 
    } 

    for (int i=0; i<statuses.size(); i++) { 
    Status status = (Status)statuses.get(i); 

    //println(status.getUser().getName() + ": " + status.getText()); 
    twArray[i] = status.getUser().getName() + ": " + status.getText(); 

    } 


println(twArray); 
+0

您是否真的嘗試調整您鏈接的其他帖子,或者您是否停留在「似乎工作方式不同」?特別是你嘗試使用query.setMaxId(); ? –

+0

我試着調整它,但我不明白在代碼中替換什麼,以使它關於用戶時間軸,我試圖請求而不是查詢。 – emefka

+0

太棒了!向我們展示你的修改,你的思路,你試過的東西! –

回答

2

怎麼這樣呢?

Paging pg = new Paging(); 
String userName = "uzr"; 
void setup() { 

    ConfigurationBuilder cb = new ConfigurationBuilder(); 
    cb.setOAuthConsumerKey("xxxx"); 
    cb.setOAuthConsumerSecret("xxxx"); 
    cb.setOAuthAccessToken("xxxx"); 
    cb.setOAuthAccessTokenSecret("xxxx"); 

    Twitter twitter = new TwitterFactory(cb.build()).getInstance(); 
    int numberOfTweets = 100; 
    long lastID = Long.MAX_VALUE; 
    ArrayList<Status> tweets = new ArrayList<Status>(); 
    while (tweets.size() < numberOfTweets) { 
    try { 
     tweets.addAll(twitter.getUserTimeline(userName,pg)); 
     println("Gathered " + tweets.size() + " tweets"); 
     for (Status t: tweets) 
     if(t.getId() < lastID) lastID = t.getId(); 
    } 
    catch (TwitterException te) { 
     println("Couldn't connect: " + te); 
    }; 
    pg.setMaxId(lastID-1); 
    } 
} 
+0

非常感謝Petros的幫助。我還發現了一個簡單的方法來實現我的目標:http://forum.processing.org/two/discussion/comment/369#Comment_369 – emefka

4

我知道這個問題是舊的,但接受的答案是沒有這種情況的最佳解決方案,下面是一個更優雅的一段代碼來解決這個問題。

... 

Paging p = new Paging(); 
p.setCount(100); 
return twitter.getUserTimeline("screenName",p); 
+0

謝謝,似乎獲取用戶時間表的舊方式已被棄用,這是很有幫助。 – ninjasense

相關問題