2017-03-18 4 views
0

私は次のコードを使用しています、私は必要なものなものの一つはダイレクトメッセージを取得することで、ツイッターと連携のproyectを開発するTwitter4jライブラリを使用しています:それは正常に動作します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を参照する必要があります。

これはこのライブラリで使用できますか?

私は別のライブラリを使用する必要がありますが、私に教えていただければ幸いです。

答えて

1

実際のTwitter APIは、そのAPIのダイレクトフィルタをユーザー名でサポートしていないようです。 (Twitter API doc: GET direct_messagesを参照してください。)

つまり、ページ設定を有効にしてAPIに複数の呼び出しを行い、応答をリストにキャッシュする必要があります。

pagination wtih Twitter4J getDirectMessages()の例を示します。その例では

、既存の使用:

List<DirectMessage> messages; 

しかし、ループ内では、実行します。

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

注:あなたは一度だけこれをしなければならないでしょうが。そして、実際には、これらをレディスなどの耐久性のあるローカルキャッシュに保持する必要があります。 最後にメッセージ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 doc for DirectMessageを読むことによって発見されました。

+0

ありがとうございました。 APIによって返されるダイレクトメッセージオブジェクトの形式(通常、Twitter4Jを使用しているとします)は、通常の「ホーム」「タイムライン」のTwitterメッセージと同じですか、それともダイレクトメッセージを示すような区別がありますか? –

関連する問題