blob: 35361cf24232e360b426d0cfbb224394a67e4263 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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>
|