Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Twitter4j 3.0.3使用hashtag数据更改椭圆的颜色_Java_Twitter_Colors_Processing_Twitter4j - Fatal编程技术网

Java 使用Twitter4j 3.0.3使用hashtag数据更改椭圆的颜色

Java 使用Twitter4j 3.0.3使用hashtag数据更改椭圆的颜色,java,twitter,colors,processing,twitter4j,Java,Twitter,Colors,Processing,Twitter4j,好吧,我对编写代码还不太了解。我正在从事一个使用twitter API数据的项目。我的项目目标是使用哈希标记来表示好的和坏的东西(为了简单起见,让我们使用#good and#bad) 我希望标签数据能够根据“好”和“坏”推文的数量,将简单椭圆的颜色修改为介于红色和绿色之间的阴影。 我喜欢把它想象成+100/-100光谱。每条好的推文都是+1,每条坏的推文都是-1。如果是-100条tweets,则椭圆为全红色。如果它在+100条tweets,则椭圆为全绿色 我知道这有点复杂,但这是我做的一个艺术项

好吧,我对编写代码还不太了解。我正在从事一个使用twitter API数据的项目。我的项目目标是使用哈希标记来表示好的和坏的东西(为了简单起见,让我们使用#good and#bad)

我希望标签数据能够根据“好”和“坏”推文的数量,将简单椭圆的颜色修改为介于红色和绿色之间的阴影。 我喜欢把它想象成+100/-100光谱。每条好的推文都是+1,每条坏的推文都是-1。如果是-100条tweets,则椭圆为全红色。如果它在+100条tweets,则椭圆为全绿色

我知道这有点复杂,但这是我做的一个艺术项目。我遵循了一个教程,目前twitter数据在一个简单的tweet数组列表中响应(tutorial@) 我使用的是processing、java、twitter4j 3.0.3和macbook pro以及OSX el capitan 10.11.3

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

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();
推特推特实例;
查询查询功能;
ArrayList推文;
无效设置(){
cb.setOAuthConsumerKey(“****”);
cb.SetOAuthConsumerCret(“****”);
cb.setOAuthAccessToken(*****);
cb.setOAuthAccessTokenSecret(*****);
cb.setusesl(真);
twitterInstance=新的TwitterFactory(cb.build())
).getInstance();
queryForTwitter=新查询(“良好”);
规模(640440);
获取tweets();
}//设置
作废提款(){
背景(0);
DrawTweets();
}//绘制
void DrawTweets(){

对于(inti=0;i,您必须将问题分解为更小的步骤

步骤1:创建一个函数,该函数只返回tweet的
ArrayList

步骤2:创建一个函数,该函数接受
ArrayList
String
值,并返回
ArrayList
中tweets中出现
String
的次数

此代码假定您有一个
ArrayList tweets

int countTweets(String hashtag){
  int total = 0;
  for(String tweet : tweets){
    if(tweet.contains(hashtag)){
      total++;
    }
  }
  return total;
}
第3步:根据包含每个单词的tweet数量计算颜色。您说过您将始终有100条tweet,因此您可以将tweet计数除以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);

}
ArrayList tweets=new ArrayList();
无效设置(){
//你可以从推特上得到这些,
//但是为了测试,让我们自己填吧
int numGood=50;
int numBad=50;
for(int i=0;i
非常感谢您的快速回复。这似乎很有效,因为目前我这边的背景是绿色的。有一个问题,您说“您实际上可以从twitter上获得这些,但为了测试,让我们自己填写。”我不确定我是否完全理解。再次感谢您与我一起工作,对不起,我是一个noobie!@zack.gray.ou没问题。我的意思是,在您的真实程序中,您连接到twitter以获取推文,但仅举一个小例子,我正在手动向htem填充
“#好”
“#坏”
”,因为你并不是真的在问问题的twitter部分。哦,我现在明白了!但是,我确实遇到了另一个问题。我假设我的代码工作正常,但我运行了一个println,它似乎并没有实际收集标签数据。我可能错了,但看起来它只是反复运行50“好”和50“坏”在任何时候……我都在上面的主要问题的“second version”@zack.gray.ou下添加了新代码。您不应该使用我在
设置()中的代码
函数。这只是出于测试目的。这就是我的评论的意思。你应该用tweet来填充
数组列表,而不是硬编码的
字符串
。我只是用硬编码的
字符串
来演示迭代它们的代码,以计算好的和坏的数量。你真正的代码应该使用推特,不是硬编码的
Strings
。啊。我希望我的教授能运行这些,但他不能给我回复。我现在对所有这些都很困惑。我想我知道我在做什么,但我想我没有我想的那么好。好吧,在第一步中,你的原始答案基本上就是我在问题的第一个代码中的答案?对不起太难了。我太迷茫了。我的教授本来应该指导我完成这项工作,因为我对处理和编程还不熟悉,但正如我提到的,他在这一点上一点帮助都没有。。。
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);

}