aboutsummaryrefslogtreecommitdiff
path: root/get-TZs.pl
diff options
context:
space:
mode:
authorZoffix Znet <cpan@zoffix.com>2015-11-26 04:48:49 -0500
committerZoffix Znet <cpan@zoffix.com>2015-11-26 04:48:49 -0500
commitfa7bb1b7fce85b8445b7f408dc7cb2a15b9013d9 (patch)
tree3c752312c266c713c164f56d042bc5f1998f9e6b /get-TZs.pl
parent175d70e3703caa05bcde9d1dc50e3ebe842fbedb (diff)
Parse data to get timezones
Diffstat (limited to 'get-TZs.pl')
-rw-r--r--get-TZs.pl54
1 files changed, 54 insertions, 0 deletions
diff --git a/get-TZs.pl b/get-TZs.pl
new file mode 100644
index 0000000..35361cf
--- /dev/null
+++ b/get-TZs.pl
@@ -0,0 +1,54 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use Mojo::DOM;
+use Mojo::Util qw/spurt/;
+use Mojo::JSON qw/encode_json/;
+use Mojo::UserAgent;
+use 5.020;
+use experimental 'postderef';
+
+my $dom = Mojo::UserAgent->new->get('http://time.is/time_zones')->res->dom;
+
+my @tzs;
+for my $d ( $dom->find('.section')->each ) {
+ my $tz = { offset => $d->at('h1')->all_text };
+ my @countries = Mojo::DOM->new($d)
+ ->wrap('<zof></zof>')->find('zof > * > div > ul > li ')->each;
+ for my $cont_d ( @countries ) {
+ my $name = $cont_d->children('a')->first->all_text;
+ my @cities = $cont_d->find('li a')->map('all_text')->to_array->@*;
+ push $tz->{countries}->@*, +{
+ name => $name,
+ cities => \@cities,
+ };
+ }
+
+ push @tzs, $tz;
+}
+
+spurt encode_json(\@tzs) => 'tzs.json';
+
+__END__
+
+<div class="section even">
+ <h1>UTC-9</h1>
+ <div class="cloud scloud w90">
+ <ul>
+ <li id="c10">
+ <a class="s1 country multizone bold" href="French_Polynesia">French Polynesia</a>
+ <ul>
+ <li><a class="s4" href="Rikitea">Rikitea</a></li>
+ </ul>
+ </li>
+ <li id="c9">
+ < class="s2 country multizone bold" href="United_States">United States</a>
+ <ul>
+ <li><a class="s3 multizone" href="Alaska">Alaska</a></li>
+ <li><a class="s5" href="Anchorage">Anchorage</a></li>
+ </ul>
+ </li>
+ </ul>
+ </div>
+</div> \ No newline at end of file