-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathilm.pl
executable file
·90 lines (85 loc) · 2.5 KB
/
ilm.pl
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
use Encode;
sub http {
`curl -sf --connect-timeout '$_[0]' '$_[1]'`
}
$last_update = 0;
#$emhi_url = 'http://213.184.50.180/ilma_andmed/xml/observations.php';
$emhi_url = 'http://www.ilmateenistus.ee/ilma_andmed/xml/observations.php';
sub update {
print STDERR "ilmauuendus $dt\n";
my @parnu;
my %temp;
my $name;
for (split /\n/s, http(40, $emhi_url)) {
if (/<name>(.*)<\/name>/) {
$name_ = $1;
$name = encode("UTF-8", $name_);
$name =~ s/ *\([^)]*\)//;
} elsif (/<airtemperature>(.*)<\/airtemperature>/) {
$temp{$name} = $1;
$temp{Tartu} = $temp{$name} if $name eq 'Tartu-Kvissental';
$temp{Tallinn} = $temp{$name} if $name eq 'Tallinn-Harku';
$temp{Rapla} = $temp{$name} if $name eq 'Kuusiku';
$temp{Rakvere} = $temp{$name} if $name eq 'Väike-Maarja';
push @parnu, $temp{$name}
if $name_ =~ /P.rnu/ && $temp{$name} =~ /\d/;
}
}
if (@parnu) {
my $parnu = 0;
$parnu += $_ for @parnu;
$temp{'Pärnu'} = $parnu / @parnu;
}
$_ = http(10, 'http://meteo.physic.ut.ee/et/frontmain.php?m=2');
s/<[^>]*>/ /g;
if (/ Temperatuur +(-?\d+(\.\d+)?) /) {
my $tartu = $1;
my $tt = $temp{Tartu};
if (abs($tt - $tartu) < 4 or $tt !~ /\d/) {
$temp{Tartu} = $tartu;
} elsif (abs($tt - $tartu) <= 6) {
$temp{Tartu} = sprintf("%.1f", ($tt + $tartu) / 2);
}
}
#@tallinn = `/usr/bin/lynx -source http://weather.noaa.gov/pub/data/observations/metar/stations/EETN.TXT`;
#if ($tallinn[1] =~ / (M?)(\d\d)\/M?\d\d /) {
# $tallinn = $1 ? -$2 : $2;
#}
#@tallinn_ = split(/[ ']/, `/bin/nc 193.40.240.131 6340`);
#if (@tallinn_ > 2) {
my $tallinn = http(10, 'http://www.ilm.ee/~data/tallinn/temp');
chomp $tallinn;
if ($tallinn =~ /-?[\d.]+/ and
($tallinn ne '0.0' or $temp{Tallinn} !~ /\d/)) {
$tallinn = $&; # $tallinn_[2];
#$tallinn =~ tr/,/./;
my $tt = $temp{Tallinn};
if ($tt =~ /\d/) {
if (abs($tt - $tallinn) <= 6) {
$tallinn += $tt * 2;
$tallinn = sprintf("%.1f", $tallinn / 3);
} else { # valetab, raisk.
$tallinn = $tt;
}
}
$temp{Tallinn} = $tallinn;
#$tartu = http(10, 'http://www.ilm.ee/~data/tartu/temp');
#$temp{Tartu} = $tartu if $tartu =~ /\d/;
}
#($s,$m,$h) = localtime($last_update = time);
#$m = sprintf "%02d", $m;
#$ilm = "kell $h:$m";
my @ilm;
for (qw(Tallinn Tartu Pärnu Rakvere Võru)) {
push @ilm, "$_: $temp{$_}°C" if defined $temp{$_}
}
$ilm = join '; ', @ilm;
$ilm =~ s/([0-9])\.([0-9])/\1,\2/sg;
$ilm =~ s/\n//sg;
}
$| = 1;
while (<STDIN>) {
$dt = time - $last_update;
&update if $dt > 60 * 10;
print "$ilm\n" if $ilm;
}