我正在尝试根据一长串(大于50k)的Twitter状态ID获取一组状态。 目前我正在使用带有twitter4j的Java。 如果可能,我真的想避免为每个ID进行单独调用,但是任何快于我的当前代码(见下文)的方法都将不胜感激。
public class TweetById {
private static String consumerKey = ...;
private static String consumerSecret = ...;
private static String accessToken = ...;
private static String accessTokenSecret = ...;
public static void main(String[] args) {
// connect to Twitter
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true);
cb.setOAuthConsumerKey(consumerKey);
cb.setOAuthConsumerSecret(consumerSecret);
cb.setOAuthAccessToken(accessToken);
cb.setOAuthAccessTokenSecret(accessTokenSecret);
Twitter twitter = new TwitterFactory(cb.build()).getInstance();
String[] ids = new String[]{"327664925705109505", "327665399644696576","327666368516341761"};
for(String id : ids){
try {
Status status = twitter.showStatus(Long.parseLong(id));
System.out.println("Time: " + status.getCreatedAt() + ": " + status.getText());
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (TwitterException e) {
e.printStackTrace();
}
}
}
编辑: 我已经尝试使用twitter4j中的异步方法,但似乎无法正常工作。我是否缺少某些东西?
public class TweetById {
private static String consumerKey = ...;
private static String consumerSecret = ...;
private static String accessToken = ...;
private static String accessTokenSecret = ...;
public static void main(String[] args) {
// connect to Twitter
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true);
cb.setOAuthConsumerKey(consumerKey);
cb.setOAuthConsumerSecret(consumerSecret);
cb.setOAuthAccessToken(accessToken);
cb.setOAuthAccessTokenSecret(accessTokenSecret);
// The factory instance is re-useable and thread safe.
AsyncTwitterFactory factory = new AsyncTwitterFactory(cb.build());
AsyncTwitter asyncTwitter = factory.getInstance();
asyncTwitter.addListener(new TwitterAdapter() {
@Override
public void gotShowStatus(Status status) {
System.out.println("Time: " + status.getCreatedAt() + ": " + status.getText());
}
});
String[] ids = new String[] { "327664925705109505", "327665399644696576", "327666368516341761" };
for (String id : ids) {
asyncTwitter.showStatus(Long.parseLong(id));
}
}
}