Twitter4j - 通过ID获取推文

5

当我有推文ID和用户ID时,如何获取推文?我有一个包含以下行的文件:

userID  tweetID

我想我应该去通过:

Query query = new Query("huh ?");
QueryResult result = twitter.search(query);
List<Status> tweets = result.getTweets();

但我不知道如何拼写查询

谢谢。

3个回答

15

这不是一个搜索调用。这个推文显然被称为Status,用于通过ID检索的代码如下:

    final Twitter twitter = new TwitterFactory().getInstance();
    twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_KEY_SECRET);
    AccessToken accessToken = new AccessToken(TWITTER_TOKEN,
            TWITTER_TOKEN_SECRET);
    twitter.setOAuthAccessToken(accessToken);
    try {
        Status status = twitter.showStatus(Long.parseLong(tweetID));
        if (status == null) { // 
            // don't know if needed - T4J docs are very bad
        } else {
            System.out.println("@" + status.getUser().getScreenName()
                        + " - " + status.getText());
        }
    } catch (TwitterException e) {
        System.err.print("Failed to search tweets: " + e.getMessage());
        // e.printStackTrace();
        // DON'T KNOW IF THIS IS THROWN WHEN ID IS INVALID
    }

你好,我有一个关于你的程序的问题。它能检索多少条推文? - zfz
@zfz:它可以检索50条推文,但有5个失败 - 尚未检查更多。 - Mr_and_Mrs_D

0

被接受的答案已经过时了。根据这个页面中的答案,代码应该更改为以下内容:

    String consumerKey = xxxxxxx,
            consumerSecret = xxxxxxx,
            twitterAccessToken = xxxxxxx,
            twitterAccessTokenSecret = xxxxxxx,
            Tweet_ID = xxxxxxx;

    ConfigurationBuilder builder = new ConfigurationBuilder();
    builder.setOAuthConsumerKey(consumerKey);
    builder.setOAuthConsumerSecret(consumerSecret);
    Configuration configuration = builder.build();
    TwitterFactory factory = new TwitterFactory(configuration);
    final Twitter twitter = factory.getInstance();

    //twitter.setOAuthConsumer(consumerKey, consumerSecret);
    AccessToken accessToken = new AccessToken(twitterAccessToken, twitterAccessTokenSecret);
    twitter.setOAuthAccessToken(accessToken);
    try {
        Status status = twitter.showStatus(Long.parseLong(Tweet_ID));
        if (status == null) { //
            // don't know if needed - T4J docs are very bad
        } else {
            System.out.println("@" + status.getUser().getScreenName()
                    + " - " + status.getText());
        }
    } catch (
            TwitterException e) {
        System.err.print("Failed to search tweets: " + e.getMessage());
        // e.printStackTrace();
        // DON'T KNOW IF THIS IS THROWN WHEN ID IS INVALID
    }

你运行了我的代码但是它没有运行吗?请注意,你提到的问题中调用了TwitterFactory.getSingleton(),但我在这里没有使用。 - Mr_and_Mrs_D
是的。你的代码不起作用,要将身份验证信息传递给Twitter对象,应该使用“ConfigurationBuilder”。 - Habib Karbasian

0
一个非常简单的通过推特ID获取推文列表的方式是使用像这样的lookup函数:
public static void main(String[] args) throws TwitterException {
        ConfigurationBuilder cfg = new ConfigurationBuilder();
        cfg.setOAuthAccessToken("key");
        cfg.setOAuthAccessTokenSecret("key");
        cfg.setOAuthConsumerKey("key");
        cfg.setOAuthConsumerSecret("key");

        Twitter twitter = new TwitterFactory(cfg.build()).getInstance();
        long[] ids = new long [3];
        ids[0] = 568363361278296064L;
        ids[1] = 568378166512726017L;
        ids[2] = 570544187394772992L;

        ResponseList<Status> statuses = twitter.lookup(ids);

        for (Status status : statuses) {
            System.out.println(status.getText());
        }
    }

使用lookup的优点是您可以通过单个调用获取多达100条推文,这意味着如果您需要下载大量推文,则需要做更少的调用到Twitter API并加快进程(这是因为Twitter限制您可以进行的调用次数)。
您甚至可以像这样检查在Twitter将您放入超时之前可以执行的调用次数:
RateLimitStatus searchLimits = twitter.getRateLimitStatus("statuses").get("/statuses/lookup");

int remain = searchLimits.getRemaining();
int limit = searchLimits.getLimit();
int secToReset = searchLimits.getSecondsUntilReset();

System.out.println(remain); // this returns the number of calls you have left
System.out.println(limit); // this returns how many calls you have max(this is a fixed number)
System.out.println(secToReset); // this returns the number of second before the reset
// after the reset you return to have the number of calls specified by "limit"

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