我正在尝试使用sad, okay, joyful
字样过滤最新的推文。
当一条内容中有任何一个词的推文时,我希望它能够打印那条推文。但我也希望打印的推文有延迟。所以每条推文之间大约有10秒的延迟。例如:
如果推文发出:@joker im so sad today
然后我希望它打印到屏幕,并显示以下消息
的System.out.println(“ * ** * ** * ** * ** * ** * ** * ** * ** *一个悲伤鸣叫“);
然后如果在此之后发出推文:@programmer im joyful
然后在最后一条推文发布10秒后,我希望通过以下消息将屏幕上的消息传来。
的System.out.println(“ * ** * ** * ** * ** * ** * ** * ** * ** *快乐鸣叫“);
等等。
下面,我已经制作了一些代码,允许您过滤推文,但我不确定如何为每条推文测试和打印单独的消息。我尝试将其存储在Arraylist中并使用消息检索每条推文,但这不起作用。有没有办法做到这一点? 我使用处理2和twitter4j 3 有什么建议?溶液
void GetTweetsByKeywords()
{
List<String>mood = new ArrayList <String>();
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("XXXX");
cb.setOAuthConsumerSecret("XXX");
cb.setOAuthAccessToken("XXXX");
cb.setOAuthAccessTokenSecret("XXXX");
TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();
StatusListener statusListener = new StatusListener()
{
private int count = 0;
private long originalTweetId = 0;
@Override
public void onStatus(Status status)
{
System.out.println(status.getUser().getName() + " : " + status.getText());
} //en of the onStatus()
public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice)
{
// should really remove deleted tweets here ...
}
public void onTrackLimitationNotice(int numberOfLimitedStatuses)
{
}
public void onScrubGeo(long userId, long upToStatusId) {
// should really remove deleted location information here ...
}
public void onStallWarning(StallWarning stallWarning) {
// should really do something about stalls here ...
}
@Override
public void onException(Exception ex)
{
ex.printStackTrace();
}
}; //end of the listener
String keywords[] = {"sad","okay","joyful"};
for(int i=0; i<keywords.length; i++)
{
FilterQuery fq = new FilterQuery();
fq.track(keywords);
twitterStream.addListener(statusListener);
twitterStream.filter(fq);
mood.add(//here i want to add the filtered tweets);
System.out.println("Heres a filter :" + mood.get(i));
if (mood.get(i).equals("sad"))
{
System.out.println("*********************************************a sad tweet");
}
else if (mood.get(i).equals("joyful"))
{
System.out.println("*********************************************a joyfull tweet");
}
else if(mood.get(i).equals("okay"))
{
System.out.println("*********************************************okay tweet");
}
}
}
答案 0 :(得分:0)
最简单的方法是使用单独的线程和队列。这样做:
final Queue<Status> queue = new LinkedBlockingQueue<Status>(10000);
new Thread(){
// In your status listener, post tweets to the queue
...
public void onStatus(Status status){
queue.offer(status);
}
...
// Create TwitterStream instance, add query
// and start listening
twitterStream.filter(fq);
}.start();
while(!Thread.currentThread().isInterrupted()){
Status nextTweet = queue.take();
System.out.println("Do stuff with tweet");
}