use warnings;
use Data::Dump 'pp';
-use File::Slurp 'read_file';
use JSON;
+if (@ARGV) {
+ require Time::Piece;
+ require LWP::UserAgent;
+ require File::stat;
+
+ my $target = 'browser-support.inc.pl';
+ my $source = 'http://caniuse.com/data.json';
+
+ my $ua = LWP::UserAgent->new;
+ $ua->agent('sheet.shiar.nl/browser');
+ $ua->default_header('If-Modified-Since' => scalar gmtime $_->mtime)
+ for File::stat::stat($target);
+
+ my $res = $ua->get($source) or die "No data from $source\n";
+ !$res->is_error or die $res->status_line;
+ say $res->status_line;
+
+ exit 0 if $res->code == 304; # unmodified
+
+ my $data = decode_json($res->decoded_content) or die "Parse error: $!";
+ my $updated = eval {
+ s/ GMT$//,
+ return Time::Piece->strptime($_) for $res->header('Last-Modified')
+ };
+ $data->{-date} = $_->datetime for $updated || ();
+
+ my $suffix = $updated && $updated->ymd || time;
+ open my $save, '>', (my $download = "browser-support-$suffix.inc.pl");
+ print {$save} pp($data);
+ close $save;
+
+ symlink $download, "$target.new" and rename "$target.new", $target
+ or die "New data at $download not linked: $!";
+ exit 0;
+}
+
local $/; # slurp
my $source = readline;
=head1 SYNOPSIS
- curl http://caniuse.com/jsonp.php |
+ curl http://caniuse.com/data.json |
tools/convert-caniuse.pl > browser-support.inc.pl
+ tools/convert-caniuse.pl auto
+