我正在尝试进行处理以显示包含我的关键字的最新推文。我被困住了。我不确定如何检查它是否正在更新。我知道它能够提取最新的推文,但到目前为止,我查看最新推文的唯一方法是重新启动我的程序。抱歉,有点乱。
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);
}
}
最佳答案
注意:您已将您的 secret token 公开发布到互联网上,因此您应该尽快更改它们!仅编辑您的问题以不包含它们是不够的,因为它们仍然存在于修订历史记录中。
这个程序中有很多额外的内容。你可以大大简化这个过程。您需要做的就是:
第 1 步:编写一个获取推文(或推文的 ArrayList)的函数。在草图级变量中跟踪该推文。您已经使用 getNewTweets()
函数完成了此操作,但您可以删除其他函数。
第 2 步:在草图的开头调用该函数。这样你就有东西可以展示了。或者,您可以只显示一些虚拟文本,例如“等待获取推文”,直到下一步。
第 3 步:每隔 X 秒调用该函数。您可以通过使用 draw()
函数中的 frameCount
变量来完成此操作。确保对此进行限制,以免超过 twitter's rate limit .
第 4 步:使用草图级推文变量根据需要绘制当前推文。
把它们放在一起,看起来像这样:
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();
}
}
关于java - twitter4j 和处理出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35616359/