gpt4 book ai didi

java - 是否可以使用 Twitter4j 库从特定用户获取 Twitter 的直接消息?

转载 作者:行者123 更新时间:2023-12-02 13:38:12 24 4
gpt4 key购买 nike

我正在使用 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。

这个库可以吗?

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

最佳答案

看起来实际的 Twitter API 无论如何都不支持通过用户名对该 API 进行直接过滤。 (参见Twitter API doc: GET direct_messages。)

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

这里是 pagination wtih Twitter4J getDirectMessages() 的示例.

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

List<DirectMessage> messages;

但在循环内,执行以下操作:

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

注意:您只需执行一次此操作。事实上,您应该将它们持久保存到持久的本地缓存中,例如 Redis 等。因为一旦您获得最后消息 ID,您可以要求 Twitter API 仅返回带有 since_id 参数的“自 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 doc for DirectMessage 发现的.

关于java - 是否可以使用 Twitter4j 库从特定用户获取 Twitter 的直接消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42880613/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com