From: Mischa POSLAWSKY Date: Thu, 9 Dec 2010 04:34:41 +0000 (+0100) Subject: browser: convert mobile statcounter stats X-Git-Tag: v1.4~15 X-Git-Url: http://git.shiar.nl/sheet.git/commitdiff_plain/d00ffd3eb227e2534179aa146e81e230e5a264fd browser: convert mobile statcounter stats --- diff --git a/tools/convert-stats-gs.pl b/tools/convert-stats-gs.pl index 8a8a430..c28fde8 100644 --- a/tools/convert-stats-gs.pl +++ b/tools/convert-stats-gs.pl @@ -13,52 +13,94 @@ my %BROWSERID = qw( Safari-iPad ios_saf Chrome webkit_chr Opera presto + + Android android + iPhone ios_saf + iPod-Touch ios_saf ); my %count = ( -source => 'StatCounter', -site => 'http://gs.statcounter.com/', ); -my $input = \*STDIN; if (@ARGV) { my %param = ( bar => 1, - statType_hidden => 'browser_version', - region_hidden => 'ww', # NL + region_hidden => 'ww', # Worldwide granularity => 'monthly', - statType => 'Browser%20Version', - region => 'Worldwide', # Netherlands fromMonthYear => $ARGV[0], toMonthYear => $ARGV[1] // $ARGV[0], csv => 1, ); - my $url = $count{-site}; - $url .= 'chart.php?'.join('&', map "$_=$param{$_}", keys %param); - $count{-url} = $url; + my $site = $count{-site}; + $site .= 'chart.php?'.join('&', map "$_=$param{$_}", keys %param); + $site .= '&statType_hidden='; + $count{-url} = $site; + require LWP::Simple; - my $download = LWP::Simple::get($url) or die "No data from $url\n"; - undef $input; - open $input, '<', \$download or die $!; + { + my $url = $site.'browser_version'; + my $download = LWP::Simple::get($url) or die "No data from $url\n"; + open my $input, '<', \$download or die $!; + parsecsv($input); + } + + { + my $url = $site.'mobile_vs_desktop'; + my $download = LWP::Simple::get($url) or warn "No data from $url\n"; + open my $input, '<', \$download or die $!; + parsecsv($input); + + my %mult = map { + $_ => ( delete $count{$_} )->{0} / 100, + } qw(Desktop Mobile); + + # apply desktop multiplier with inverse of mobile (reverted below) + for (values %count) { + ref $_ eq 'HASH' or next; + $_ *= $mult{Desktop} / $mult{Mobile} for values %$_; + } + $count{Opera} = delete $count{presto}; # preserve + + $url = $site.'mobile_browser'; + $download = LWP::Simple::get($url) or warn "No data from $url\n"; + open $input, '<', \$download or die $!; + parsecsv($input); + + # apply mobile multiplier to everything (undoing it for desktop) + for (values %count) { + ref $_ eq 'HASH' or next; + $_ *= $mult{Mobile} for values %$_; + } + $count{op_mini} = delete $count{presto}; # mobile distinction + $count{presto} = delete $count{Opera}; # restore desktop + } +} +else { + parsecsv(\*STDIN); } -my $csv = Text::CSV->new or die Text::CSV->error_diag; -while (my $row = $csv->getline($input)) { - my ($browser, $pct) = @$row; - $browser and $pct or next; +sub parsecsv { + my ($input) = @_; + my $csv = Text::CSV->new or die Text::CSV->error_diag; + while (my $row = $csv->getline($input)) { + my ($browser, $pct) = @$row; + $browser and $pct or next; - my $version = $browser =~ s/ (\d\S*)$// ? $1 : 0; - given ($browser) { - when ('Browser Version') { - $pct =~ s/^Market Share % // and $count{-date} = $pct; + my $version = $browser =~ s/ (\d\S*)$// ? $1 : 0; + given ($browser) { + when (['Browser Version', 'Mobile Browser', 'Mobile vs. Desktop']) { + $pct =~ s/^Market Share % // and $count{-date} = $pct; + } + $browser =~ tr/ /-/; + $browser = $_ for $BROWSERID{$browser} // (); + $version =~ s/\.0$//; + $count{$browser}->{$version} += $pct; } - $browser =~ tr/ /-/; - $browser = $_ for $BROWSERID{$browser} // (); - $version =~ s/\.0$//; - $count{$browser}->{$version} += $pct; } + $csv->eof or $csv->error_diag; } -$csv->eof or $csv->error_diag; print pp(\%count);