font: file ids and os grouping
[sheet.git] / tools / convert-stats-wikimedia.pl
old mode 100644 (file)
new mode 100755 (executable)
index d65e5eb..1e9b1c3
@@ -1,10 +1,19 @@
-#!perl -n
+#!/usr/bin/perl -n
 use 5.010; use strict; use warnings;
 our %count;
+our $mobile;
+
+if (m{<td class=hl>} .. m{</?td>}) {
+       $count{-source} = 'http://stats.wikimedia.org/archive/squid_reports/';
+       $count{-title } = 'Wikimedia';
+       $count{-date} = $1 if m{ period: (?:\d+ )?(\w+ \d+) };
+       next;
+}
 
 # select relevant columns
-/>Browser versions/ ... m{</table>} && last or next;
+/>Browser versions(.*)/ ... m{</table>} && last or next;
 my ($tr, $id, $count2, $count) = split /(?:<[^>]*>)+/;
+$mobile = $count2 =~ /(?<!non) mobile/ if $id ~~ '&nbsp;';
 next if $id ~~ ['Total', '&nbsp;'];
 
 # convert to usable syntax
@@ -14,45 +23,61 @@ $count =~ s/%$//;
 $version //= 0;
 given ($browser) {
        when (['Firefox', 'Iceweasel']) {
-               $browser = 'gecko';
+               $browser = 'firefox';
                continue;
        }
        when ('MSIE') {
-               $browser = 'trident';
+               $browser = 'ie';
                continue;
        }
        when ('Opera') {
-               $browser = 'presto';
+               $browser = $mobile ? 'op_mob' : 'opera';
                for ($version) {
-                       s/\d\d\.\d\K.*// or do {
-                               # major part only, except for ≥v9.6
-                               $_ ge '9.6' ? ($_ = '9.6') : (s/\..*//);
-                       };
+                       if (m{\(Mini(.*)\)$}) {
+                               $browser = 'op_mini';
+                               ($_) = $1 =~ m{^/(\d+)};
+                               continue;
+                       }
+                       s/^\d*\.\d\K.*//;  # one significant digit
                }
                continue;
        }
        when ('Safari') {
-               $browser = 'webkit_saf';
+               $browser = $mobile ? 'ios_saf' : 'safari';
                my $numversion = join('.', map { sprintf '%03d', $_ } split /\./, $version);
-               $numversion =~ s/6(?=\d{3})//;  # erroneous(?) 6532.22 → 523
+               $numversion =~ s/6(?=\d{3})//;  # incomparable 6532.22 → 523
                for (
                        # http://en.wikipedia.org/wiki/Safari_version_history
-                       [ '413'     => '2'   ],
-                       [ '522'     => '3'   ],
-                       [ '525.013' => '3.1' ],
-                       [ '525.026' => '3.2' ],
-                       [ '526'     => '4'   ],
-                       [ '533'     => '5'   ],
-                       [ '534'     => '5x'  ],
+                       $mobile ? (
+                               [ '413'     => '1'   ],
+                               [ '419'     => '1.1' ],
+                               [ '525'     => '2'   ],
+                               [ '528'     => '3'   ],
+                               [ '531'     => '3.2' ],
+                               [ '531.022' => '4'   ],
+                               [ '533'     => '4.2' ],
+                               [ '534'     => '4x' ],
+                       ) : (
+                               [ '413'     => '2'   ],
+                               [ '522'     => '3'   ],
+                               [ '525.013' => '3.1' ],
+                               [ '525.026' => '3.2' ],
+                               [ '526'     => '4'   ],
+                               [ '533'     => '5'   ],
+                               [ '534'     => '5x'  ],
+                       )
                ) {
                        last if $numversion lt $_->[0];
                        $version = $_->[1];
                }
        }
        when ('Chrome') {
-               $browser = 'webkit_chr';
+               $browser = 'chrome';
                s/\.\d+$// for $version;
        }
+       when ('Android') {
+               $browser = 'android';
+       }
        s/\.0$// for $version;
 }