25 -title => 'StatCounter',
26 -site => 'http://gs.statcounter.com/',
32 region_hidden => 'ww', # Worldwide
33 granularity => 'monthly',
34 fromMonthYear => $ARGV[0],
35 toMonthYear => $ARGV[1] // $ARGV[0],
38 my $site = $count{-site};
39 $site .= 'chart.php?'.join('&', map "$_=$param{$_}", keys %param);
40 $site .= '&statType_hidden=';
41 $count{-source} = $site;
45 my $url = $site.'browser_version';
46 my $download = LWP::Simple::get($url) or die "No data from $url\n";
47 open my $input, '<', \$download or die $!;
52 my $url = $site.'mobile_vs_desktop';
53 my $download = LWP::Simple::get($url) or warn "No data from $url\n";
54 open my $input, '<', \$download or die $!;
58 $_ => ( delete $count{$_} )->{0} / 100,
61 # apply desktop multiplier with inverse of mobile (reverted below)
63 ref $_ eq 'HASH' or next;
64 $_ *= $mult{Desktop} / $mult{Mobile} for values %$_;
66 $count{Opera} = delete $count{opera}; # preserve
68 $url = $site.'mobile_browser';
69 $download = LWP::Simple::get($url) or warn "No data from $url\n";
70 open $input, '<', \$download or die $!;
73 # apply mobile multiplier to everything (undoing it for desktop)
75 ref $_ eq 'HASH' or next;
76 $_ *= $mult{Mobile} for values %$_;
78 $count{op_mini} = delete $count{opera}; # mobile distinction
79 $count{opera} = delete $count{Opera}; # restore desktop
88 my $csv = Text::CSV->new or die Text::CSV->error_diag;
89 while (my $row = $csv->getline($input)) {
90 my ($browser, $pct) = @$row;
91 $browser and $pct or next;
93 my $version = $browser =~ s/ (\d\S*)$// ? $1 : 0;
95 when (['Browser', 'Browser Version', 'Mobile Browser', 'Mobile vs. Desktop', 'Comparison']) {
96 $pct =~ s/^Market Share (?:%|Perc\.) // or break;
97 $pct =~ s/\A\((.*)\)\z/$1/;
101 $browser = $_ for $BROWSERID{$browser} // ();
102 $version =~ s/\.0$//;
103 $count{$browser}->{$version} += $pct;
106 $csv->eof or $csv->error_diag;
115 cat <csv data> | F<mkusage-statcounter> > browser-usage-gs.inc.pl
117 F<mkusage-statcounter> <year-month>