root/trunk/plagger/assets/plugins/CustomFeed-Script/jsports-football.pl

Revision 1753 (checked in by miyagawa, 2 years ago)

add current league

  • Property svn:executable set to *
Line 
1 #!/usr/bin/perl -w
2 use strict;
3 use utf8;
4 use DateTime;
5 use DateTime::Format::W3CDTF;
6 use Encode;
7 use LWP::Simple ();
8 use HTML::TreeBuilder::XPath;
9 use URI;
10 use YAML;
11
12 my $url  = "http://www.jsports.co.jp/tv/football/card/football.html";
13 my $html = decode('shift_jis', LWP::Simple::get($url));
14 my $tree = HTML::TreeBuilder::XPath->new;
15 $tree->parse($html);
16 $tree->eof;
17
18 my $feed = {
19     title => 'JSPORTS 海外サッカー放送スケジュール',
20     link  => $url,
21 };
22
23 my @cols = $tree->findnodes(q(//table[@class='leagueTitle']/tr/td/h3|//table[@class='scheduleTable']/tr/td));
24
25 my $current_league;
26 while (my $node = shift @cols) {
27     if ($node->tag eq 'h3') {
28         $current_league = $node->as_text;
29         next;
30     }
31
32     my($date, $hour, $title, $mark, $card, $channel) = ($node, splice(@cols, 0, 5));
33
34     push @{$feed->{entry}}, {
35         title => $title->as_text . " " . $card->as_text,
36         date  => munge_datetime($date->as_text, $hour->as_text),
37         tags  => [ $mark->content->[0]->attr('alt'), $channel->as_text, $current_league ],
38     };
39 }
40
41 binmode STDOUT, ":utf8";
42 print YAML::Dump $feed;
43
44 sub munge_datetime {
45     my($date, $hour) = @_;
46
47     # $date: 10月15日 $hour: 26:00
48     $date =~ m!^(\d{1,2})月(\d{1,2})日! or die "No match: $date";
49     my($month, $day) = ($1, $2);
50     $hour =~ m!^(\d{1,2}):(\d\d)$!      or die "No match: $hour";
51     ($hour, my $min)  = ($1, $2);
52
53     my $dt = DateTime->new(
54         year  => DateTime->now->year,
55         month => $month,
56         day   => $day,
57         hour  => $hour >= 24 ? $hour - 24 : $hour,
58         minute => $min,
59         time_zone => 'Asia/Tokyo',
60     );
61     $dt->add( days => 1 ) if $hour >= 24;
62
63     return DateTime::Format::W3CDTF->format_datetime($dt);
64 }
Note: See TracBrowser for help on using the browser.