hap*_*cap 10 java twitter processing twitter4j
我正在使用Twitter4j库来检索推文,但是我的目的并不足够.目前,我从一个页面获得最多100个.如何在Processing中将maxId和sinceId实现为以下代码,以便从Twitter搜索API中检索超过100个结果?我对Processing(以及一般的编程)完全不熟悉,所以对此的任何方向都会很棒!谢谢!
void setup() {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("xxxx");
cb.setOAuthConsumerSecret("xxxx");
cb.setOAuthAccessToken("xxxx");
cb.setOAuthAccessTokenSecret("xxxx");
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
Query query = new Query("#peace");
query.setCount(100);
try {
QueryResult result = twitter.search(query);
ArrayList tweets = (ArrayList) result.getTweets();
for (int i = 0; i < tweets.size(); i++) {
Status t = (Status) tweets.get(i);
GeoLocation loc = t.getGeoLocation();
if (loc!=null) {
tweets.get(i++);
String user = t.getUser().getScreenName();
String msg = t.getText();
Double lat = t.getGeoLocation().getLatitude();
Double lon = t.getGeoLocation().getLongitude();
println("USER: " + user + " wrote: " + msg + " located at " + lat + ", " + lon);
}
}
}
catch (TwitterException te) {
println("Couldn't connect: " + te);
};
}
void draw() {
}
Run Code Online (Sandbox Code Playgroud)
Pet*_*ros 23
不幸的是你不能,至少不能直接这样做
query.setCount(101);
Run Code Online (Sandbox Code Playgroud)
正如javadoc所说,它只允许最多100条推文.
为了克服这个问题,您只需要批量询问它们,并且在每个批次设置中,您获得的最大ID比最后一个ID低1.为了将它包装起来,你将每个推文从进程收集到一个ArrayList(顺便说一句,它不应该保持通用,但是它的类型定义为ArrayList<Status>- 一个携带Status对象的ArrayList),然后打印所有内容!这是一个实现:
void setup() {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setOAuthConsumerKey("xxxx");
cb.setOAuthConsumerSecret("xxxx");
cb.setOAuthAccessToken("xxxx");
cb.setOAuthAccessTokenSecret("xxxx");
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
Query query = new Query("#peace");
int numberOfTweets = 512;
long lastID = Long.MAX_VALUE;
ArrayList<Status> tweets = new ArrayList<Status>();
while (tweets.size () < numberOfTweets) {
if (numberOfTweets - tweets.size() > 100)
query.setCount(100);
else
query.setCount(numberOfTweets - tweets.size());
try {
QueryResult result = twitter.search(query);
tweets.addAll(result.getTweets());
println("Gathered " + tweets.size() + " tweets");
for (Status t: tweets)
if(t.getId() < lastID) lastID = t.getId();
}
catch (TwitterException te) {
println("Couldn't connect: " + te);
};
query.setMaxId(lastID-1);
}
for (int i = 0; i < tweets.size(); i++) {
Status t = (Status) tweets.get(i);
GeoLocation loc = t.getGeoLocation();
String user = t.getUser().getScreenName();
String msg = t.getText();
String time = "";
if (loc!=null) {
Double lat = t.getGeoLocation().getLatitude();
Double lon = t.getGeoLocation().getLongitude();
println(i + " USER: " + user + " wrote: " + msg + " located at " + lat + ", " + lon);
}
else
println(i + " USER: " + user + " wrote: " + msg);
}
}
Run Code Online (Sandbox Code Playgroud)
注意:该行
ArrayList<Status> tweets = new ArrayList<Status>();
Run Code Online (Sandbox Code Playgroud)
应该是:
List<Status> tweets = new ArrayList<Status>();
Run Code Online (Sandbox Code Playgroud)
因为如果要添加其他实现,应始终使用该接口.当然,如果你在Processing 2.x上,那么在开始时需要这个:
import java.util.List;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15329 次 |
| 最近记录: |