Twitterアカウントを指定して、全ての発言(ツイート)を取得するための perl スクリプトです。
目的は、
- あなたの彼の浮気調査
でもいいし(笑)、真面目に解析してもいいし。私の場合は、先に書いた「絡ったー」がらみで使う予定です。
twitter api を使うとアクセス制限(1時間に500回ぐらいかな)となるので、公式サイト http://twitter.com/ から直接引っ張ってきます。なので、公式サイトの形式が変わると取れなくなるんですが、ま、ひとまず、こんな感じで取得できるとという例として。
インストールは、
- activeperl などをダウンロード
- wget をダウンロード
分かる人は、cUrl に変更しても ok
コマンドラインから
perl krmall.pl [アカウント]
とすると、
- 全発言のファイル アカウント.txt
- 絡む人のファイル アカウント_st.txt
が作成されます。これをメモ帳で見る、ぐらいですね。HTML形式に変換し直すと、リンク先に飛べたりして便利です。
例えば、孫正義さんの全ツイートを取得する場合は、
perl krmall.pl masason
とします。
それなりに時間がかかりますが、WEBサイト等でクリックしていくよりも便利でしょう。
え~と、どういう風に取得しているかというと、
- 指定したアカウントのツイート数を取得
http://twitter.com/アカウント - 全ページ数 = ツイート数/20 + 1 を計算。
- ページ毎に過去を取得
http://twitter.com/アカウント?page=n - IDやツイートなどを検索して取り出し。
な感じです。いわゆるサイト経由のクローリングと同じです。
以下は、ソースコード。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | # 指定アカウントの全発言を取得 $user = $ARGV [0]; # アカウント $wget = "wget" ; if ( $user eq "" ) { print "perl krmall.pl [アカウント]" ; exit ; } # 現在のツイート数を取得 ` $wget http://twitter.com/ $user -Otemp.txt`; open ( FILE, "<temp.txt" ); while (<FILE>) { if ( /<span id= "update_count" class= "stat_count" >([0-9,]+)<\/span>/ ) { $cnt = $1; $cnt =~ s/,//; break; } } close ( FILE ); $pmax = int ( $cnt /20)+1; print "account: $user count: $cnt pages: $pmax\n" ; # 指定アカウントを全て読み込み unlink ( "$user.txt" ); open ( OUT, ">>$user.txt" ); for ( $i =1; $i <= $pmax ; $i ++ ) { ` $wget http://twitter.com/ $user ?page= $i -Otemp.txt`; open ( FILE, "<temp.txt" ); while (<FILE>) { if ( /<span class= "entry-content" >/ ) { $text = $_ ; if ( !/<\/span>/ ) { while (<FILE>) { if ( /<\/span>/ ) { $text .= $_ ; last ; } $text .= $_ ; } } $text =~ s/\n//g; $text =~ s/\r//g; $text =~ /<span class= "entry-content" >(.*)<\/span>/; $text = $1; <FILE>; <FILE>; $id = <FILE>; $id =~ /status\/([0-9]+)/; $id = $1; $date = <FILE>; $date =~ /data= "{time:'([^']+)'}/; #" $date = $1; $text =~ s/<[^>]+>//g; print OUT "---\n" ; print OUT "$id\n" ; print OUT "$text\n" ; print OUT "$date\n\n" ; } } close ( FILE ); } close ( OUT ); # " # 統計表示 open ( OUT, "<$user.txt" ); open ( ST, ">${user}_st.txt" ); while (<OUT>) { if ( /^---/ ) { $_ = <OUT>; chomp ; $id = $_ ; $_ = <OUT>; chomp ; $text = $_ ; $_ = <OUT>; chomp ; $date = $_ ; $_ = $text ; @res = /(@[A-Za-z0-9_]+)/g; foreach $re ( @res ) { $users { $re } = $users { $re } + 1; } } } close ( OUT ); foreach $re ( sort { $users { $b } <=> $users { $a }} keys %users ) { if ( $re ne "@" . $user ) { print ST "$re (" . $users { $re }. ")\n" ; } } close ( ST ); |
—
2012/01/11 追記
上記のコードでは最新の公式クライアントでは動かないので、下記を試してみてください。C# で記述しています。
指定したTwitterアカウントの全ツイートを取得(暫定.NET版) | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/2851
はじめまして。
このたび、検索からこちらのサイトを発見してお伺いさせていただきました。
ツイートを取得する件で質問なのですが、「wget」さんはどのようにダウンロードすることができるのでしょうか?
色々と検索したのですが、こちらのサイトがちょっと英語でわかりにくくダウンロード先がよくわからなく・・・。
よろしくご指導いただければと思います。
「wget windows ダウンロード」で検索して、
wget(Windows版) – 俺の基地
http://yakinikunotare.boo.jp/orebase/index.php?wget%A1%CAWindows%C8%C7%A1%CB
とか。