“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を取得しています。