root/lang/perl/plagger/assets/plugins/CustomFeed-Script/transit_livedoor_com_traffice_info.pl

Revision 27504, 1.5 kB (checked in by poppen, 3 years ago)

import Web::Scraper script for http://transit.livedoor.com/traffic_info/*

Line 
1#!/usr/bin/env perl
2
3use strict;
4use warnings;
5use File::Basename;
6use Web::Scraper;
7use URI;
8use DateTime;
9use YAML;
10
11my $filename = basename(__FILE__);
12my $url = $ARGV[0]
13    or die "Usage: $filename url\n";
14
15my $result = scraper {
16    process '//title', 'title' => 'TEXT';
17    process '//table[@class="information_trafic01"]//tr[position() != 1]',
18        'entry[]' => scraper {
19            process '//th[@class="trafficinfo"]/text()', 'date' => ['TEXT', \&mk_date];
20            process '//td[@class="trafficinfo"][1]/text()', 'title' => 'TEXT';
21            process '//td[@class="trafficinfo"][2]/text()', 'body' => 'TEXT';
22        };
23}->scrape( URI->new($url) );
24
25$result->{link} = $url;
26
27binmode STDOUT, ":utf8";
28print YAML::Dump $result;
29
30sub mk_date {
31    my $input = shift;
32    return unless ($input =~ m!(\d+)/(\d+) (\d+):(\d+)!);
33
34    my $month = $1;
35    my $day = $2;
36    my $hour = $3;
37    my $minute = $4;
38
39    my $today = DateTime->now(time_zone => 'Asia/Tokyo')->truncate(to => 'day');
40    my $this = $today->clone->set(month => $month, day => $day,
41                                  hour => $hour, minute => $minute
42    );
43    my $last = $this->clone->subtract(years => 1);
44    my $next = $this->clone->add(years => 1);
45    my @date = sort { DateTime::Duration->compare($a->[1], $b->[1], $today) }
46               map { [$_->[0], $_->[1]->is_positive ? $_->[1] : $_->[1]->inverse ] }
47               map { [$_, $today - $_] } ($this, $last, $next);
48
49    return $date[0]->[0]->iso8601();
50}
51
Note: See TracBrowser for help on using the browser.