【问题标题】:Is there a way to retrieve Twitter statuses based on a list of status id:s有没有办法根据状态 id:s 列表检索 Twitter 状态
【发布时间】:2015-03-27 09:47:52
【问题描述】:

我目前正在尝试根据 Twitter 状态 id:s 的长列表 (>50k) 获取一组状态。目前我正在使用带有 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));
    }

}

}

【问题讨论】:

    标签: java twitter twitter4j


    【解决方案1】:

    这并不理想,但您可以使用lookup(long[] ids) 一次检索多达 100 个雕像。

    【讨论】:

    • 谢谢,这大大加快了速度。如果我只能将它与异步调用结合起来,那就太好了。
    猜你喜欢
    • 2015-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2020-04-15
    • 2016-02-02
    • 2012-01-02
    相关资源
    最近更新 更多