8cbb4169b18d4c9a002e4b297fbbb164c2332dfc
[sheet.git] / tools / convert-stats-wikimedia.pl
1 #!perl -n
2 use 5.010; use strict; use warnings;
3 our %count;
4 our $mobile;
5
6 # select relevant columns
7 />Browser versions(.*)/ ... m{</table>} && last or next;
8 my ($tr, $id, $count2, $count) = split /(?:<[^>]*>)+/;
9 $mobile = $count2 =~ /(?<!non) mobile/ if $id ~~ '&nbsp;';
10 next if $id ~~ ['Total', '&nbsp;'];
11
12 # convert to usable syntax
13 my ($browser, $version) = split /\h+/, $id, 2;
14 $count =~ s/,//g;
15 $count =~ s/%$//;
16 $version //= 0;
17 given ($browser) {
18         when (['Firefox', 'Iceweasel']) {
19                 $browser = 'gecko';
20                 continue;
21         }
22         when ('MSIE') {
23                 $browser = 'trident';
24                 continue;
25         }
26         when ('Opera') {
27                 $browser = $mobile ? 'op_mob' : 'presto';
28                 for ($version) {
29                         s/\d\d\.\d\K.*// or do {
30                                 # major part only, except for ≥v9.6
31                                 $_ ge '9.6' ? ($_ = '9.6') : (s/\..*//);
32                         };
33                 }
34                 continue;
35         }
36         when ('Safari') {
37                 $browser = $mobile ? 'ios_saf' : 'webkit_saf';
38                 my $numversion = join('.', map { sprintf '%03d', $_ } split /\./, $version);
39                 $numversion =~ s/6(?=\d{3})//;  # erroneous(?) 6532.22 → 523
40                 for (
41                         # http://en.wikipedia.org/wiki/Safari_version_history
42                         [ '413'     => '2'   ],
43                         [ '522'     => '3'   ],
44                         [ '525.013' => '3.1' ],
45                         [ '525.026' => '3.2' ],
46                         [ '526'     => '4'   ],
47                         [ '533'     => '5'   ],
48                         [ '534'     => '5x'  ],
49                 ) {
50                         last if $numversion lt $_->[0];
51                         $version = $_->[1];
52                 }
53         }
54         when ('Chrome') {
55                 $browser = 'webkit_chr';
56                 s/\.\d+$// for $version;
57         }
58         when ('Android') {
59                 $browser = 'android';
60         }
61         s/\.0$// for $version;
62 }
63
64 $count{$browser}{$version} += $count;
65
66 END {
67         use Data::Dump 'pp';
68         print pp(\%count);
69 }
70
71 __END__
72
73 =head1 USAGE
74
75         curl http://stats.wikimedia.org/archive/squid_reports/2010-10/SquidReportClients.htm |
76         parsesquid.pl > browser-usage.inc.pl
77