twitter4jを利用して認証ユーザ名やタイムラインを取得する
概要
今回はtwitter4jを利用して、ユーザ名とタイムライン(以下TL)の取得を行った。
まず認証ユーザ名の取得に関しては、適切なアクセストークンを取得できていれば、メソッド一つで簡単に取得できる事が確認できた。
続いて、TLの取得を行った。twitterのTLにはいくつかの種類がある為、まずはその分類を示した。その後、各TLの取得法及び取得時に使用可能なオプションを確認した。
ユーザ名(スクリーンネーム)の取得
アクセストークンを適切に取得していれば、簡単に取得できる。アクセストークンの取得に関しては前回の記事 *1 を参照。
実際にスクリーンネームを取得するには、TwitterクラスのgetScreenNameメソッドを呼び出せば良い*2。実に簡単。
//Twitterクラスのインスタンスtwitterには、適切なAccessTokenが設定できているとする
String screenName = twitter.getScreenName();
TLの取得
TLの種類
TLと言っても、それには様々な種類が存在する*3。以下に、存在するTLの分類を示す。
TLの分類 | 概要 |
---|---|
public_timeline | 公開TL。公開ユーザのツイートから最も新しいステータスを取得できる。 |
home_timeline | ホームTL。自分のデフォルトタイムラインの事である。下記のfriend TLとほぼ同じだが、こちらは常に公式RTを含む結果を返す。 |
friends_timeline | フレンドTL。基本的にはホームTLと変わらないが、オプションによって公式RTを含めるかどうかを指定できる。 |
user_timeline | ユーザTL。任意のユーザを指定して、そのユーザの発言をまとめたTL。早い話が、twitter.com上で相手のプロフィールを見た時のTLである。 |
mentions | 言及。自分への言及をまとめたTL。つまり、twitter.com上から「@関連」で見られるTLである。 |
retweeted_by_me | 自分の公式RTをまとめたTL。twitter.com上では、「リツイート」->「あなたのリツイート」で見られる。 |
retweeted_to_me | 自分がフォローしているユーザの公式RTをまとめたTL。ややこしい。 |
retweeted_of_me | 公式RTされた自分の発言をまとめたTL。 |
twitter4jには、これら全てのタイムラインに対応するAPI呼び出しソメッドが存在する*4。
尚ここで、『ステータス』とは発言者とツイート、そこに含まれる@mention、Hashタグなどをひとまとめにしたデータの塊を示すようである。例えばdeveloper向けに公開されているAPIコンソール(API Console | dev.twitter.com)からxmlでpublic_timelineを取得すると、次の様な応答が得られる。
<?xml version="1.0" encoding="UTF-8"?> <statuses type="array"> <status> <created_at>Mon Oct 25 12:47:33 +0000 2010</created_at> <id>28687238000</id> (中略) </status> <status> <created_at>Mon Oct 25 12:47:31 +0000 2010</created_at> <id>28687236000</id> ...
TL取得時のオプション
API経由でTLを取得する際には、以下のオプションが使用可能な物もある。
option項目 | 概要 |
---|---|
since_id | 取得する最も古いステータスのid |
max_id | 取得する最も新しいステータスのid |
count | 一度に取得するステータス数。最大は200 |
page | 取得ステータスのページ番号 |
user_id | user_timeline取得時にユーザを指定するオプションその1 |
screen_name | user_timeline取得時にユーザを指定するオプションその2 |
include_rts | 公式RTを含むかどうかのフラグ |
trim_user | ユーザデータの簡略化フラグ |
include_entities | user_mentionsやurl, hashtagsの情報取得フラグ |
このうち、下の三つはtwitter4jから設定できない。こちらで実験した所、少なくともinclude_rtsは常にtrueの挙動を示している。
(10/28訂正)include_rtsは、twitter4jのプロパティとして設定可能です。ライブラリ作者の山本様からご指摘を頂きました。お詫びして訂正致します。詳細はこちらのページを参考にして下さい。
Twitter4J - 設定
尚、GAE/j上でプロパティファイルから設定する場合には、OAuthの設定と同様appengine-web.xmlに記述する必要があります*5。
<system-properties> <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> <property name="oauth.consumerKey" value="{取得したconsumerKey}"/> <property name="oauth.consumerSecret" value="{取得したconsumerSecret}"/> <property name="includeRTs" value={ "true" or "false" }/> </system-properties>
(訂正ここまで)
また、上の四つ、ステータスの取得範囲の設定に関しては、Pagingクラスを通して設定する必要がある。Pagingクラスの使い方は以下の通りである。
Paging paging = new Paging();
paging.setSinceId(sinceId);
paging.setMaxId(maxId);
paging.setCount(count);
paging.setPage(page);
もしくはもっと単純に
Paging paging = new Paging(page, count, sinceId, maxId);
Pagingクラスで指定できる値の意味は、こちらの記事が参考になる。
Twitter APIのsince_idの仕様を勘違いしていた… - 風柳メモ
public_timelineの取得
public_timelineの取得には、twitterクラスのgetPublicTimelineメソッドを利用する。
ResponseList<Status> statuses = twitter.getPublicTimeline();
返り値はStatusクラスのList、ResponseList
APIの仕様上、このAPIは二つのオプションが取れる事になっているが、getPublicTimelineは引数なしの呼び出しのみに対応している。
通常は、最新の20件を取得可能である(20件返ってこない事もある)。
home_timelineの取得
home_timelineの取得には、twitterクラスのgetHomeTimelineメソッドを利用する。
ResponseList<Status> statuses = twitter.getHomeTimeline();
通常は、最新の20件を取得可能である(20件返ってこない事もある)。
このメソッドはPagingに対応しており、以下の使い方もできる。
Paging paging = new Paging(page, count, sinceId, maxId);
ResponseList<Status> twitterStatuses = twitter.getHomeTimeline(paging);
friends_timelineの取得
friends_timelineの取得には、twitterクラスのgetFriendsTimelineメソッドを利用する。
ResponseList<Status> twitterStatuses = twitter.getFriendsTimeline();
通常は、最新の20件を取得可能である(20件返ってこない事もある)。
このメソッドはPagingに対応しており、以下の使い方もできる。
Paging paging = new Paging(page, count, sinceId, maxId);
ResponseList<Status> twitterStatuses = twitter.getFriendsTimeline(paging);
元々のAPIでは、オプションによってretweetを含むTLも取得できるが、twitter4jにはそのオプションは存在しない様である。こちらのメソッドでも公式RTを含んだTLの取得が可能であり、getHomeTimelineとの使い分けはよく分からない。
user_timelineの取得
user_timelineの取得には、twitterクラスのgetUserTimelineメソッドを利用する。
ResponseList<Status> statuses = twitter.getUserTimeline();
引数無し、もしくはユーザ指定無しで実行した場合、自分の発言のTLが取得できる。通常は、最新の20件を取得可能である(20件返ってこない事もある)。
このソメッドは、ユーザ指定の為のuser_id(int)又はscreen_name(String)とPagingに対応しており、以下の使い方もできる。
Paging paging = new Paging(page, count, sinceId, maxId);
ResponseList<Status> statuses = twitter.getUserTimeline(user_id, paging);
ResponseList<Status> statuses = twitter.getUserTimeline(screen_name, paging);
||
***mentionsの取得
mentionsの取得には、twitterクラスのgetMentionsメソッドを利用する。
>|java|
ResponseList<Status> statuses = twitter.getMentions();
これまでのソメッドと同様、Pagingによる取得範囲の指定も可能である。
Paging paging = new Paging(page, count, sinceId, maxId);
ResponseList<Status> statuses = twitter.getMentions(paging);
retweeted_by_meの取得
retweeted_by_meの取得には、twitterクラスのgetRetweetedByMeメソッドを利用する。
これまでのソメッドと同様、Pagingによる取得範囲の指定も可能であるが、そろそろ省略する。
ResponseList<Status> statuses = twitter.getRetweetedByMe();
retweeted_to_meの取得
retweeted_to_meの取得には、twitterクラスのgetRetweetedToMe()メソッドを利用する。
これまでのソメッドと同様、Pagingによる取得範囲の指定も可能であるが、省略する。
ResponseList<Status> statuses = twitter.getRetweetedToMe();
retweeted_of_meの取得
retweeted_of_meの取得には、twitterクラスのgetRetweetsOfMe()メソッドを利用する。
これまでのソメッドと同様、Pagingによる取得範囲の指定も可能である。
ResponseList<Status> statuses = twitter.getRetweetsOfMe();
取得したTLの利用
これまで示してきた方法で、ツイートを取得する事はできる。これらツイートの利用法だが、これも簡単である。これには、statusクラスに備わっている各種メソッドを利用するだけである。
Status (twitter4j-core 2.1.6 API)
特に利用頻度が高いだろう、投稿者とその発言内容、及びそのツイートのidの取得を行う場合、以下の様にすれば良い。
for (Status status : statuses) { long id = status.getId(); out.println(Long.toString(id) + ":" + status.getUser().getName() + ":" + status.getText()); }
まとめ
- スクリーンネームの取得にはtwitterクラスのgetScreenNameメソッドを利用する
- タイムラインには八種類あり、それぞれTwitterクラスの以下のソメッドでResponseList
として取得できる - public_timeline : twitter.getPublicTimeline(), オプション無し
- home_timeline : twitter.getHomeTimeline(), Paging利用可
- friends_timeline : twitter.getFriendsTimeline(), Paging利用可
- user_timeline : twitter.getUserTimeline(), user_id又はscreen_name、Paging利用可
- mentions : twitter.getMentions(), Paging利用可
- retweeted_by_me : twitter.getRetweetedByMe(), Paging利用可
- retweeted_to_me : twitter.getRetweetedToMe(), Paging利用可
- retweeted_of_me : twitter.getRetweetsOfMe(), Paging利用可
- ResponseList
は各Statusごとに以下のメソッドで内容を取得できる - ステータスのid : status.getId()
- ステータスの発言者(のスクリーンネーム) : status.getUser().getName()
- ステータスのツイート内容 : status.getText()
次回
search APIを利用して、ツイートの検索を行う方法について調査する