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を利用して、ツイートの検索を行う方法について調査する