twitter4j-从流式API访问tweet信息
我的目标是收集所有包含“法国”和“德国”字样的推文,并收集相关元数据(例如,推文附带的地理坐标)。我知道这个元数据是可用的,但我不知道如何使用我正在使用的Java库“twitter4j”访问它 好的,到目前为止,我从twitter4j站点上的代码示例中获得了一些信息。它打印出包含我选择的关键字的所有推文,因为它们是由推特的流式API实时提供的。我在TwitterStream对象上调用filter方法,这提供了流。但我需要更多的控制。也就是说,我希望能够: 1) 将tweets写入文件; 2) 只打印出前1000条推文; 3) 访问附加到tweet的其他元数据(filter方法只打印用户名和tweet本身) 以下是我目前掌握的代码:twitter4j-从流式API访问tweet信息,twitter,twitter4j,Twitter,Twitter4j,我的目标是收集所有包含“法国”和“德国”字样的推文,并收集相关元数据(例如,推文附带的地理坐标)。我知道这个元数据是可用的,但我不知道如何使用我正在使用的Java库“twitter4j”访问它 好的,到目前为止,我从twitter4j站点上的代码示例中获得了一些信息。它打印出包含我选择的关键字的所有推文,因为它们是由推特的流式API实时提供的。我在TwitterStream对象上调用filter方法,这提供了流。但我需要更多的控制。也就是说,我希望能够: 1) 将tweets写入文件; 2) 只
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);
}
}
在用新的眼光审视这一点之后,我意识到了解决办法(这是非常明显的)。编辑代码的以下部分:
public void onStatus(Status status) {
System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText());
}
允许我访问其他元数据。例如,如果我想访问tweet的日期,我只需要添加以下内容:
System.out.println(status.getCreatedAt());
错误401出现在API试图访问某些目前无法获取的信息时。所以你需要检查twitter上允许的权限。将其更改为读、写和。。。用于完全访问API。或者在使用代理服务器时可能会出现问题。因此,请使用以下命令提及代理详细信息
System.getProperties().put("http.proxyHost", "10.3.100.211");
System.getProperties().put("http.proxyPort", "8080");
要在文件中写入推文,请执行以下操作:
FileWriter file = new FileWriter(....);
public void onStatus(Status status) {
System.out.println("@" + status.getUser().getScreenName() + " - " + status.getText() + " -> "+ status.getCreatedAt());
try {
file.write(status.getUser().getScreenName() + " - " + status.getText() + " -> "+ status.getCreatedAt() +"\n");
file.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我需要帮助。我遇到了以下错误。”类型new StatusListener(){}必须实现继承的抽象方法StatusListener.onStallWarning(StallWarning)'您使用的是哪个版本的Twitter4J?TwitterStream类似乎不包括在我的类中。我用的是3.0。