twitter4j 和处理的问题

Trouble with twitter4j and processing

我正在尝试进行处理以显示包含我的关键字的最新推文。我卡住了。我不确定如何检查它是否正在更新。我知道它能够提取最新的推文,但截至目前,我查看最新推文的唯一方法是重新启动我的程序。不好意思弄乱了。

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);
  }
}

注意:您已将秘密令牌公开发布到互联网上,因此您应该尽快更改它们!只是编辑您的问题以不包含它们不会足够了,因为它们仍然在修订历史中。

你在这个程序中有很多额外的东西。您可以大大简化它。您需要做的就是:

第 1 步: 编写一个获取推文(或推文的 ArrayList)的函数。在草图级变量中跟踪该推文。您已经使用 getNewTweets() 函数完成了此操作,但您可以去掉其他函数。

第 2 步: 在草图的开头调用该函数。这是为了让你有东西要展示。或者,您可以只显示一些虚拟文本,例如 "waiting to fetch tweets" 直到下一步。

第 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();
  }
}