2017-08-08 3 views
0

アクセストークンを識別するユーザー宛のすべてのメッセージを取得する必要があります。これは、他のユーザーが自分の投稿に行ったすべてのコメント、アルバムのコメントを取得することです。また会話で受け取ったメッセージも表示されます。すべての会話を取得するときに「拡張アクセス許可が必要です:read_mailbox」

私は次のように行っている:私はグラフAPIエクスプローラツールを通じてアクセストークンを取得している

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)); 
    } 

@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; 
    } 

getAllCommentsFromConversationsAfterThan方法を説明します。すべての権限を与える。そして、このエラーメッセージで例外が発生します。

(# 298) Requires extended permission: read_mailbox " 

このドキュメントには、read_mailbox権限が廃止されていると記載されています。

私はバージョン2.8を使用しています。会話からメッセージを得ることは可能ですか?事前

+1

いいえ、ユーザーのプライベートメッセージへのAPIアクセスはこれ以上ありません。 – CBroe

答えて

0

まずにおける

おかげで、あなたはread_page_mailboxes権限を持つユーザーのアクセストークンを取得する必要があります。次に、ページアクセストークンを生成することができます。

関連する問題