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