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の”つぶやき”を実装する“を参照して下さい。

1
2
3
4
5
6
7
8
9
10
11
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クラスに文字列として格納するサンプルです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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を取得しています。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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