font: mkfontinfo: strip whitespace from support arrays
[sheet.git] / tools / mkusage-statcounter
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 our $VERSION = '1.01';
10
11 my %BROWSERID = qw(
12         IE          ie
13         Firefox     firefox
14         Safari      safari
15         Safari-iPad ios_saf
16         Chrome      chrome
17         Chromium    chrome
18         Opera       opera
19         BlackBerry  bb
20
21         IEMobile    ie_mob
22         Android     android
23         Chrome-for-Android and_chr
24         UC-Browser  and_uc
25         iPhone      ios_saf
26         iPod-Touch  ios_saf
27 );
28
29 my %count = (
30         -title  => 'StatCounter',
31         -site   => 'http://gs.statcounter.com/',
32 );
33
34 if (@ARGV) {
35         my %param = (
36                 bar             => 1,
37                 region_hidden   => 'ww', # Worldwide
38                 device_hidden   => 'desktop%2Bmobile%2Btablet%2Bconsole',
39                 'multi-device'  => 'true',
40                 granularity     => 'monthly',
41                 fromMonthYear   => $ARGV[0],
42                 toMonthYear     => $ARGV[1] // $ARGV[0],
43                 csv             => 1,
44         );
45         my $site = $count{-site};
46         $site .= 'chart.php?'.join('&', map "$_=$param{$_}", keys %param);
47         $site .= '&statType_hidden=';
48         $count{-source} = $site;
49
50         require LWP::Simple;
51         {
52                 my $url = $site.'browser_version';
53                 my $download = LWP::Simple::get($url) or die "No data from $url\n";
54                 open my $input, '<', \$download or die $!;
55                 parsecsv($input);
56         }
57 }
58 else {
59         parsecsv(\*STDIN);
60 }
61
62 sub parsecsv {
63         my ($input) = @_;
64         my $csv = Text::CSV->new or die Text::CSV->error_diag;
65         while (my $row = $csv->getline($input)) {
66                 my ($browser, $pct) = @$row;
67                 $browser and $pct or next;
68
69                 my $version = $browser =~ s/ (\d\S*)$// ? $1 : 0;
70                 given ($browser) {
71                         when ('Browser Version') {
72                                 $pct =~ s/^Market Share (?:%|Perc\.) // or break;
73                                 $pct =~ s/\A\((.*)\)\z/$1/;
74                                 $count{-date} = $pct;
75                         }
76                         $browser =~ tr/ /-/;
77                         $browser = $_ for $BROWSERID{$browser} // ();
78                         $version =~ s/\.0$//;
79
80                         # desktop variant has version, mobile doesn't
81                         if ($version eq '0') {
82                                 $browser = 'op_mini' if $browser eq 'opera';
83                                 $browser = 'and_ff'  if $browser eq 'firefox';
84                         }
85
86                         $count{$browser}->{$version} += $pct;
87                 }
88         }
89         $csv->eof or $csv->error_diag;
90 }
91
92 print pp(\%count);
93
94 __END__
95
96 =head1 USAGE
97
98 cat <csv data> | F<mkusage-statcounter> > browser-usage-gs.inc.pl
99
100 F<mkusage-statcounter> <year-month>
101