2016-02-25 25 views
1

我正在嘗試處理以顯示包含我的關鍵字的最新tweet。我卡住了。我不確定我會如何檢查它是否正在更新。我知道它能夠取得最新的推文,但截至目前,我可以查看最新的推文的唯一方法就是重新啓動我的程序。對不起,它很混亂。twitter4j和處理中出現問題

import twitter4j.conf.*; 
import twitter4j.*; 
import twitter4j.auth.*; 
import twitter4j.api.*; 

import java.util.*; 

Twitter twitter; // creating the twitter object 
String searchString = "newborn"; // twitter search query 
List<Status> tweets;// List of Status object to hold tweets 
List<Status> tweets2; 
int currentTweet;// 
int nextTweet; 

void setup() 
{ 
    size(800,600); 

    ConfigurationBuilder cb = new ConfigurationBuilder(); // New config obj, auth. 

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

    TwitterFactory tf = new TwitterFactory(cb.build()); // init. twit obj by retr inst from twit fact 

    twitter = tf.getInstance(); //here, twit gets isnt is the inst 
    getTweets2(); 
    getNewTweets(); // func to get the tweets 

    currentTweet = 0; 
    nextTweet = 1; 
    //Status status = tweets.get(currentTweet); 

    thread("refreshTweets"); 





} 

void draw() 
{ 
    background(0); 

    //currentTweet = currentTweet + 1; 
    //nextTweet = nextTweet + 1; 

    if (currentTweet >= tweets.size()) 
    { 
    currentTweet = 0; 
    } 
    if (nextTweet >= tweets.size()) 
    { 
    nextTweet = 1; 
    } 

    Status status = tweets.get(currentTweet); // retrieve current tweet from list of tweets 
    Status status2 = tweets.get(nextTweet); 
    Status status3 = tweets2.get(0); 

    Status status4 = status; 

    fill(200); 

    if(tweets.get(0).getCreatedAt() != tweets2.get(0).getCreatedAt()) { 
    //text(status.getText(),random(width),random(height), 300, 200); 
    text("current tweet:" + status.getCreatedAt() + ".....if" ,250,250, 300, 200); 
    //text("next tweet:" + status2.getCreatedAt(),250,350, 300, 200); 
    //text("10th tweet:" + status3.getCreatedAt(),250,450, 300, 200); 
    }else { 
    text("current tweet:" + status2.getCreatedAt() + ".....else",250,250, 300, 200); 
    } 
    delay(2500); 

    getNewTweets(); 

    //System.out.println(status2.getText()); 
} 

void getNewTweets() 
{ 
    try 
    { 
    //we try to get the tweetuses! 
    Query query = new Query(searchString); 

    QueryResult result = twitter.search(query); 

    tweets = result.getTweets(); 

    } 
    catch (TwitterException te) 
    { 
    //tweetus aborted? 
    System.out.println("failed to search tweets: " + te.getMessage()); 
    System.exit(-1); 

    } 
} 

    void getTweets2() //this neat thing gets those tweets 
{ 
    try 
    { 
    //we try to get the tweetuses! 
    Query query = new Query(searchString); 

    QueryResult result = twitter.search(query); 

    tweets2 = result.getTweets(); 

    } 
    catch (TwitterException te) 
    { 
    //tweetus aborted? 
    System.out.println("failed to search tweets: " + te.getMessage()); 
    System.exit(-1); 

    } 




} 

void refreshTweets() 
{ 
    while(true) 
    { 
    getNewTweets(); 
    println("Updated Tweets"); 
    delay(5000); 
    } 
} 

回答

0

注意:您發佈你的祕密令牌公開到互聯網,所以你應該儘快改變他們越好!僅僅編輯你的問題不包括他們是不夠的,因爲他們仍然在修訂歷史中。

你在這個程序中有很多額外的東西正在進行。你可以簡化這一點。所有你需要做的是:

第1步:編寫一個函數,獲取推文(或推文的ArrayList)。在草圖級變量中跟蹤該推文。您已經使用getNewTweets()函數完成了這項工作,但您可以擺脫其他功能。

第2步:在草圖開頭調用該函數。這樣你就可以展示一些東西。或者,您可以只顯示一些虛擬文本,例如「等待提取推文」,直到下一步。

第3步:每隔X秒,調用一次該函數。您可以使用draw()函數中的frameCount變量來完成此操作。確保你限制這個,所以你不要去twitter's rate limit

第4步:使用sketch-level tweet變量來繪製當前的tweet,但是您需要。

全部放在一起,它看起來像這樣:

import twitter4j.conf.*; 
import twitter4j.*; 
import twitter4j.auth.*; 
import twitter4j.api.*; 

Twitter twitter; 
String searchString = "cat"; 
Status currentTweet; 

void setup() 
{ 
    size(800, 600); 

    ConfigurationBuilder cb = new ConfigurationBuilder(); // New config obj, auth. 

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

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

    getNewTweets(); 
} 

void draw() 
{ 

    //get new tweet once every 10 seconds 
    if (frameCount % (60*10) == 0) { 
    getNewTweets(); 
    } 

    background(0); 
    fill(200); 

    text("current tweet:" + currentTweet.getText(), 250, 250, 300, 200); 
} 

void getNewTweets() 
{ 

    println("Getting new tweet..."); 
    try 
    { 
    Query query = new Query(searchString); 

    QueryResult result = twitter.search(query); 
    currentTweet = result.getTweets().get(0); 
    } 
    catch (TwitterException te) 
    { 
    te.printStackTrace(); 
    } 
}