如何计算推文的2个主题标签的数量,并显示哪一个更多提到

时间:2016-06-08 15:31:38

标签: twitter arduino processing hashtag tweets

美好的一天 我和我的团队是编码语言的新手,我们正在尝试通过多种方法制作一个基于arduino的指标,显示在Twitter上的最后5分钟内更多提到哪两个关键字

我们尝试使用adafruit + IFTTT,我们设法获得了两个主题标签的实时推文流,但我们正在尝试找到一种方法来收集该信息并制作一个代码来比较两个hashtags和send命令的总数根据结果​​将伺服电机安装到脊柱上。

然后我们尝试通过处理语言来完成它,我们发现这个代码在屏幕上显示相关的标签推文,但是我们无法搜索两个单词并比较数字然后将信号发送到arduino:

    //http://codasign.com/tutorials/processing-and-twitter

import twitter4j.conf.*;
import twitter4j.*;
import twitter4j.auth.*;
import twitter4j.api.*;
import java.util.*;

Twitter twitter;
String searchString = "#poznan";

List<Status> tweets;

int currentTweet;

void setup()
{
  size(800, 600);

  ConfigurationBuilder cb = new ConfigurationBuilder();
  cb.setOAuthConsumerKey("");
  cb.setOAuthConsumerSecret("");
  cb.setOAuthAccessToken("");
  cb.setOAuthAccessTokenSecret("");

  TwitterFactory tf = new TwitterFactory(cb.build());

  twitter = tf.getInstance();

  getNewTweets();

  currentTweet = 1;

  thread("refreshTweets");
}

void draw()
{
  fill(0, 40);
  rect(0, 0, width, height);

  currentTweet = currentTweet + 1;

  if (currentTweet >= tweets.size())
  {
    currentTweet = 0;
  }

  Status status = tweets.get(currentTweet);

  fill(200);
  text(status.getText(), random(width), random(height), 300, 200);

  delay(250);
}

void getNewTweets()
{
  try
  {
    Query query = new Query(searchString);
    //query.setSince("2016-03-17");
    //query.setCount(100);
    query.setResultType(Query.RECENT);
    QueryResult result = twitter.search(query);

    tweets = result.getTweets();
    println(tweets.size());
  }
  catch (TwitterException te)
  {
    System.out.println("Failed to search tweets: " + te.getMessage());
    System.exit(-1);
  }
}

void refreshTweets()
{
  while (true)
  {
    getNewTweets();

    println("Updated Tweets");

    delay(60000);
  }
}

我们正在寻找替代代码和方法来使我们的概念发挥作用 我们愿意接受建议,不要犹豫,写信给我们。

1 个答案:

答案 0 :(得分:0)

您应该将此问题拆分为较小的问题。

一个。我如何连接到Twitter和&#34;听&#34;两个主题标签,计算它们并进行比较。

B中。如何根据特定范围内的某个任意数字使用arduino移动伺服。

℃。如何通过所需的频道(wi-fi?bluetooth?usb?)在Arduino和处理之间传递号码。

当然,这可以进一步突破,也许应该是。

这样做可以更容易地开发和调试代码。一旦你弄明白了,就开始把它们结合起来。

对于BC我可以帮助的很少,自从我上次触摸我的Arduino以来,它已经过了一段时间。但那些并不是很难完成。在the Processing forum中,您可以找到许多与Arduino串行通信的答案。对论坛的搜索不太好。但您可以随时使用Google。例如:serial arduino site:processing.org将在所有论坛中进行搜索(这与第三个版本类似),让您更轻松地导航结果。

对于A,我建议你试试&#34;流&#34;来自Twitter的streamingAPI。一旦开始获得结果,只需将它们添加到不同的List,例如

hashtag1hashtag2

每个列表的大小是您正在寻找的(如果我做对了)

hashtag1.size() - hashtag2.size()会给你&#34;余额&#34;他们之间。

编辑:如果您不需要这些状态,则可以添加两个整数...(h1 ++,h2 ++),并忘记列表。

这里有一些流示例代码可以帮助您入门:

import twitter4j.util.*;
import twitter4j.*;
import twitter4j.management.*;
import twitter4j.api.*;
import twitter4j.conf.*;
import twitter4j.json.*;
import twitter4j.auth.*;


TwitterStream twitterStream;

// if you enter keywords here it will filter, otherwise it will sample
String keywords[] = {
//all you need is...
  "love"
};



void setup() {     
  size(100, 100);    
  background(0); 
  openTwitterStream();
}  


void draw() {     
  background(0);
}  


// Stream it
void openTwitterStream() {  

  ConfigurationBuilder cb = new ConfigurationBuilder();  

  //fill oAuth data below
  cb.setOAuthConsumerKey("");
  cb.setOAuthConsumerSecret("");
  cb.setOAuthAccessToken("");
  cb.setOAuthAccessTokenSecret(""); 
  cb.setDebugEnabled(true);
  cb.setJSONStoreEnabled(true);
  twitterStream = new TwitterStreamFactory(cb.build()).getInstance();

  FilterQuery filtered = new FilterQuery();



  filtered.track(keywords);

  twitterStream.addListener(listener);

  if (keywords.length==0) {
    // sample() method internally creates a thread which manipulates TwitterStream 
    // and calls these adequate listener methods continuously. With a sample of the fireRose
    twitterStream.sample(); 
  } else { 
    twitterStream.filter(filtered);
  }
  println("connecting...");
} 


// Implementing StatusListener interface
StatusListener listener = new StatusListener() {

  //@Override
  public void onStatus(Status status) {
    System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
  }

  //@Override
  public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
    System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
  }

  //@Override
  public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
    System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
  }

  //@Override
  public void onScrubGeo(long userId, long upToStatusId) {
    System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
  }

  //@Override
  public void onStallWarning(StallWarning warning) {
    System.out.println("Got stall warning:" + warning);
  }

  //@Override
  public void onException(Exception ex) {
    ex.printStackTrace();
  }
};