I'm trying to use the twitter API to search for a keyword and get the location of that particular tweet to then visualise onto a map.
I've successfully created my map using unfolding maps and tilemill, I'm just struggling with the twitter part. Using the twitter 4J library, I've tried the following code but I'm not able to get the location as coordinates. Also, once I've got the coordinates I dont know how to go about visualising them on my map.
import twitter4j.conf.*;
import twitter4j.api.*;
import twitter4j.*;
import java.util.List;
import java.util.Iterator;
ConfigurationBuilder cb;
Query query;
Twitter twitter;
ArrayList<String> twittersList;
Timer time;
//Number twitters per search
int numberSearch = 10;
PFont font;
int fontSize = 14;
void setup() {
size(670, 650);
background(0);
smooth(4);
//FONT
font = createFont("NexaLight-16.vlw", fontSize, true);
textFont(font, fontSize);
//You can only search once every 1 minute
time = new Timer(70000); //1 min with 10 secs
//Acreditacion
cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("**********");
cb.setOAuthConsumerSecret("***********");
cb.setOAuthAccessToken("**************");
cb.setOAuthAccessTokenSecret("*************");
//Make the twitter object and prepare the query
twitter = new TwitterFactory(cb.build()).getInstance();
//SEARCH
twittersList = queryTwitter(numberSearch);
}
void draw() {
background(50);
//draw twitters
drawTwitters(twittersList);
if (time.isDone()) {
twittersList = queryTwitter(numberSearch);
time.reset();
}
text(time.getCurrentTime(), 20, 30);
time.update();
}
void drawTwitters(ArrayList<String> tw) {
Iterator<String> it = tw.iterator();
int i = 0;
while (it.hasNext ()) {
String twitt = it.next();
fill(150);
text(i + 1, 27, 60 + i*(fontSize)*4 + fontSize);
fill(220);
text(twitt, 50, 60 + i*(fontSize)*4, 600, fontSize*4);
i++;
}
}
double lat = 63.894947;
double lon = -22.054045;
double res = 10;
String resUnit = "mi";
ArrayList<String> queryTwitter(int nSearch) {
ArrayList<String> twitt = new ArrayList<String>();
query = new Query("#happy");
query.setCount(nSearch);
try {
QueryResult result = twitter.search(new Query().geoCode(new GeoLocation(lat, lon),res, resUnit));
List<Status> tweets = result.getTweets();
println("New Tweet : ");
for (Status tw : tweets) {
String msg = tw.getText();
String usr = tw.getUser().getScreenName();
String twStr = "@"+usr+": "+msg;
println(twStr);
twitt.add(twStr);
}
}
catch (TwitterException te) {
println("Couldn't connect: " + te);
}
return twitt;
}
I'm quite new to processing, so please be patient with me as I don't even know if I'm going about this the right way.
Any help would be gratefully appreciated!!