X-Git-Url: http://git.shiar.nl/sheet.git/blobdiff_plain/50e10f8c57ed7d8f320e4896a4540d81b5cfd7f8..4e71d82512759ed7da92d213ac66d006dae456a1:/tools/convert-stats-gs.pl diff --git a/tools/convert-stats-gs.pl b/tools/convert-stats-gs.pl index 52ecd4f..c01691d 100644 --- a/tools/convert-stats-gs.pl +++ b/tools/convert-stats-gs.pl @@ -7,36 +7,100 @@ use Data::Dump 'pp'; use Text::CSV; my %BROWSERID = qw( - IE trident - Firefox gecko - Safari webkit_saf + IE ie + Firefox firefox + Safari safari Safari-iPad ios_saf - Chrome webkit_chr - Opera presto + Chrome chrome + Opera opera + + Android android + iPhone ios_saf + iPod-Touch ios_saf ); my %count = ( - -source => 'StatCounter', + -title => 'StatCounter', -site => 'http://gs.statcounter.com/', ); -my $csv = Text::CSV->new or die Text::CSV->error_diag; -while (my $row = $csv->getline(\*STDIN)) { - my ($browser, $pct) = @$row; - $browser and $pct or next; +if (@ARGV) { + my %param = ( + bar => 1, + region_hidden => 'ww', # Worldwide + granularity => 'monthly', + fromMonthYear => $ARGV[0], + toMonthYear => $ARGV[1] // $ARGV[0], + csv => 1, + ); + my $site = $count{-site}; + $site .= 'chart.php?'.join('&', map "$_=$param{$_}", keys %param); + $site .= '&statType_hidden='; + $count{-source} = $site; + + require LWP::Simple; + { + 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{opera}; # preserve + + $url = $site.'mobile_browser'; + $download = LWP::Simple::get($url) or warn "No data from $url\n"; + open $input, '<', \$download or die $!; + parsecsv($input); - my $version = $browser =~ s/ (\d\S*)$// ? $1 : 0; - given ($browser) { - when ('Browser Version') { - $pct =~ s/^Market Share % // and $count{-date} = $pct; + # apply mobile multiplier to everything (undoing it for desktop) + for (values %count) { + ref $_ eq 'HASH' or next; + $_ *= $mult{Mobile} for values %$_; } - $browser =~ tr/ /-/; - $browser = $_ for $BROWSERID{$browser} // (); - $version =~ s/\.0$//; - $count{$browser}->{$version} += $pct; + $count{op_mini} = delete $count{opera}; # mobile distinction + $count{opera} = delete $count{Opera}; # restore desktop } } -$csv->eof or $csv->error_diag; +else { + parsecsv(\*STDIN); +} + +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', '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; + } + } + $csv->eof or $csv->error_diag; +} print pp(\%count); @@ -46,3 +110,5 @@ __END__ cat | F > browser-usage-gs.inc.pl +F +