有没有一种方法可以根据状态ID列表检索Twitter状态?

3

我正在尝试根据一长串(大于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));
    }

}

}

1个回答

0

虽然不是最理想的方法,但你可以使用lookup(long[] ids)一次检索多达100个状态。


谢谢,这大大加快了速度。如果我能将其与异步调用结合起来,那就太好了。 - Robin Keskisarkka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接