Twitter のストリーミングAPIでつぶやきを時間帯別にカウントする
2010-06-09-1
[Programming][WebAPI]
ツイッターの streaming API で流れてくるつぶやきをカウントするプログラムです。
目的が達成できればよいというだけの ad hoc なプログラム。
コード (twistat.pl):
一言いわせてもらうと、「JSON.pm 遅すぎ!」。
というわけでこのプログラムでは正規表現に書き換えました。
使い方 (zsh):
curl はたぶん永遠にデータを取ってくるので Ctrl+C などで適当に止めます。
カウントの結果:
sample.json だと1時間10万ツイートくらい。
"lang":"ja" でフィルタリングするとその5分の1くらい。
ref.
- Twitter のストリーミング API を試す[2010-04-15-2]
- Twitter API プログラミング[2010-04-21-2]
- GMT による時間表現文字列を JST に変換する Perl コード片[2010-03-01-5]
- Twitterの月間訪問者は1億9千万、ツイートは毎日6500万-Costolo COO語る
http://jp.techcrunch.com/archives/20100608an-android-users-take-on-yesterdays-iphone-news/
■辻村浩 / Twitter API プログラミング

(ref. [2010-04-21-2])
目的が達成できればよいというだけの ad hoc なプログラム。
コード (twistat.pl):
#!/usr/bin/perl
use strict;
use warnings;
use Encode;
use Time::Local;
use POSIX qw(strftime);
$ENV{'TZ'} = "JST-9";
my $idx = 0;
my @month = ('Jan','Feb','Mar','Apr','May','Jun',
'Jul','Aug','Sep','Oct','Nov','Dec');
my %m2i = map {$_ => $idx++} @month;
my $count;
my $sum_byte;
my $sum_char;
my $sum_json;
my %hourly;
while (<>) {
my $line = $_;
s/^\{(.*)\}/$1/;
while (s/:\{[^\}]+\}/:<>/g) {}
my ($text) = /"text":"(.+?)"/;
next unless $text;
my ($tm) = /"created_at":"(.+?)"/;
next unless $tm =~ /([A-Z][a-z]{2}) (\d+) (\d+):(\d+):(\d+) .\d+ (\d+)$/;
my $utm = timegm($5, $4, $3, $2, $m2i{$1}, $6);
$text =~ s/\\u([0-9A-Z]{4})/chr(hex($1))/gei;
$sum_byte += length(encode('utf8', $text));
$sum_char += length($text);
$sum_json += length($line);
$hourly{strftime("%Y%m%d%H", localtime($utm))}++;
$count++;
}
print "ave bytes : ", $sum_byte / $count, "\n";
print "ave chars : ", $sum_char / $count, "\n";
print "ave jsons : ", $sum_json / $count, "\n";
foreach my $i (sort keys %hourly) {
print "$i $hourly{$i}\n";
}
一言いわせてもらうと、「JSON.pm 遅すぎ!」。
というわけでこのプログラムでは正規表現に書き換えました。
使い方 (zsh):
curl -uID:PW http://stream.twitter.com/1/statuses/sample.json | gzip -c > tw.gz zcat tw.gz | grep '"lang":"ja"' | ./twistat.pl 2> error.log
curl はたぶん永遠にデータを取ってくるので Ctrl+C などで適当に止めます。
カウントの結果:
sample.json だと1時間10万ツイートくらい。
"lang":"ja" でフィルタリングするとその5分の1くらい。
ref.
- Twitter のストリーミング API を試す[2010-04-15-2]
- Twitter API プログラミング[2010-04-21-2]
- GMT による時間表現文字列を JST に変換する Perl コード片[2010-03-01-5]
- Twitterの月間訪問者は1億9千万、ツイートは毎日6500万-Costolo COO語る
http://jp.techcrunch.com/archives/20100608an-android-users-take-on-yesterdays-iphone-news/
■辻村浩 / Twitter API プログラミング

(ref. [2010-04-21-2])
