入力した文字をTwitterで検索して、Google Chart Toolsを使ってどの時間帯に発言されたかを図に示すものを作ってみました。
※時間は世界標準時になってます。+9時間が日本時間です。
「#hanamaru」の結果。
偏ってます。0~1時のは、はなまるマーケット?
「#pandaneko」の結果。
こちらははなまる幼稚園専用っぽいです。上のヤツ以上に偏ってます。
それと、あまり流行ってないのか、結果が500未満です。
「#drrr」の結果。
一部突出してますが、意外と満遍なく発言されてる。
「#haiku」の結果。
発言が多すぎて500件では一日分とってこれてないです。
TwitterのsearchAPIっていろいろと分かってない部分が多くて、検索結果は最大で1500件ぐらいとってこられるみたいなんですが、古いTweetは取ってこられないみたいなんですよね。そんなに精度の高いものではないみたいです。
以下ソースコード。
よくわかってないで書いたのでダメダメです。
use strict; use warnings; use Net::Twitter; print "Content-type: text/html\n\n"; print << 'HERE'; <html> <head><title>test</title></head> HERE my $data; read(STDIN, $data, $ENV{'CONTENT_LENGTH'}); my($name, $value) = split(/=/, $data); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; my $twitter = Net::Twitter->new(); my @times = (); foreach my $page (0..4) { my $results = $twitter->search($value, { rpp=>100, page=>$page+1 }); foreach my $key (@{ $results->{results} }) { push @times, ($key->{ created_at }); } } my %trends = ('0' => 0, '1' => 0, '2' => 0, '3' => 0, '4' => 0, '5' => 0, '6' => 0, '7' => 0, '8' => 0, '9' => 0, '10' => 0, '11' => 0, '12' => 0, '13' => 0, '14' => 0, '15' => 0, '16' => 0, '17' => 0, '18' => 0, '19' => 0, '20' => 0, '21' => 0, '22' => 0, '23' => 0); for (@times) { $_ =~ s/0[0-9]:\d\d:/&count0($_); next;/e; $_ =~ s/1[0-9]:\d\d:/&count1($_); next;/e; $_ =~ s/2[0-9]:\d\d:/&count2($_)/e; } sub count0 { $_ =~ s/\d0:\d\d:/$trends{'0'}++/e; $_ =~ s/\d1:\d\d:/$trends{'1'}++/e; $_ =~ s/\d2:\d\d:/$trends{'2'}++/e; $_ =~ s/\d3:\d\d:/$trends{'3'}++/e; $_ =~ s/\d4:\d\d:/$trends{'4'}++/e; $_ =~ s/\d5:\d\d:/$trends{'5'}++/e; $_ =~ s/\d6:\d\d:/$trends{'6'}++/e; $_ =~ s/\d7:\d\d:/$trends{'7'}++/e; $_ =~ s/\d8:\d\d:/$trends{'8'}++/e; $_ =~ s/\d9:\d\d:/$trends{'9'}++/e; } sub count1 { $_ =~ s/\d0:\d\d:/$trends{'10'}++/e; $_ =~ s/\d1:\d\d:/$trends{'11'}++/e; $_ =~ s/\d2:\d\d:/$trends{'12'}++/e; $_ =~ s/\d3:\d\d:/$trends{'13'}++/e; $_ =~ s/\d4:\d\d:/$trends{'14'}++/e; $_ =~ s/\d5:\d\d:/$trends{'15'}++/e; $_ =~ s/\d6:\d\d:/$trends{'16'}++/e; $_ =~ s/\d7:\d\d:/$trends{'17'}++/e; $_ =~ s/\d8:\d\d:/$trends{'18'}++/e; $_ =~ s/\d9:\d\d:/$trends{'19'}++/e; } sub count2 { $_ =~ s/\d0:\d\d:/$trends{'20'}++/e; $_ =~ s/\d1:\d\d:/$trends{'21'}++/e; $_ =~ s/\d2:\d\d:/$trends{'22'}++/e; $_ =~ s/\d3:\d\d:/$trends{'23'}++/e; } print "<body>\n"; print "<form method='post' action='http://localhost/cgi-bin/twi.cgi'>\n"; print "<input name='tag' type='text' />\n"; print "<dl><dt>word</dt><dd>$value</dd><dt>tweets</dt><dd>"; print my $line = @times, "</dd></dl>\n"; print "<img src=\"http://chart.apis.google.com/chart?cht=bvg&chs=800x300&chxt=x,y&chxl=0:|0:00|1:00|2:00|3:00|4:00|5:00|6:00|7:00|8:00|9:00|10:00|11:00|12:00|13:00|14:00|15:00|16:00|17:00|18:00|19:00|20:00|21:00|22:00|23:00|24:00&chd=t:$trends{'0'},$trends{'1'},$trends{'2'},$trends{'3'},$trends{'4'},$trends{'5'},$trends{'6'},$trends{'7'},$trends{'8'},$trends{'9'},$trends{'10'},$trends{'11'},$trends{'12'},$trends{'13'},$trends{'14'},$trends{'15'},$trends{'16'},$trends{'17'},$trends{'18'},$trends{'19'},$trends{'20'},$trends{'21'},$trends{'22'},$trends{'23'}\" />"; print "</body>\n"; print "</html>";なんて非効率なコード・・・
参考サイトなど:
Net::Twitter - search.cpan.org
Google Chart Tools - Google Code
Twitter 検索API メモ - 超自己満足プログラミング
Twitter search api - cool_ni_ikouの日記
正規表現 | Perl講座 [Smart]
Perl/CGI研究室 'PERL-LABO'