Je dois recevoir tous les messages adressés à l'utilisateur qui identifie le jeton d'accès. C'est pour obtenir tous les commentaires que les autres utilisateurs ont fait dans leurs messages, les commentaires qui ont fait dans leurs albums. Et aussi les messages qu'ils ont reçus dans les conversations."Requiert une autorisation étendue: read_mailbox" lorsque j'obtiens toutes les conversations
Je l'ai fait comme suit:
@Override
public List<CommentEntity> getCommentsLaterThan(Date startDate, String accessToken) {
List<CommentEntity> comments = new ArrayList<CommentEntity>();
try {
logger.debug("Call Facebook API for accessToken : " + accessToken + " on thread: " + Thread.currentThread().getName());
FacebookClient facebookClient = new DefaultFacebookClient(accessToken, Version.VERSION_2_8);
// Get Information about access token owner
User user = facebookClient.fetchObject("me", User.class);
StreamUtils.concat(
StreamUtils.concat(
getAllCommentsFromPostsAfterThan(facebookClient, startDate, user),
getAllCommentsFromAlbumsAfterThan(facebookClient, startDate, user)
)
.map(comment -> facebookCommentMapper.facebookCommentToCommentEntity(comment)),
getAllCommentsFromConversationsAfterThan(facebookClient, startDate, user)
)
.collect(Collectors.toList());
logger.debug("Total Facebook comments : " + comments.size());
} catch (FacebookOAuthException e) {
logger.error(e.getErrorMessage());
throw new InvalidAccessTokenException(SocialMediaTypeEnum.FACEBOOK, accessToken);
} catch (Exception e) {
throw new GetCommentsProcessException(e);
}
return comments;
}
La méthode getAllCommentsFromConversationsAfterThan est expliquée ci-dessous:
private Stream<CommentEntity> getAllCommentsFromConversationsAfterThan(FacebookClient facebookClient, Date startDate, User user) {
Connection<Conversation> conversations = facebookClient.fetchConnection("me/conversations", Conversation.class);
return StreamUtils.asStream(conversations.iterator())
.flatMap(List::stream)
.flatMap(conversation -> {
Connection<Message> messages = facebookClient.fetchConnection(
conversation.getId() + "/messages", Message.class, Parameter.with("fields", "message,created_time,from,id"));
return StreamUtils.asStream(messages.iterator());
})
.flatMap(List::stream)
.filter(message
-> !message.getFrom().getId().equals(user.getId())
&& (startDate != null ? message.getCreatedTime().after(startDate) : true))
.map(message -> facebookMessageMapper.facebookMessageToCommentEntity(message));
}
J'ai obtenu un jeton d'accès via l'API Graph Explorateur Tool. Accorder toutes les autorisations. Et une exception se produit avec ce message d'erreur.
(# 298) Requires extended permission: read_mailbox "
La documentation indique que l'autorisation read_mailbox est obsolète. Je utilise la version 2.8. Est-il possible d'obtenir les messages des conversations?
Merci à l'avance
Non, il n'y a plus d'accès API aux messages privés d'un utilisateur. – CBroe