font: generate data for apple fonts from OS X
[sheet.git] / tools / mkusage-wikimedia
1 #!/usr/bin/perl -n
2 use 5.010; use strict; use warnings;
3 our %count;
4 our $mobile;
5
6 if (m{<td class=hl>} .. m{</?td>}) {
7         $count{-source} = 'http://stats.wikimedia.org/archive/squid_reports/';
8         $count{-title } = 'Wikimedia';
9         $count{-date} = $1 if m{ period: (?:\d+ )?(\w+ \d+) };
10         next;
11 }
12
13 # select relevant columns
14 />Browser versions(.*)/ ... m{</table>} && last or next;
15 my ($tr, $id, $count2, $count) = split /(?:<[^>]*>)+/;
16 $mobile = $count2 =~ /(?<!non) mobile/ if $id ~~ '&nbsp;';
17 next if $id ~~ ['Total', '&nbsp;'];
18
19 # convert to usable syntax
20 my ($browser, $version) = split /\h+/, $id, 2;
21 $count =~ s/,//g;
22 $count =~ s/%$//;
23 $version //= 0;
24 given ($browser) {
25         when (['Firefox', 'Iceweasel']) {
26                 $browser = 'firefox';
27                 continue;
28         }
29         when ('MSIE') {
30                 $browser = 'ie';
31                 continue;
32         }
33         when ('Opera') {
34                 $browser = $mobile ? 'op_mob' : 'opera';
35                 for ($version) {
36                         if (m{\(Mini(.*)\)$}) {
37                                 $browser = 'op_mini';
38                                 ($_) = $1 =~ m{^/(\d+)};
39                                 continue;
40                         }
41                         s/^\d*\.\d\K.*//;  # one significant digit
42                 }
43                 continue;
44         }
45         when ('Safari') {
46                 $browser = $mobile ? 'ios_saf' : 'safari';
47                 my $numversion = join('.', map { sprintf '%03d', $_ } split /\./, $version);
48                 $numversion =~ s/6(?=\d{3})//;  # incomparable 6532.22 → 523
49                 for (
50                         # http://en.wikipedia.org/wiki/Safari_version_history
51                         $mobile ? (
52                                 [ '413'     => '1'   ],
53                                 [ '419'     => '1.1' ],
54                                 [ '525'     => '2'   ],
55                                 [ '528'     => '3'   ],
56                                 [ '531'     => '3.2' ],
57                                 [ '531.022' => '4'   ],
58                                 [ '533'     => '4.2' ],
59                                 [ '534'     => '4x' ],
60                         ) : (
61                                 [ '413'     => '2'   ],
62                                 [ '522'     => '3'   ],
63                                 [ '525.013' => '3.1' ],
64                                 [ '525.026' => '3.2' ],
65                                 [ '526'     => '4'   ],
66                                 [ '533'     => '5'   ],
67                                 [ '534'     => '5x'  ],
68                         )
69                 ) {
70                         last if $numversion lt $_->[0];
71                         $version = $_->[1];
72                 }
73         }
74         when ('Chrome') {
75                 $browser = 'chrome';
76                 s/\.\d+$// for $version;
77         }
78         when ('Android') {
79                 $browser = 'android';
80         }
81         s/\.0$// for $version;
82 }
83
84 $count{$browser}{$version} += $count;
85
86 END {
87         use Data::Dump 'pp';
88         print pp(\%count);
89 }
90
91 __END__
92
93 =head1 USAGE
94
95         curl http://stats.wikimedia.org/archive/squid_reports/2010-10/SquidReportClients.htm |
96         ./mkusage-wikimedia > browser-usage.inc.pl
97