0

我正在使用 Twitter4j 库来开发与 Twitter 一起使用的项目,我需要的一件事是获取直接消息,我正在使用以下代码:

try{
    List<DirectMessage> loStatusList = loTwitter.getDirectMessages();
    for (DirectMessage loStatus : loStatusList) {
        System.out.println(loStatus.getId() + ",@" + loStatus.getSenderScreenName() + "," + loStatus.getText() + "|");
    }
}
catch(Exception e)

它工作正常,但代码返回的是一般最新消息的列表。我想要的是使用某种过滤器获取这些直接消息,该过滤器允许我指定的用户找到它们。

例如,我只需要查看来自用户@TwitterUser 的 DM。

这个库可以吗?

接受各种建议,即使我应该使用另一个库,如果你让我知道,我将不胜感激。

4

1 回答 1

1

看起来实际的 Twitter API 不支持该 API 上的直接过滤器,无论如何按用户名。(请参阅Twitter API 文档:GET direct_messages。)

这意味着,您必须在启用分页的情况下多次调用 API,并将响应缓存到列表中。

这是使用Twitter4J 进行分页getDirectMessages()的示例。

在该示例中,使用现有的:

List<DirectMessage> messages;

但在循环内,执行:

messages.addAll(twitter.getDirectMessages(paging));

注意:您只需执行一次。事实上,您应该将这些保存到持久的本地缓存中,例如 Redis 之类的。因为一旦你有了最后一条消息 id,你就可以要求 Twitter API 只返回带有since_id参数的“messages since id”。

无论如何,然后在客户端,您只需使用 Java 中的常用方法进行过滤。例如:

// Joe is on twitter as @joe
private static final String AT_JOE = "Joe";

// Java 8 Lambda to filter by screen name
List<DirectMessage> messagesFromJoe = messages.stream()
    .filter(message -> message.getSenderScreenName().equals(AT_JOE))
    .collect(Collectors.toList());

以上,getSenderScreenName()是通过阅读Twitter4J API 文档DirectMessage发现的。

于 2017-03-18T22:36:42.077 回答