browser: wikimedia usage parser convert-stats-wikimedia
[sheet.git] / tools / convert-stats-gs.pl
1 #!/usr/bin/env perl
2 use 5.010;
3 use strict;
4 use warnings;
5
6 use Data::Dump 'pp';
7 use Text::CSV;
8
9 my %BROWSERID = qw(
10         IE          trident
11         Firefox     gecko
12         Safari      webkit_saf
13         Safari-iPad ios_saf
14         Chrome      webkit_chr
15         Opera       presto
16 );
17
18 my %count = (
19         -source => 'StatCounter',
20         -site   => 'http://gs.statcounter.com/',
21 );
22 my $input = \*STDIN;
23
24 if (@ARGV) {
25         my %param = (
26                 bar             => 1,
27                 statType_hidden => 'browser_version',
28                 region_hidden   => 'ww', # NL
29                 granularity     => 'monthly',
30                 statType        => 'Browser%20Version',
31                 region          => 'Worldwide', # Netherlands
32                 fromMonthYear   => $ARGV[0],
33                 toMonthYear     => $ARGV[1] // $ARGV[0],
34                 csv             => 1,
35         );
36         my $url = $count{-site};
37         $url .= 'chart.php?'.join('&', map "$_=$param{$_}", keys %param);
38         $count{-url} = $url;
39         require LWP::Simple;
40         my $download = LWP::Simple::get($url) or die "No data from $url\n";
41         undef $input;
42         open $input, '<', \$download or die $!;
43 }
44
45 my $csv = Text::CSV->new or die Text::CSV->error_diag;
46 while (my $row = $csv->getline($input)) {
47         my ($browser, $pct) = @$row;
48         $browser and $pct or next;
49
50         my $version = $browser =~ s/ (\d\S*)$// ? $1 : 0;
51         given ($browser) {
52                 when ('Browser Version') {
53                         $pct =~ s/^Market Share % // and $count{-date} = $pct;
54                 }
55                 $browser =~ tr/ /-/;
56                 $browser = $_ for $BROWSERID{$browser} // ();
57                 $version =~ s/\.0$//;
58                 $count{$browser}->{$version} += $pct;
59         }
60 }
61 $csv->eof or $csv->error_diag;
62
63 print pp(\%count);
64
65 __END__
66
67 =head1 USAGE
68
69 cat <csv data> | F<convert-stats-gs> > browser-usage-gs.inc.pl
70
71 F<convert-stats-gs> <year-month>
72