Java 使用Twitter4j 3.0.3使用hashtag数据更改椭圆的颜色
好吧,我对编写代码还不太了解。我正在从事一个使用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 任何帮助都将不胜感激。甚至为我指明了如何自己编写代码的方向。如果您需要我提供更多信息,我会尽快回复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,则椭圆为全绿色 我知道这有点复杂,但这是我做的一个艺术项
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);
}