Twitterからテレビ番組の実況ツイートを取得する

Twitterから特定のテレビ番組の実況ツイートを取得する方法とプログラムをまとめます。

開発言語はjavaとし、Twitterからツイートを取得するためにTwitter4Jを使用しました。

<参考サイト>

Twitterからつぶやきを取得する。 -放浪するエンジニアの覚え書き

Twitter4JでTweetを取得してみる


<プログラム>

  • 取得したツイートをcsvファイルに書き込む
  • RT、@、URL、ハッシュタグの削除
  • 投稿日時、ユーザ名、本文を取得し、csvファイルには本文だけ書き込む
// 初期化
Twitter twitter = new TwitterFactory().getInstance();
Query query = new Query();

try {
    File file = new File("C:\\csv\\Tweet21.csv");
    PrintWriter pw = new PrintWriter(file, "Shift-JIS");
    //追記で書き込む
//				pw = new PrintWriter(new BufferedWriter(new FileWriter(file,true)));

    DefaultTableModel tableModel = new DefaultTableModel(new String[]{"日付", "名前", "本文"}, 0);
    // 検索ワードをセット
    //query.setQuery("#" + txtSearchText.getText());
    query.setQuery("#" +txtSearchText.getText());
    // 1度のリクエストで取得するTweetの数(100が最大)
    query.setCount(100);
    query.setSince("2016-09-01");
    query.setUntil("2016-09-10");

    // 1500件(15ページ)最大数
    for (int i = 1; i <= 15; i++) {
        // 検索実行
        QueryResult result = twitter.search(query);
        System.out.println("ヒット数 : " + result.getTweets().size());
        System.out.println("ページ数 : " + new Integer(i).toString());

        // 検索結果を見てみる
        for (Status tweet : result.getTweets()) {
            // 本文
//						String s = tweet.

            // Dateクラスとユーザ名
            String date = tweet.getCreatedAt().toString();
            String user = tweet.getUser().getName();
            String str = tweet.getText();

            // 特定の文字の削除
            str = str.replaceAll("RT", "");
//                    str = str.replaceAll("@", "");

            if (str.charAt(1) == '@') {
                int index = str.indexOf(":");
//                        str = str.substring(index + 1, str.length());
                str = str.substring(index + 1);
            }

            // httpから始まるURLの削除
            if (str.contains("http")) {
                int index = str.indexOf("http");
                str = str.substring(0, index);
//                        System.out.println(index + ", total = " + str.length());
            }
            if(str.contains("#")){
                int index =str.indexOf("#");
                str =str.substring(0,index);
            }
            if(str.contains("#")){
                int index =str.indexOf("#");
                str =str.substring(0,index);
            }



//                    pw.println(date + "," + user + ",");
            pw.println(str);


            tableModel.addRow(new String[]{date, user, str});

            // リツイート
            int ret = tweet.getRetweetCount();

            // ハッシュタグとURLの削除	
            StringTokenizer sta = new StringTokenizer(str, " ");

            //トークンの出力
/*                    while (sta.hasMoreTokens()) {
                String wk = sta.nextToken();
               // if (wk.contains("http")
                       // && wk.contains("RT") && wk.contains("@")) {
                    pw.print(", ," + wk);

               // }
            }
*/
        }

        if (result.hasNext()) {
            query = result.nextQuery();
        } else {
            break;
        }
    }
    pw.close();

    tableTweets.setModel(tableModel);

} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です