今日も元気に真人間

好き: 中日 、アニソン 、中本 、IT 、乃木坂46(乃木坂って、どこ?、乃木坂工事中)

Twitter4Jを使ってみた ~基本操作編~

具体的なJavaの書き方について、簡単かつ使いそうなケースごとに整理する。

 
■認証
前回の記事

glory-hm.hatenablog.com

の方法で、アプリとしてのconsumerKeyとconsumerSecretを取得。
その後GetAccessToken.javaをそのまま実行し、対象ユーザーのaccessTokenとaccessTokenSecretを取得する。
これらがtwitter4j.propertiesに出力されるので、そのまま置いておく。

・デフォルトの認証
デフォルトではクラスパス上に置いてあるtwitter4j.propertiesが読まれる。

Twitter twitter = TwitterFactory.getSingleton();

 このTwitterクラスのインスタンスに対して、様々な操作を行う。

・プロパティファイルを選択しての認証
複数のユーザーに対して操作を行いたい場合、プロパティファイルはそのユーザー数分存在する。デフォルトのプロパティファイル以外を使用する方法はいくつかあるが、ファイル名を指定して取得し、PropertyConfigurationクラスを使うのが分かりやすい。
参考までに、自分は以下のようにメソッドに切り出した。

 

public static Twitter loginWithPropFile(String filePath) {
	File file = new File(filePath);
	Twitter loginedTwitter = null;
	try {
		InputStream is = new FileInputStream(file);
		Properties prop = new Properties();
		prop.load(is);
		PropertyConfiguration conf = new PropertyConfiguration(prop);
		loginedTwitter = new TwitterFactory(conf).getInstance();
	} catch (IOException e) {
		// FileNotFoundException can be caught in this block.
		// error handling
		e.printStackTrace();
	}
	return loginedTwitter;
}

 


■ツイート
ツイートはupdateStatus()メソッド一発でできてしまう。単なるツイートであればStringを渡せば終わり。
画像などを貼りたいときは、StatusUpdateインスタンスを作り、setMedia()メソッドでFileインスタンスを設定する。


■ページとカーソル
取得件数が膨大になりがちなので、基本的に全件一発で取得するというのはない。そこで出てくるのが、ページとカーソルという概念である。ややこしいが、ページはツイートなど有限でないもの、カーソルはフォロワーやリストなど、有限なものに対して使う、というのが覚えやすい。

・ページ
Pagingクラスで、1ページあたりいくつかと何ページ目かを指定する。
paging = new Paging(pageCount, pageSize);
Pagingクラスを引数に取る各種メソッドにこのインスタンスを渡すと、どの位置のデータを取得できるか指定できる。


・カーソル
一定数で区切って、各ブロックをリストのような形で保持しているとするとイメージしやすい。ブロックの位置は、ポインタのような形で指定する。
通常、先頭へのカーソルは-1である(long型)。1つのセットのサイズは取得するメソッドで指定する。
例えば、リストに所属するアカウント全てに対して処理を行う場合は以下のようになる。

PagableResponseList<User> userList;
long cursor = -1L;
do {
	userList = twitter.getUserListMembers(listId, pageSize, cursor);
	for (User user : userList) {
		// do something
	}
	cursor = userList.getNextCursor();
} while (userList.hasNext());

このように、hasNextをループ条件にすれば、最後まで処理を行える。


■タイムライン
そのユーザーが見ているタイムライン全体の取得はgetHomeTimeline()、ユーザーの過去ツイートはgetUserTimeline()、リプライはgetUserTimeline()でできる。いずれもPagingインスタンスを引数に取ることができる。


■リスト
リスト取得は、ユーザーを指定してリスト一覧を取得、そのリストの中から目的のものを見つけてユーザー一覧を取得、という流れ。
getUserLists()でリストのリストを取得し、getFullName()でリスト名、getId()でリストのIDを取得、リストIDが分かればgetUserListMembers()でユーザーリストを取得できる。getUserLists()とgetUserListMembers()ともにカーソルを引数に取れる。
なお、非公開リストはログインしていれば取得できる。


■検索
ページング方法がやや特殊。
まずQueryインスタンスを生成。setQuery()で検索条件を、count()で1ページあたりのツイート数を設定。そしてページ数分for文でループし、nextQuery()で次ページの検索条件を取得する。検索結果がまだあるかはhasNext()で分かる。
詳細は下記リンクの「検索について」を参照。for文+if文、breakで覚えておくとよい。

 

 

参考リンク:
コードサンプル

twitter4j.org

認証設定

twitter4j.org

サンプル(バージョンが古め)

www.ne.jp

カーソルについて

eiryu.hatenablog.com

waman.hatenablog.com

ページについて(上記サンプルと同様)

twitter4j.org

検索について

github.com