configure logging module
[chrisu/seepark.git] / wetter.at.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use 5.010;
6
7 use Web::Scraper;
8 use HTTP::Tiny;
9 use utf8::all;
10 use Encode;
11
12 my $url      = 'http://www.wetter.at/wetter/oesterreich/tirol/obsteig';
13 my $response = HTTP::Tiny->new->get($url);
14
15 # don't die. the server returns 500 _and_ a valid content.
16 # die "Failed to get '$url'.\n" unless $response->{success};
17
18 my $body = $response->{content};
19
20 my $s = scraper {
21     process "div.dayInfo",  "dayInfo" => "TEXT";
22     process "span.sunUp",   "sunUp"   => "TEXT";
23     process "span.sunDown", "sunDown" => "TEXT";
24     process "div.boxNow",   "boxNow"  => scraper {
25         process "div.title",    "title"    => "TEXT";
26         process "div.temp",     "temp"     => "TEXT";
27         process "div.icontext", "icontext" => "TEXT";
28         process "div.rain",     "rain"     => "TEXT";
29     };
30
31 };
32
33 my $res = $s->scrape($body);
34
35 my $timeregexp = qr/^.*?([0-9:]+).*?$/;
36
37 ( my $date    = $res->{dayInfo} ) =~ s/^.*, (\d+)\.(\d+)\.(\d+)$/$3-$2-$1/;
38 ( my $time    = $res->{boxNow}->{title} ) =~ s/$timeregexp/$1/;
39 ( my $sunup   = $res->{sunUp} ) =~ s/$timeregexp/$1/;
40 ( my $sundown = $res->{sunDown} ) =~ s/$timeregexp/$1/;
41 ( my $temp    = $res->{boxNow}->{temp} )
42     =~ s/Â?°//;    # real °, and "something" before?!
43 my ( $weather, $clouds )
44     = $res->{boxNow}->{icontext} =~ m|^([^(]+)\((\d+)% .*$|;
45 my ( $rain, $wind )
46     = $res->{boxNow}->{rain} =~ m|Niederschlag: (.+)Wind: (.+)|;
47 $weather = decode( "utf8", $weather );
48
49 # debug
50 if (0) {
51     say 'Wetter in Obsteig (von wetter.at)';
52     say '---------------------------------';
53     say "Datum:\t$date";
54     say "Zeit:\t$time";
55     say "Sonne↑:\t$sunup";
56     say "Sonne↓:\t$sundown";
57     say "Temp:\t$temp°C";
58     say "Nied.:\t$rain";
59     say "Wind:\t$wind";
60     say "Wetter:\t$weather";
61     say "Bewölk:\t$clouds%";
62     say '';
63 }
64
65 say "$date;$time;$sunup;$sundown;$temp;$rain;$wind;$weather;$clouds";
66
67 __END__
68
69 =head1 NAME
70
71 wetter.at.pl - show weather information about Obsteig from wetter.at
72
73 =head1 COPYRIGHT AND LICENSE
74
75 Copyright 2017-2018, gregor herrmann <gregor@toastfreeware.priv.at>
76
77 Released under the same terms as Perl 5.
78