とりあえずLuceneとSenは置いておいてやること
- shadowを動かす
- shadowで集めるユーザーの基準を決める。投稿数1000くらい?
- 投稿数が一定を満たしているユーザーを集めるプログラムを作る。
- そのユーザーのTweetをユーザーごとにテキストで出力するプログラムを作る。
- 以上が終わったらLucene動かす。間違いなく今日中に終わらない件
と思ったけどshadowも認証受けてないと使えないみたいだ。
となるとfollowなんだけど、これ200ユーザーしか使えないみたいだ・・・
さすがにそれはつらい。どうしよう
やっぱりとりあえず駄目もとでTwitterに許可して下さいお願いします。メール出すかな
認証得られるまではfollowで我慢
とりあえずpush型のfollowメソッドを使ったもの完成
import twitter4j.Status; import twitter4j.StatusListener; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterStream; public class TestShadow { public static void main(String[] args) throws TwitterException { TwitterStream streamTwitter = new TwitterStream("snkken", "", new MyStatusListener()); Twitter twitter = new Twitter("snkken",""); int []ids = twitter.getFriendsIDs().getIDs(); streamTwitter.follow(ids); } } class MyStatusListener implements StatusListener { public void onStatus(Status status) { System.out.println(status.getText()); } public void onException(Exception ex) { } }
@Astro_127 Thanks for straightening us all out about twittering from orbit! Best wishes for Wednesday. @loid_bot ソウデース @NASA Found you through @MrTweet. Looking forward to your tweets! @Astro_127 What are your favorite space movies? @NASA How many more launches are planned before the shuttle fleet is retired? STS-127: view of Endeavour from the flame trench. [pic] http://ff.im/3ZYU7
ここでは自分のフレンズから情報取得してるけど、これをPOSTを1000回以上しているすべての日本語ユーザーにするのが目標
ユーザー情報の保存はtxtよりDBが良さそうだよなー
次にPOSTを1000回以上しているユーザーをspritzerから広って、DBのテーブルにひたすら登録するプログラムを書こう。
Tweetが全角でPOST数が1000以上だったら出力するプログラム完成
たまに外人が入るけど気にしないw
全角文字列ではなくひらがな、カタカナの発言をしたユーザに修正した。
あとはこれを出力じゃなくてDBのテーブルにひたすら登録するように修正すれば完成
DBやっぱり辞めた
少し考える
とりあえずtxtに出力で決定
テキストに出力するプログラム完成
catchとかもっと綺麗にならないものか
package test; import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; import twitter4j.Status; import twitter4j.StatusListener; import twitter4j.TwitterException; import twitter4j.TwitterStream; import twitter4j.User; public class Spritzer { public static void main(String[] args) throws TwitterException { TwitterStream streamTwitter = new TwitterStream("and_loid", "", new GetUserStatusListener()); streamTwitter.spritzer(); } } class GetUserStatusListener implements StatusListener { public void onStatus(Status status) { try { // 全角文字列のTweet 且つPOST数が1000以上だったら出力 User user = status.getUser(); if (Tools.containsZen(status.getText()) && user.getStatusesCount() > 999) { FileWriter writer = new FileWriter("C:\\Lucene\\index\\user.txt",true); try{ System.out.println(status.getUser().getScreenName() + " : " + status.getText()); writer.write(user.getId()+"\n"); }catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); }finally{ writer.close(); } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } public void onException(Exception ex) { } }
よく考えたら同じユーザーも複数回収集しちゃうな
uniq user.txtでごまかそうw
あとはこれ起動して日本語ユーザのID収集
次はtxtを読み込んでそのユーザーのTweetをtxtに記録していくものを作る
完成
けどユーザ情報の収集と、テキストの収集平行することができないのでとりあえずは当分の間ユーザー情報の収集
package test; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import twitter4j.Status; import twitter4j.StatusListener; import twitter4j.Twitter; import twitter4j.TwitterException; import twitter4j.TwitterStream; import twitter4j.User; public class Shadow { public static void main(String[] args) throws TwitterException, NumberFormatException, IOException { TwitterStream ts = new TwitterStream("and_loid", "", new GetTweetStatusListener()); BufferedReader reader = new BufferedReader(new FileReader("C:\\Lucene\\index\\user.txt")); String line; int i = 0; int[] ids = new int[200]; while ((line = reader.readLine()) != null) { ids[i++] = Integer.parseInt(line); if(i==199){ break; } } ts.follow(ids); } } class GetTweetStatusListener implements StatusListener { public void onStatus(Status status) { try { // 全角文字列のTweet 且つPOST数が1000以上だったら出力 FileWriter writer = new FileWriter("C:\\Lucene\\index\\"+status.getUser().getScreenName()+".txt", true); try { System.out.println(status.getUser().getScreenName() + " : " + status.getText()); writer.write(status.getText() + "\n"); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } finally { writer.close(); } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } } public void onException(Exception ex) { } }
これでとりあえずLucene+Senに戻れる