感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

日本語のツイートを全検索する

スポンサーリンク

なんかpublicTimelineがうまく取得できないと思って、JavaDocを見てみたら、
twitter4jの2.1.X以降は
getPublicTimeline()
メソッドがサポートされていないっぽい。
http://twitter4j.org/ja/javadoc.html

なので、とりあえずは以下のサイトで2.0.8のバージョンをダウンロード。
http://grepcode.com/snapshot/repo1.maven.org/maven2/net.homeip.yusuke/twitter4j/2.0.8

するとこっちにはTwitterFactoryがなさそう・・・。

JavaDocを追ってみると、2.1.0には両方ありそう(getPublicTimelineとFactory)
http://www.java2s.com/Code/Jar/t/Downloadtwitter4jcore210jar.htm

というわけで2.1.0をダウンロード。

で、こんなサンプルを作ってみた。。。

package twitter.framework.util;

import java.util.List;

import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

public class GetPublicTimeLineSample {
	public static void main(String[] args) {
		Twitter twitter = new TwitterFactory().getInstance();
		try {
			List<Status> statuses = twitter.getPublicTimeline();
			System.out.println("パブリックタイムラインの表示");
			for(Status status : statuses) {
				System.out.println("@" + status.getUser().getScreenName() + ":::" + status.getText());
			}
		} catch(TwitterException e) {
			e.printStackTrace();
		}
	}
}

しかし、こんなエラーが・・・。

twitter4j.TwitterException: 404:The URI requested is invalid or the resource requested, such as a user, does not exists.
{"errors":[{"message":"Sorry, that page does not exist","code":34}]}

	at twitter4j.http.HttpClient.request(HttpClient.java:318)
	at twitter4j.http.HttpClientWrapper.request(HttpClientWrapper.java:66)
	at twitter4j.http.HttpClientWrapper.get(HttpClientWrapper.java:88)
	at twitter4j.Twitter.getPublicTimeline(Twitter.java:248)
	at twitter.framework.util.GetPublicTimeLineSample.main(GetPublicTimeLineSample.java:14)

ここで思ったのは、「パブリックタイムライン」にこだわりすぎたんじゃないかということ。
「日本語のツイートを検索する」とかに発想を転換すれば、できるんじゃないか・・・。
と思って試してみる。

package twitter.framework.util;

import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Tweet;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;

public class GetPublicTimeLineSample {
	public static void main(String[] args) {
		Twitter twitter = new TwitterFactory().getInstance();
		Query query = new Query();
		
		query.setQuery("*");
		query.setLang("ja");
		
		QueryResult result;
		try {
			result = twitter.search(query);
			int count = 0;
			for (Tweet tweet : result.getTweets()) {
				count = count + 1;
				System.out.println("["+ count +"]ツイート:" + tweet.getText());
				
			}
		} catch (TwitterException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}

	}
}

これで日本語のツイートを検索することができた。
デフォルトでは15件ずつ取得できるらしい。

[1]ツイート:ワタシ得は日曜のが♪
[2]ツイート:ソファーで寝ると起きた時体めっちゃ痛い…
・・・

これをさらに改造して、スクリーン名(screenname→@hoge)みたいなモノも取れるように改造する。

package twitter.framework.util;

import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Tweet;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.User;

public class GetPublicTimeLineSample {
	public static void main(String[] args) {
		Twitter twitter = new TwitterFactory().getInstance();
		Query query = new Query();
		
		query.setQuery("*");
		query.setLang("ja");
		
		QueryResult result;
		try {
			result = twitter.search(query);
			int count = 0;
			long id;
			Status status;
			User user;
			String screenName;
			for (Tweet tweet : result.getTweets()) {
				count = count + 1;
				id = tweet.getId();
				status =  twitter.showStatus(id);
				user = status.getUser();
				
				System.out.println("["+ count +"]@" + user.getScreenName() + "のツイート:" + tweet.getText());
				
			}
		} catch (TwitterException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}

	}
}

結果

[1]@XXXのツイート:@XXX ぎゅっ
[2]@XXXのツイート:ツイッターってサイバー攻撃うけたんだ・・・
・・・

このそれぞれのツイートのリツイート数などを計算すれば。ふぁぼられ的なサービスを作れるはず。<参考>
https://github.com/mwsoft/sample/blob/master/twitte4j-sample/src/main/java/jp/mwsoft/sample/twitter4j/JaSearch.java

Twitter API ポケットリファレンス (POCKET REFERENCE)

Twitter API ポケットリファレンス (POCKET REFERENCE)