我的目标是收集所有包含“法国”和“德国”这两个词的推文,并收集相关元数据(例如,附加到推文的地理坐标)。我知道这些元数据是可用的,但我无法弄清如何使用我正在使用的Java库“twitter4j”访问它。
好的,那么我目前所拥有的来自于Twitter4j网站上的代码示例。它会实时打印出包含我选择关键字的所有推文,这些推文由Twitter的流API提供。我在我的TwitterStream对象上调用过滤方法,这提供了流。但我需要更多的控制。即,我想能够:
1)将推文写入文件; 2)只打印前1000条推文; 3)访问附加到推文的其他元数据(过滤方法只打印用户名和推文本身)。
以下是我目前拥有的代码:
好的,那么我目前所拥有的来自于Twitter4j网站上的代码示例。它会实时打印出包含我选择关键字的所有推文,这些推文由Twitter的流API提供。我在我的TwitterStream对象上调用过滤方法,这提供了流。但我需要更多的控制。即,我想能够:
1)将推文写入文件; 2)只打印前1000条推文; 3)访问附加到推文的其他元数据(过滤方法只打印用户名和推文本身)。
以下是我目前拥有的代码:
import twitter4j.FilterQuery;
import twitter4j.Status;
import twitter4j.StatusDeletionNotice;
import twitter4j.StatusListener;
import twitter4j.TwitterException;
import twitter4j.TwitterStream;
import twitter4j.TwitterStreamFactory;
import twitter4j.conf.ConfigurationBuilder;
public class Stream {
public static void main(String[] args) throws TwitterException {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true);
cb.setOAuthConsumerKey("bbb");
cb.setOAuthConsumerSecret("bbb");
cb.setOAuthAccessToken("bbb");
cb.setOAuthAccessTokenSecret("bbb");
TwitterStream twitterStream = new TwitterStreamFactory(cb.build()).getInstance();
StatusListener listener = new StatusListener() {
public void onStatus(Status status) {
System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
}
public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) {
System.out.println("Got a status deletion notice id:" + statusDeletionNotice.getStatusId());
}
public void onTrackLimitationNotice(int numberOfLimitedStatuses) {
System.out.println("Got track limitation notice:" + numberOfLimitedStatuses);
}
public void onScrubGeo(long userId, long upToStatusId) {
System.out.println("Got scrub_geo event userId:" + userId + " upToStatusId:" + upToStatusId);
}
public void onException(Exception ex) {
ex.printStackTrace();
}
};
FilterQuery fq = new FilterQuery();
String keywords[] = {"France", "Germany"};
fq.track(keywords);
twitterStream.addListener(listener);
twitterStream.filter(fq);
}
}