さいきん Twitter ボットを作りはじめた。
フォローしているユーザーのつぶやき(status)に対して何かアクションを起こしたいけど、もしそれが非公開のもの(許可されたユーザーには公開される)だったらマズいので、ちょっと判定のテストをしてみたメモ。

非公開つぶやき環境の準備

[ユーザーAの操作]
設定ページにて「つぶやきを非公開にする」
Twitter あなたのつぶやきを非公開にしました。 (なんで途中でメッセージ切れてんの。。。)

[ユーザーBの操作]
ユーザーAのページを見ると「このユーザーはつぶやきを非公開にしています。フォローするにはリクエストが必要です。」と表示されているので、そこで「リクエストを送る」をクリック。

[ユーザーAの操作]
ユーザーAのページに「新しいフォロー1件!」と表示されるのでこれをクリック。
「あなたをフォローしたいユーザーからの新しいリクエスト」「XXXXXXXXからあなたのつぶやきを見たいというリクエストを受け取りました。」と表示されるので、ここで「許可する」をクリック。

[ユーザーBの操作]
ユーザーAのページを見るとつぶやきが見れるようになっている。つぶやきの左側には錠マークがついていて、このつぶやきが非公開である(許可されたユーザーにしか見れない)ことを注意してくれる。
Twitter あなたのつぶやきを非公開にしました。

Twitter4Jで非公開つぶやきかどうか判定する

Twitter4JTwitter API を手軽に扱うことができる Java のライブラリ。

Twitter4J の User#isProtected を使えば非公開のつぶやきかどうか判定できる。

以下のプログラムは、ユーザーBがフォローしているつぶやき(status)を取得して、それが非公開なつぶやき(許可されたユーザーにしか見れない)かどうかチェックするサンプル。
Twitter4J のバージョン 2.0.0 を使っている。


import twitter4j.*;
 
public class ProtectMessageTest {
 
  public static void main(String[] args) throws Exception {
 
    String userid = "hoge"; // ユーザーBのユーザー名
    String password = "foobar"; // ユーザーBのパスワード
 
    Twitter twitter = new Twitter(userid, password);
 
    // フォローしているユーザーの直近20件のつぶやきを取得
    java.util.List<Status> statusList = twitter.getFriendsTimeline();
    for(int i=0; i<statusList.size(); i++){
      Status s = statusList.get(i);
      User u = s.getUser();
      System.out.println(s);
      System.out.println(u);
      System.out.println(u.isProtected()); // 非公開つぶやきだったら true を出力
    }
 
  }
 
}

ユーザーAがつぶやいた直後にこのサンプルを実行したら、ユーザーAのつぶやきが出力された。
ユーザーAのつぶやきは非公開つぶやきなので、 User#isProtected が true をちゃんと出力していた。

Ref. Twitter: What are you doing?

tags: zlashdot Chatbot Chatbot Java Twitter

Posted by NI-Lab. (@nilab)