java - twitter4j 和处理出现问题

标签 java twitter processing 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);
  }
}

最佳答案

注意:您已将您的 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/

相关文章:

java - 如何在 cucumber 中重新运行失败的方案

java - 如何根据需要重新调整数组的尺寸

facebook - 如何在 Twitter、Facebook 等无评级系统上应用协同过滤

python - Tweepy - 获取转发推文的 ID

javascript - 处理语言 vs javascript?

java - JNI编码,从Java到C

Java空点异常错误

ruby - Twitter Gem - 救援的考虑?

drag-and-drop - 如何在旧版本的Processing中选择并拖动椭圆?

python - PySide 浏览器位于单独的进程中