【问题标题】:Trouble with twitter4j and processingtwitter4j 和处理问题
【发布时间】:2016-06-07 13:57:19
【问题描述】:

我正在尝试进行处理以显示包含我的关键字的最新推文。我被困住了。我不确定如何检查它是否正在更新。我知道它能够提取最新的推文,但到目前为止,我可以查看最新推文的唯一方法是重新启动我的程序。抱歉,有点乱。

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

【问题讨论】:

    标签: java twitter processing twitter4j


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 2011-11-01
      • 1970-01-01
      • 2016-07-06
      • 1970-01-01
      • 2012-03-13
      • 2015-08-04
      • 2014-10-08
      相关资源
      最近更新 更多