Kengo's blog

Technical articles about original projects, JVM, Static Analysis and TypeScript.

TLを読み込んでRTの件数を数える

twitter4jを使ってTLを読み込み、RT(もしくはQT)の件数を数えるプログラム。TLに表れるPOSTがRTまたはQTである確率分布を求めるために作成しました。
twitter4jのStatusクラスにもisRetweetメソッドが用意されていますが、判定条件がわからないことと明らかにRTと思しきPOSTでもfalseが返ることから正規表現による独自判定を利用しています。

Javaコード

package jp.skypencil.bayes;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import twitter4j.Paging;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;

/**
 * TLから100件のPOSTを読み込み、RTもしくはQTであるPOSTの数を数える。
 * @author eller
 */
public class RetweetCounter {
	private static final int TL_SIZE = 100;

	public static void main(String[] args) throws TwitterException {
		final Twitter twitter = new Twitter("username", "password");	// FIXME 自身のアカウント情報に改変すること
		final List<Status> timeline = twitter.getFriendsTimeline(new Paging(1, TL_SIZE));
		final Pattern pattern = Pattern.compile("(^|\\s)[RQ]T\\s");
		int retweets = 0;

		for (Status status : timeline) {
			String text = status.getText();
			Matcher m = pattern.matcher(text);
//			System.out.println(text);
			if (m.find()) {
				++retweets;
			}
		}
		System.out.printf("RT:%d/%d%n", retweets, TL_SIZE);
	}
}

100件読み込んでListを作成するのはメモリ負荷が気になりますが、twitter4jのライブラリがさほど詳しくは無いため、より効率のよい実装手法については調べていません。