Twitter4JでTimeLineを取得する


Twitterの”つぶやき”を実装する“ではTwitterクラスオブジェクトを作成してつぶやく方法を紹介しました。

今回はTwitterクラスオブジェクトを使用して、TimeLineを取得する方法を紹介します。

詳細は以下から。

TimeLineの種類

Twitterオブジェクトを使用して取得できるTimeLineは以下の8種類があります。

public_timeline 公開TimeLineです。
home_timeline 自分のデフォルトTimelineです。常に公式RTを含むます。
friend_timeline home_timelineとほぼ同様のTimelineですが、オプションで公式RTを含まない事ができます。
user_timeline 自分の発言を集めたTimelineです。
mentions 発言に自分のidを含むつぶやきをまとめたTimelineです。
retweeted_by_me 自分が公式RTしたつぶやきをまとめたTimelineです。
retweeted_to_me 自分がフォローしているユーザーの公式RTをまとめたTimelineです。
retweeted_of_me 公式RTされた自分のつぶやきがまとめられたTimelineです。

今回はこの中から最もオーソドックスなhome_timelineを取得します。

その他のTimelineを取得したい場合は公式ドキュメントを参照して下さい。(基本的には
Twitter#get****Timelineメソッドを使用して各Timelineを取得します。)

以下はhome_timelineを取得するサンプルです。
※サンプル中の変数twはTwitterクラスオブジェクトです。
詳しくは”Twitterの”つぶやき”を実装する“を参照して下さい。

try {
        //TLの取得
        ResponseList<Status> homeTl = tw.getHomeTimeline();
} catch (TwitterException e) {
    e.printStackTrace();
    if(e.isCausedByNetworkIssue()){
        Toast.makeText(getApplicationContext(), "ネットワークに接続して下さい", Toast.LENGTH_LONG);
    }else{
        Toast.makeText(getApplicationContext(), "エラーが発生しました。", Toast.LENGTH_LONG);
    }
}

Statusクラス

Twitter#get****Timelineメソッドを使用すると、戻り値として、ResponseListオブジェクトが返却されます。

このResponseListオブジェクト内に格納されているStatusクラスオブジェクトにTimelineのつぶやき1つ分の
ユーザー情報やつぶやきの内容が格納されています。(Statusクラスの公式ドキュメントはこちら)

以下のサンプルはResponseListオブジェクト内に格納されている全てのつぶやきのユーザーIDとつぶやきを
取得し、ArrayAdapterクラスに文字列として格納するサンプルです。

try {
    //TLの取得
    ResponseList<Status> homeTl = tw.getHomeTimeline();

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1);

    for (Status status : homeTl) {
        //つぶやきのユーザーIDの取得
        String userName = status.getUser().getScreenName();
        //つぶやきの取得
        String tweet = status.getText();
        adapter.add("ユーザーID:" + userName + "\r\n" + "tweet:" + tweet);
    }
} catch (TwitterException e) {
    e.printStackTrace();
    if(e.isCausedByNetworkIssue()){
        Toast.makeText(getApplicationContext(), "ネットワークに接続して下さい", Toast.LENGTH_LONG);
    }else{
        Toast.makeText(getApplicationContext(), "エラーが発生しました。", Toast.LENGTH_LONG);
    }
}

9行目ではStatus#getUserメソッドでUserクラスオブジェクトを取得し、User#getScreenNameメソッドで
TwitterIDを取得しています。
UserクラスにはTwitterユーザーの情報が格納されています(公式ドキュメントはこちら)

11行目ではStatus#getTextメソッドでつぶやきの内容を取得しています。

途中からのTimelineを取得する

上記手順では最新のつぶやきから20件のみ取得しますが、Twitter#get****TimelineメソッドにPagingクラス
オブジェクトを引数として渡すことで、取得するTimelineの開始位置や取得数などを設定できます。
(Pagingクラスの公式ドキュメントはこちら)

以下の表は設定できる内容の一覧です。

since_id 取得したいTimeline内で最も古いつぶやきのID
max_id 取得したいTimeline内で最も新しいつぶやきのID
count 一度に取得するつぶやきの数。200が上限。
page 取得するつぶやきのページ番号。

以下のサンプルは最新から20件のTimelineと、更に20件後のTimemelineを取得しています。

try {
    //TLの取得
    ResponseList<Status> homeTl = tw.getHomeTimeline();

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1);

    for (Status status : homeTl) {
        //つぶやきのユーザーIDの取得
        String userName = status.getUser().getScreenName();
        //つぶやきの取得
        String tweet = status.getText();
        adapter.add("ユーザーID:" + userName + "\r\n" + "tweet:" + tweet);
    }

    //最後のつぶやきを取得
    Status s = homeTl.get(homeTl.size());
    //Pagingオブジェクトの作成
    Paging p = new Paging();
    p.setMaxId(s.getId());

    homeTl = null;
    //Pagingオブジェクトで取得済みのつぶやき以降のつぶやきを取得
    homeTl = tw.getHomeTimeline(p);

    for (Status status : homeTl) {
        //つぶやきのユーザーIDの取得
        String userName = status.getUser().getScreenName();
        //つぶやきの取得
        String tweet = status.getText();
        adapter.add("ユーザーID:" + userName + "\r\n" + "tweet:" + tweet);
    }
} catch (TwitterException e) {
    e.printStackTrace();
    if(e.isCausedByNetworkIssue()){
        Toast.makeText(getApplicationContext(), "ネットワークに接続して下さい", Toast.LENGTH_LONG);
    }else{
        Toast.makeText(getApplicationContext(), "エラーが発生しました。", Toast.LENGTH_LONG);
    }
}

18行目でPagingクラスオブジェクトを作成し、19行目でPaging#setMaxIdメソッドを使用して、取得する最も
新しいつぶやきを指定しています。

23行目では18,19行目で作成したPagingクラスオブジェクトを引数として指定してTimelineを取得しています。

2 Comments