使用 Twitter4j 3.0.3 使用主题标签数据更改椭圆的颜色

changing the color of an ellipse using hashtag data using Twitter4j 3.0.3

好的,所以我对编写代码还不是很了解。我正在从事一个使用 Twitter API 数据的项目。我的项目目标是使用散列标签来表示好事和坏事(为了简单起见,让我们使用#good 和#bad)。

我希望该标签数据根据#good 和#bad 推文的数量将简单椭圆的颜色修改为介于红色和绿色之间的颜色阴影。 我喜欢将其视为 +100/-100 频谱。每个#good 推文都是+1,每个#bad 是-1。如果是 -100 条推文,则椭圆为全红色。如果是 +100 条推文,则椭圆为全绿色。

我知道这有点复杂,但这是我正在做的一个艺术项目。我遵循了一个教程,目前有 twitter 数据响应一个简单的推文数组列表(教程 @ https://www.youtube.com/watch?v=gwS6irtGK-c) 我正在使用处理,java,twitter4j 3.0.3 和带有 OSX el capitan 10.11.3

的 macbook pro

如有任何帮助,我们将不胜感激。甚至为我指明了如何自己编写代码的方向。如果您需要我提供更多信息,我会尽快回复!

ConfigurationBuilder cb = new ConfigurationBuilder();
Twitter twitterInstance;
Query queryForTwitter;

ArrayList tweets;

void setup() {
  cb.setOAuthConsumerKey("****");
  cb.setOAuthConsumerSecret("****");
  cb.setOAuthAccessToken("****");
  cb.setOAuthAccessTokenSecret("****");
  cb.setUseSSL(true);
  twitterInstance = new TwitterFactory( cb.build()
                                  ).getInstance();
  queryForTwitter = new Query("#good");

  size(640,440);
  FetchTweets();

} //setup

void draw() {
  background(0);
  DrawTweets();
} //draw

void DrawTweets() {
  for(int i=0; i<tweets.size(); i++) {
    Status t = (Status) tweets.get(i);
    String user = t.getUser().getName();
    String msg = t.getText();
    text(user + ": " + msg,
         20,15+i*30-mouseY, width-20, 40);
  } //for
} //drawTweets

void FetchTweets(){
  try {
    QueryResult result = twitterInstance.search(
                                queryForTwitter );
    tweets = (ArrayList) result.getTweets();
  } catch(TwitterException te) {
    println("Couldn't connect: " +te);
  } // end of catch TwitterException
}// end of FetchAndDrawTweets()

第二个版本:

ConfigurationBuilder cb = new ConfigurationBuilder();
Twitter twitterInstance;
Query queryForTwitter;

//ArrayList tweets;

void setup() {
  cb.setOAuthConsumerKey("****");
  cb.setOAuthConsumerSecret("****");
  cb.setOAuthAccessToken("****");
  cb.setOAuthAccessTokenSecret("****");
  cb.setUseSSL(true);
  //twitterInstance = new TwitterFactory( cb.build()
  //                                ).getInstance();
  //queryForTwitter = new Query("#feelthebern");

  size(640,440);

   int numGood = 50;
   int numBad = 50;
  for (int i = 0; i < numGood; i++) {
    tweets.add("#good");
  }
  for (int i = 0; i < numBad; i++) {
    tweets.add("#bad");
  }

} //setup

ArrayList<String> tweets = new ArrayList<String>();



//create a function that counts the tweets
//that contain a certain hashtag
int countTweets(String hashtag){
  int total = 0;
  for(String tweet : tweets){
    if(tweet.contains(hashtag)){
      total++;
    }
  }
  return total;
}

void draw(){

  //count the good and bad tweets
  int goodTweets = countTweets("#good");
  int badTweets = countTweets("#bad");

  //calculate color based on tweet counts
  float r = badTweets/100.0 * 255;
  float g = goodTweets/100.0 * 255;
  float b = 0;

  background(r, g, b);

}

您必须将问题分解成更小的步骤。

第 1 步: 创建一个简单 returns ArrayList 推文的函数。

第 2 步: 创建一个函数,接受 ArrayList 和一个 String 值,以及 returns String 出现在 ArrayList.

的推文中

此代码假定您有 ArrayList<String> tweets:

int countTweets(String hashtag){
  int total = 0;
  for(String tweet : tweets){
    if(tweet.contains(hashtag)){
      total++;
    }
  }
  return total;
}

第 3 步: 根据包含每个单词的推文数量计算颜色。你说你总是有 100 条推文,所以你可以将推文数除以 100,然后乘以 255 得到颜色值。

把它们放在一起,看起来像这样:

ArrayList<String> tweets = new ArrayList<String>();

void setup() {

  //you would actually get these from twitter,
  //but for testing let's just fill them ourselves
  int numGood = 50;
  int numBad = 50;
  for (int i = 0; i < numGood; i++) {
    tweets.add("#good");
  }
  for (int i = 0; i < numBad; i++) {
    tweets.add("#bad");
  }
}

//create a function that counts the tweets
//that contain a certain hashtag
int countTweets(String hashtag){
  int total = 0;
  for(String tweet : tweets){
    if(tweet.contains(hashtag)){
      total++;
    }
  }
  return total;
}

void draw(){

  //count the good and bad tweets
  int goodTweets = countTweets("#good");
  int badTweets = countTweets("#bad");

  //calculate color based on tweet counts
  float r = badTweets/100.0 * 255;
  float g = goodTweets/100.0 * 255;
  float b = 0;

  background(r, g, b);

}