我正在使用Twitter4j库来开发一个与Twitter一起工作的项目,我需要的是获取Direct消息,我使用以下代码:
try{
List<DirectMessage> loStatusList = loTwitter.getDirectMessages();
for (DirectMessage loStatus : loStatusList) {
System.out.println(loStatus.getId() + ",@" + loStatus.getSenderScreenName() + "," + loStatus.getText() + "|");
}
}
catch(Exception e)
它工作正常,但代码返回的是一般的最新消息列表。我想要的是使用某种过滤器来获取这些直接消息,这些过滤器允许我指示的用户找到它们。
例如,我只需要从用户@TwitterUser看到DM。
这个库有效吗?
即使我应该使用其他图书馆,也接受各种建议。如果您让我知道,我将不胜感激。
答案 0 :(得分:1)
看起来实际的Twitter API不支持通过用户名对该API进行直接过滤。 (见Twitter API doc: GET direct_messages
。)
这意味着,您必须在启用分页的情况下对API进行多次调用,并将响应缓存到列表中。
以下是pagination wtih Twitter4J getDirectMessages()
的示例。
在该示例中,使用现有的:
List<DirectMessage> messages;
但在循环中,请执行:
messages.addAll(twitter.getDirectMessages(paging));
注意:您只需要执行一次此操作。事实上,你应该将它们保存到像Redis之类的持久本地缓存中。因为一旦您拥有 last 消息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
发现的。{/ p>