annotate fetch_weather.pl @ 381:846a0a95ad5a

fetch_weather: Add back -w
author Matti Hamalainen <ccr@tnsp.org>
date Sun, 07 Feb 2016 18:17:21 +0200
parents 729eb88d1c63
children 5573c1681da9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
381
846a0a95ad5a fetch_weather: Add back -w
Matti Hamalainen <ccr@tnsp.org>
parents: 380
diff changeset
1 #!/usr/bin/perl -w
182
24f9f38210fe Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 178
diff changeset
2 ##########################################################################
24f9f38210fe Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 178
diff changeset
3 #
359
3b8ffc6eca6d fetch_weather: Bump version.
Matti Hamalainen <ccr@tnsp.org>
parents: 356
diff changeset
4 # Fetch Weather v0.6 by Matti 'ccr' Hamalainen <ccr@tnsp.org>
233
dc1afa011883 weather: Bump version, copyright.
Matti Hamalainen <ccr@tnsp.org>
parents: 232
diff changeset
5 # (C) Copyright 2014-2015 Tecnic Software productions (TNSP)
206
2ac661d551b3 Update documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 201
diff changeset
6 # This script is freely distributable under GNU GPL (version 2) license.
182
24f9f38210fe Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 178
diff changeset
7 #
24f9f38210fe Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 178
diff changeset
8 # Should be ran as a cronjob, and configured properly.
206
2ac661d551b3 Update documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 201
diff changeset
9 # */10 * * * * perl -w /absolute/path/to/fetch_weather.pl /path/to/configfile
182
24f9f38210fe Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 178
diff changeset
10 #
186
b41c525bdaf7 Add example configuration file.
Matti Hamalainen <ccr@tnsp.org>
parents: 185
diff changeset
11 # Configuration file example is in fetch_weather.config
182
24f9f38210fe Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 178
diff changeset
12 #
206
2ac661d551b3 Update documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 201
diff changeset
13 # Requires various Perl modules, in Debian the packages should be:
2ac661d551b3 Update documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 201
diff changeset
14 # libwww-perl libxml-simple-perl libtimedate-perl
2ac661d551b3 Update documentation.
Matti Hamalainen <ccr@tnsp.org>
parents: 201
diff changeset
15 #
182
24f9f38210fe Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 178
diff changeset
16 #
24f9f38210fe Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 178
diff changeset
17 ##########################################################################
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
18 use strict;
380
729eb88d1c63 fetch_weather: "use warnings".
Matti Hamalainen <ccr@tnsp.org>
parents: 379
diff changeset
19 use warnings;
243
aef2cf1dc3be Use UTF8 source.
Matti Hamalainen <ccr@tnsp.org>
parents: 242
diff changeset
20 use utf8;
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
21 use LWP::UserAgent;
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
22 use HTML::Entities;
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
23 use XML::Simple;
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
24 use Date::Format;
199
95012f8f687a Another round of timestamp parsing changes, urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 198
diff changeset
25 use Date::Parse;
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
26 use Data::Dumper;
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
27 use File::Slurp;
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
28 use Text::CSV;
166
c8d5f3a7c4b7 Add debug option.
Matti Hamalainen <ccr@tnsp.org>
parents: 164
diff changeset
29
162
4f8a163b2bc1 Work on the backend weather data fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
30 ###
182
24f9f38210fe Add comments.
Matti Hamalainen <ccr@tnsp.org>
parents: 178
diff changeset
31 ### Configuration settings
162
4f8a163b2bc1 Work on the backend weather data fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
32 ###
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
33 my %settings = (
166
c8d5f3a7c4b7 Add debug option.
Matti Hamalainen <ccr@tnsp.org>
parents: 164
diff changeset
34 "debug" => 0,
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
35 "opt_fmi" => 0,
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
36 "opt_tiehallinto" => 0,
374
26b7963e7fbd fetch_weather: Oops, forgot to define the configuration setting
Matti Hamalainen <ccr@tnsp.org>
parents: 373
diff changeset
37 "purge_threshold" => 60,
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
38 "fmi_api_key" => "",
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
39 "outfile" => "",
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
40 "tiehallinto_static_meta" => "tiehallinto.meta",
185
64e06ee172c7 Add HTTP user agent setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 182
diff changeset
41 "http_user_agent" => "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 6.0) Opera 10.63 [en]",
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
42 );
162
4f8a163b2bc1 Work on the backend weather data fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
43
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
44
162
4f8a163b2bc1 Work on the backend weather data fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
45 ###
4f8a163b2bc1 Work on the backend weather data fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
46 ### Helper functions
4f8a163b2bc1 Work on the backend weather data fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 158
diff changeset
47 ###
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
48 sub mlog($)
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
49 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
50 print STDERR $_[0];
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
51 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
52
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
53
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
54 sub fetch_http($)
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
55 {
198
60a4c69c7f25 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
56 my $agent = LWP::UserAgent->new;
60a4c69c7f25 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
57 $agent->agent($settings{"http_user_agent"});
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
58 $agent->timeout(20);
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
59
198
60a4c69c7f25 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
60 my $req = HTTP::Request->new(GET => $_[0]);
339
6ea410acbe74 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 338
diff changeset
61
198
60a4c69c7f25 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 197
diff changeset
62 return $agent->request($req);
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
63 }
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
64
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
65
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
66 sub parse_timestamp($$)
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
67 {
196
a38c123921a9 Change the timestamp parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
68 my ($str, $offs) = @_;
a38c123921a9 Change the timestamp parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
69 if ($str =~ /^(\d+):(\d+)$/)
a38c123921a9 Change the timestamp parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
70 {
a38c123921a9 Change the timestamp parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
71 return $offs + (60 * 60 * $1) + ($2 * 60);
a38c123921a9 Change the timestamp parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
72 }
a38c123921a9 Change the timestamp parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
73 else
a38c123921a9 Change the timestamp parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
74 {
a38c123921a9 Change the timestamp parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
75 return $offs;
a38c123921a9 Change the timestamp parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 195
diff changeset
76 }
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
77 }
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
78
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
79
194
55ed3db51ee7 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 193
diff changeset
80 sub format_time_gmt($)
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
81 {
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
82 # 2012-02-27T00:00:00Z
199
95012f8f687a Another round of timestamp parsing changes, urgh.
Matti Hamalainen <ccr@tnsp.org>
parents: 198
diff changeset
83 return time2str("%Y-%m-%dT%TZ", $_[0], "UTC");
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
84 }
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
85
193
93ec73deebc5 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 192
diff changeset
86
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
87 ###
331
b8ae5e99341b fetc_weather: Remove support for old HTML format parsing of Tiehallinto data, it's not provided in this format anymore.
Matti Hamalainen <ccr@tnsp.org>
parents: 325
diff changeset
88 ### Helper functions
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
89 ###
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
90
212
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
91 my %th_rain_states =
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
92 (
237
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
93 "Pouta" => "poutaa",
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
94 "Heikko" => "heikkoa sadetta",
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
95 "Kohtalainen" => "kohtalaista sadetta",
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
96 "Voimakas" => "voimakasta sadetta",
212
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
97 );
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
98
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
99 my $th_rain_states_k = join("|", map {quotemeta} sort { length($b)<=>length($a) } keys %th_rain_states);
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
100
242
ffd49b583e34 Rename function.
Matti Hamalainen <ccr@tnsp.org>
parents: 238
diff changeset
101 sub translate_rain($)
212
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
102 {
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
103 my $tmp = $_[0];
237
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
104 $tmp =~ s/($th_rain_states_k)/$th_rain_states{$1}/igo;
212
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
105 return $tmp;
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
106 }
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
107
331
b8ae5e99341b fetc_weather: Remove support for old HTML format parsing of Tiehallinto data, it's not provided in this format anymore.
Matti Hamalainen <ccr@tnsp.org>
parents: 325
diff changeset
108
244
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
109 my %th_cloud_states =
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
110 (
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
111 0 => "selkeää",
247
85ad2912e720 Possibly handle cloudyness translation better.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
112 1 => "melkein selkeää",
85ad2912e720 Possibly handle cloudyness translation better.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
113 2 => "verrattain selkeää",
85ad2912e720 Possibly handle cloudyness translation better.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
114 3 => "verrattain selkeää",
85ad2912e720 Possibly handle cloudyness translation better.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
115 4 => "puolipilvistä",
85ad2912e720 Possibly handle cloudyness translation better.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
116 5 => "verrattain pilvistä",
85ad2912e720 Possibly handle cloudyness translation better.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
117 6 => "verrattain pilvistä",
244
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
118 7 => "melkein pilvistä",
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
119 8 => "pilvistä",
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
120 );
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
121
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
122 sub translate_clouds($)
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
123 {
247
85ad2912e720 Possibly handle cloudyness translation better.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
124 return "" if ($_[0] eq "NaN" || $_[0] eq "");
85ad2912e720 Possibly handle cloudyness translation better.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
125 my $tmp = int($_[0]);
244
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
126 foreach my $n (sort { $a <=> $b } keys %th_cloud_states)
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
127 {
247
85ad2912e720 Possibly handle cloudyness translation better.
Matti Hamalainen <ccr@tnsp.org>
parents: 245
diff changeset
128 return $th_cloud_states{$n}." (".$n."/8)" if ($tmp == $n);
244
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
129 }
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
130 return $tmp;
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
131 }
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
132
212
5f04ec60e8d9 weather: "Translate" rain state from Tiehallitus data.
Matti Hamalainen <ccr@tnsp.org>
parents: 208
diff changeset
133
228
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
134 sub plonk_data($)
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
135 {
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
136 return defined($_[0]) ? $_[0] : "";
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
137 }
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
138
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
139
237
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
140 sub plonk_data_lc($)
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
141 {
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
142 return defined($_[0]) ? lc($_[0]) : "";
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
143 }
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
144
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
145
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
146 ###
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
147 ### Configuration handling
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
148 ###
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
149 sub opt_chk_bool($)
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
150 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
151 if (defined($settings{$_[0]}))
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
152 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
153 my $val = $settings{$_[0]};
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
154 return ($val == 1 || $val eq "true" || $val eq "on" || $val eq "1");
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
155 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
156 else
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
157 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
158 return 0;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
159 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
160 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
161
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
162
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
163 sub opt_chk_valid($$)
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
164 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
165 if (defined($settings{$_[0]}))
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
166 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
167 my $val = $settings{$_[0]};
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
168 return length($val) >= $_[1];
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
169 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
170 else
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
171 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
172 return 0;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
173 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
174 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
175
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
176
324
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
177 sub opt_get_int($)
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
178 {
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
179 if (defined($settings{$_[0]}))
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
180 {
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
181 return int($settings{$_[0]});
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
182 }
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
183 else
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
184 {
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
185 return -1;
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
186 }
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
187 }
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
188
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
189
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
190 sub opt_get($)
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
191 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
192 if (defined($settings{$_[0]}))
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
193 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
194 return $settings{$_[0]};
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
195 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
196 else
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
197 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
198 return undef;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
199 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
200 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
201
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
202
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
203 sub opt_read_config($)
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
204 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
205 my $filename = $_[0];
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
206 my $errors = 0;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
207 my $line = 0;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
208
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
209 open(CONFFILE, "<", $filename) or die("Could not open configuration '".$filename."'!\n");
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
210 while (<CONFFILE>)
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
211 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
212 $line++;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
213 chomp;
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
214 if (/(^\s*#|^\s*$)/)
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
215 {
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
216 # Ignore comments and empty lines
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
217 }
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
218 elsif (/^\s*\"?([a-zA-Z0-9_]+)\"?\s*=>?\s*(\d+),?\s*$/) {
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
219 my $key = lc($1);
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
220 my $value = $2;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
221 if (defined($settings{$key})) {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
222 $settings{$key} = $value;
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
223 }
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
224 else
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
225 {
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
226 mlog("[$filename:$line] Unknown setting '$key' = $value\n");
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
227 $errors = 1;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
228 }
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
229 }
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
230 elsif (/^\s*\"?([a-zA-Z0-9_]+)\"?\s*=>?\s*\"(.*?)\",?\s*$/) {
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
231 my $key = lc($1);
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
232 my $value = $2;
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
233 if (defined($settings{$key}))
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
234 {
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
235 $settings{$key} = $value;
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
236 }
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
237 else
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
238 {
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
239 mlog("[$filename:$line] Unknown setting '$key' = '$value'\n");
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
240 $errors = 1;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
241 }
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
242 }
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
243 else
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
244 {
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
245 mlog("[$filename:$line] Syntax error: $_\n");
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
246 $errors = 1;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
247 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
248 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
249 close(CONFFILE);
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
250 return $errors;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
251 }
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
252
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
253
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
254 ###
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
255 ### Main program begins
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
256 ###
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
257 my $weatherdata = {};
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
258
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
259 die(
359
3b8ffc6eca6d fetch_weather: Bump version.
Matti Hamalainen <ccr@tnsp.org>
parents: 356
diff changeset
260 "Weather Fetch v0.6 by ccr/TNSP <ccr\@tnsp.org>\n".
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
261 "Usage: $0 <config file>\n"
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
262 ) unless scalar(@ARGV) >= 1;
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
263
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
264 my $cfgfile = shift;
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
265 opt_read_config($cfgfile) == 0 or die("Errors while parsing configuration file '".$cfgfile."'.\n");
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
266
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
267
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
268 ###
354
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
269 ### Load already cached data
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
270 ###
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
271 if (opt_chk_valid("outfile", 1))
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
272 {
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
273 my $str = read_file(opt_get("outfile"), binmode => ':utf8', err_mode => 'quiet');
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
274 if (defined($str))
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
275 {
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
276 foreach my $line (split(/\s*\n\s*/, $str))
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
277 {
367
1ca8ae195077 fetch_weather: Fix parsing of old/cached datafile.
Matti Hamalainen <ccr@tnsp.org>
parents: 363
diff changeset
278 my @mtmp = split(/\|/, $line, -1);
356
0de6e0c2c89c fetch_weather: Adjust minimum acceptable recached entry array size.
Matti Hamalainen <ccr@tnsp.org>
parents: 355
diff changeset
279 if (scalar(\@mtmp) >= 3)
354
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
280 {
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
281 $weatherdata->{shift @mtmp} = \@mtmp;
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
282 }
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
283 }
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
284 print STDERR scalar(keys %$weatherdata)." old records reloaded.\n" if (opt_get_int("debug") > 0);
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
285 }
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
286 }
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
287
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
288
de411e7834aa fetch_weather: Reload old data from stored data.
Matti Hamalainen <ccr@tnsp.org>
parents: 353
diff changeset
289 ###
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
290 ### Fetch Tiehallinto data
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
291 ###
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
292 if (opt_chk_bool("opt_tiehallinto"))
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
293 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
294 my $uri = "http://tie.digitraffic.fi/sujuvuus/ws/roadWeather";
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
295 my $res = fetch_http($uri);
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
296 if ($res->code >= 200 && $res->code <= 201)
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
297 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
298 my $xml = XMLin($res->decoded_content);
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
299
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
300 if (!defined($xml->{"soap:Body"}) || !defined($xml->{"soap:Body"}{"RoadWeatherResponse"}))
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
301 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
302 print STDERR "ERROR: SOAP call result did not contain required data.\n";
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
303 print STDERR $res->decoded_content."\n\n";
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
304 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
305 else
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
306 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
307 my $data = $xml->{"soap:Body"}{"RoadWeatherResponse"};
349
f7793ef7c925 fetch_weather: Improve debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 343
diff changeset
308 print STDERR "Checking Tiehallinto response from ".$uri."\n" if (opt_get_int("debug") > 0);
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
309
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
310 # Check if we need to update the static meta data
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
311 my $meta_file = opt_get("tiehallinto_static_meta");
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
312 my $fetch_meta = (-e $meta_file) ? 0 : 1;
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
313
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
314 if (defined($data->{"laststaticdataupdate"}))
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
315 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
316 # Compare metadata cache file modification timestamp to info in XML
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
317 my $tmp1 = str2time($data->{"laststaticdataupdate"});
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
318 my $tmp2 = (-e $meta_file) ? (stat($meta_file))[9] : -1;
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
319 $fetch_meta = 1 unless ($tmp1 < $tmp2);
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
320 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
321
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
322 # Fetch or read the cache
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
323 my $meta_str;
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
324 if ($fetch_meta)
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
325 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
326 print STDERR "Fetching Tiehallinto static meta data.\n" if (opt_get_int("debug") > 0);
377
0a6d9f0f0a57 fetch_weather: Fix Tiehallinto metadata handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 375
diff changeset
327 my $uri = "https://raw.githubusercontent.com/finnishtransportagency/metadata/master/csv/meta_rws_stations.csv";
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
328 my $res = fetch_http($uri);
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
329 die("Failed to fetch $uri data.\n") unless ($res->code <= 200 && $res->code <= 201);
339
6ea410acbe74 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 338
diff changeset
330
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
331 print STDERR "Storing to cache '$meta_file'.\n" if (opt_get_int("debug") > 0);
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
332 $meta_str = $res->decoded_content;
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
333 write_file($meta_file, {binmode => ':utf8'}, $meta_str);
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
334 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
335 else
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
336 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
337 print STDERR "Using CACHED Tiehallinto static meta data from '$meta_file'.\n" if (opt_get_int("debug") > 0);
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
338 $meta_str = read_file($meta_file, binmode => ':utf8');
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
339 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
340
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
341 # Parse the data ..
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
342 my $meta_data = {};
377
0a6d9f0f0a57 fetch_weather: Fix Tiehallinto metadata handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 375
diff changeset
343 my $csv = Text::CSV->new({blank_is_undef => 1, decode_utf8 => 1, sep_char => ";"});
0a6d9f0f0a57 fetch_weather: Fix Tiehallinto metadata handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 375
diff changeset
344 # my $csv = Text::CSV->new({blank_is_undef => 1});
343
3fff571a904b fetch_weather: Some fixes to make this actually work.
Matti Hamalainen <ccr@tnsp.org>
parents: 340
diff changeset
345 die("Failed to instantiate Text::CSV object?\n") unless defined($csv);
355
a74cb8a1abf5 Add in commented out code.
Matti Hamalainen <ccr@tnsp.org>
parents: 354
diff changeset
346
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
347 foreach my $line (split(/\s*\n\s*/, $meta_str))
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
348 {
343
3fff571a904b fetch_weather: Some fixes to make this actually work.
Matti Hamalainen <ccr@tnsp.org>
parents: 340
diff changeset
349 if (defined($line) && $csv->parse($line))
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
350 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
351 my @fields = $csv->fields();
363
3917a1515e31 fetch_weather: Fix parsing of "empty" CSV data.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
352 if (scalar(@fields) > 1)
3917a1515e31 fetch_weather: Fix parsing of "empty" CSV data.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
353 {
377
0a6d9f0f0a57 fetch_weather: Fix Tiehallinto metadata handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 375
diff changeset
354 $$meta_data{$fields[0]} = \@fields;
363
3917a1515e31 fetch_weather: Fix parsing of "empty" CSV data.
Matti Hamalainen <ccr@tnsp.org>
parents: 359
diff changeset
355 }
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
356 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
357 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
358
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
359 # Parse XML and combine with the station meta data
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
360 if (defined($data->{"roadweatherdata"}))
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
361 {
349
f7793ef7c925 fetch_weather: Improve debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 343
diff changeset
362 my $nrecords = 0;
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
363 foreach my $wdata (@{$data->{"roadweatherdata"}{"roadweather"}})
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
364 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
365 my $wid = $wdata->{"stationid"};
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
366 if (defined($meta_data->{$wid}))
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
367 {
349
f7793ef7c925 fetch_weather: Improve debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 343
diff changeset
368 $nrecords++;
379
3715df1cd9aa fetch_weather: Use Finnish location names instead of Swedish ones from static Tiehallinto station metadata.
Matti Hamalainen <ccr@tnsp.org>
parents: 378
diff changeset
369 $weatherdata->{$meta_data->{$wid}[2]} =
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
370 [
343
3fff571a904b fetch_weather: Some fixes to make this actually work.
Matti Hamalainen <ccr@tnsp.org>
parents: 340
diff changeset
371 1,
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
372 str2time(plonk_data($wdata->{"measurementtime"}{"utc"})),
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
373 plonk_data($wdata->{"airtemperature1"}),
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
374
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
375 plonk_data($wdata->{"humidity"}),
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
376 plonk_data($wdata->{"averagewindspeed"}),
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
377 ];
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
378 }
377
0a6d9f0f0a57 fetch_weather: Fix Tiehallinto metadata handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 375
diff changeset
379 else
0a6d9f0f0a57 fetch_weather: Fix Tiehallinto metadata handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 375
diff changeset
380 {
0a6d9f0f0a57 fetch_weather: Fix Tiehallinto metadata handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 375
diff changeset
381 print STDERR "Station ID #".$wid." not defined?\n";
0a6d9f0f0a57 fetch_weather: Fix Tiehallinto metadata handling.
Matti Hamalainen <ccr@tnsp.org>
parents: 375
diff changeset
382 }
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
383 }
349
f7793ef7c925 fetch_weather: Improve debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 343
diff changeset
384 print STDERR $nrecords." records from Tiehallinto.\n" if (opt_get_int("debug") > 0);
338
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
385 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
386 else
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
387 {
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
388 print STDERR "ERROR: Invalid (or unsupported) road weather data blob.\n";
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
389 print STDERR $res->decoded_content."\n\n";
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
390 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
391 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
392 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
393 }
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
394
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
395
afb8c0e2d513 fetch_weather: Implement support for new Tiehallinto data API.
Matti Hamalainen <ccr@tnsp.org>
parents: 332
diff changeset
396 ###
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
397 ### Fetch FMI data
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
398 ###
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
399 if (opt_chk_bool("opt_fmi"))
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
400 {
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
401 die("FMI data scrape enabled, but no API key set.\n") unless opt_chk_valid("fmi_api_key", 10);
238
a1d6e2d8789e Add new data from FMI service and change datafile format.
Matti Hamalainen <ccr@tnsp.org>
parents: 237
diff changeset
402 my @fmitems = ("temperature", "humidity", "windspeedms", "totalcloudcover");
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
403
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
404 my $uri = "http://data.fmi.fi/fmi-apikey/".opt_get("fmi_api_key").
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
405 "/wfs?request=getFeature&storedquery_id=fmi::observations::weather::".
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
406 "multipointcoverage".
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
407 # "timevaluepair".
194
55ed3db51ee7 Rename a function.
Matti Hamalainen <ccr@tnsp.org>
parents: 193
diff changeset
408 "&starttime=".format_time_gmt(time() - 10*60)."&endtime=".format_time_gmt(time()).
238
a1d6e2d8789e Add new data from FMI service and change datafile format.
Matti Hamalainen <ccr@tnsp.org>
parents: 237
diff changeset
409 "&parameters=".join(",", @fmitems)."&maxlocations=100&bbox=19,59,32,75";
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
410
324
19c64798de91 weather: Add some better optional debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 247
diff changeset
411 print STDERR "FMI URI: ".$uri."\n" if (opt_get_int("debug") > 0);
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
412
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
413 my $res = fetch_http($uri);
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
414 if ($res->code >= 200 && $res->code <= 201)
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
415 {
170
e4faa3746869 Remove useless parameters from XMLin().
Matti Hamalainen <ccr@tnsp.org>
parents: 169
diff changeset
416 my $xml = XMLin($res->decoded_content);
169
c12e422a543a FMI data parsing kinda almost works. It is horrible, though. XML ... :Q
Matti Hamalainen <ccr@tnsp.org>
parents: 168
diff changeset
417 my $time_base = time();
339
6ea410acbe74 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 338
diff changeset
418
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
419 if (defined($xml->{"wfs:member"}{"omso:GridSeriesObservation"}))
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
420 {
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
421 my $fdata = $xml->{"wfs:member"}{"omso:GridSeriesObservation"};
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
422 my $fshit = $fdata->{"om:result"}{"gmlcov:MultiPointCoverage"};
378
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
423
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
424 my @position_lines = split(/\n/, $fshit->{"gml:domainSet"}{"gmlcov:SimpleMultiPoint"}{"gmlcov:positions"});
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
425 my @data_lines = split(/\n/, $fshit->{"gml:rangeSet"}{"gml:DataBlock"}{"gml:doubleOrNilReasonTupleList"});
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
426 my @farray = ();
169
c12e422a543a FMI data parsing kinda almost works. It is horrible, though. XML ... :Q
Matti Hamalainen <ccr@tnsp.org>
parents: 168
diff changeset
427
378
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
428 if (scalar(@position_lines) == scalar(@data_lines))
169
c12e422a543a FMI data parsing kinda almost works. It is horrible, though. XML ... :Q
Matti Hamalainen <ccr@tnsp.org>
parents: 168
diff changeset
429 {
378
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
430 for (my $nline = 0; $nline < scalar(@position_lines); $nline++)
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
431 {
378
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
432 my $dline = $data_lines[$nline];
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
433 my $pline = $position_lines[$nline];
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
434
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
435 my @fmatches = ($dline =~ /\s*([\+\-]?\d+\.\d*|NaN)\s*/ig);
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
436 if (scalar(@fmatches) != scalar(@fmitems))
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
437 {
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
438 print STDERR "Not enough items in scalar line #".$nline." (".
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
439 scalar(@fmatches). " vs ".scalar(@fmitems)."): ".$dline."\n";
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
440 }
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
441 else
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
442 {
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
443 my $vtmp = {};
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
444 for (my $fni = 0; $fni < scalar(@fmitems); $fni++)
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
445 {
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
446 $$vtmp{$fmitems[$fni]} = $fmatches[$fni] if (lc($fmatches[$fni]) ne "nan");
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
447 }
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
448 if ($pline =~ /^\s*([\+\-]?\d+\.\d*)\s+([\+\-]?\d+\.\d*)\s+(\d+)\s*$/)
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
449 {
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
450 $$vtmp{"lat"} = $1;
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
451 $$vtmp{"long"} = $2;
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
452 $$vtmp{"time"} = $3;
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
453 push(@farray, $vtmp);
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
454 }
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
455 else
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
456 {
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
457 print STDERR "Data mismatch #".$nline.": ".$pline."\n";
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
458 }
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
459 }
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
460 }
169
c12e422a543a FMI data parsing kinda almost works. It is horrible, though. XML ... :Q
Matti Hamalainen <ccr@tnsp.org>
parents: 168
diff changeset
461 }
378
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
462 else
169
c12e422a543a FMI data parsing kinda almost works. It is horrible, though. XML ... :Q
Matti Hamalainen <ccr@tnsp.org>
parents: 168
diff changeset
463 {
378
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
464 print STDERR "Position and data lines do not match.\n";
b706e8ebecf8 fetch_weather: Possibly improve FMI XML mess parsing.
Matti Hamalainen <ccr@tnsp.org>
parents: 377
diff changeset
465 goto skip_it;
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
466 }
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
467 # XXX Hashify the array into lat/long keys
339
6ea410acbe74 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 338
diff changeset
468
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
469 # This is horrible :S
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
470 my $fcrap = $fdata->{"om:featureOfInterest"}{"sams:SF_SpatialSamplingFeature"}{"sams:shape"}{"gml:MultiPoint"}{"gml:pointMember"};
352
19b363586b40 fetch_weather: Fix debug prints.
Matti Hamalainen <ccr@tnsp.org>
parents: 349
diff changeset
471 my $nrecords = 0;
228
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
472 foreach my $xnode (@{$fcrap})
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
473 {
228
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
474 my $floc = $xnode->{"gml:Point"};
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
475 if ($floc->{"gml:pos"} =~ /^\s*([\+\-]?\d+\.\d*)\s+([\+\-]?\d+\.\d*)\s*$/)
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
476 {
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
477 my ($flat, $flong) = ($1, $2);
349
f7793ef7c925 fetch_weather: Improve debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 343
diff changeset
478
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
479 # Should use a hash -
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
480 foreach my $flol (@farray)
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
481 {
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
482 if ($flol->{"lat"} == $flat && $flol->{"long"} == $flong)
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
483 {
349
f7793ef7c925 fetch_weather: Improve debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 343
diff changeset
484 $nrecords++;
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
485 $weatherdata->{$floc->{"gml:name"}} =
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
486 [
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
487 1,
228
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
488 plonk_data($flol->{"time"}),
237
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
489 plonk_data($flol->{"temperature"}),
238
a1d6e2d8789e Add new data from FMI service and change datafile format.
Matti Hamalainen <ccr@tnsp.org>
parents: 237
diff changeset
490
228
fe420576f284 The kludges intensify.
Matti Hamalainen <ccr@tnsp.org>
parents: 213
diff changeset
491 plonk_data($flol->{"humidity"}),
237
56af82fb7a6d Use lower case.
Matti Hamalainen <ccr@tnsp.org>
parents: 236
diff changeset
492 plonk_data($flol->{"windspeedms"}),
244
7dea85b9a431 Translate cloudiness data.
Matti Hamalainen <ccr@tnsp.org>
parents: 243
diff changeset
493 translate_clouds(plonk_data($flol->{"totalcloudcover"})),
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
494 ];
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
495 }
189
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
496 }
3af8ea19a3e2 Improved weather fetching.
Matti Hamalainen <ccr@tnsp.org>
parents: 186
diff changeset
497 }
169
c12e422a543a FMI data parsing kinda almost works. It is horrible, though. XML ... :Q
Matti Hamalainen <ccr@tnsp.org>
parents: 168
diff changeset
498 }
352
19b363586b40 fetch_weather: Fix debug prints.
Matti Hamalainen <ccr@tnsp.org>
parents: 349
diff changeset
499 print STDERR $nrecords." records from FMI.\n" if (opt_get_int("debug") > 0);
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
500 }
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
501 else
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
502 {
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
503 # defined
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
504 print STDERR "Invalid XML received:\n";
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
505 print STDERR $res->decoded_content."\n\n";
169
c12e422a543a FMI data parsing kinda almost works. It is horrible, though. XML ... :Q
Matti Hamalainen <ccr@tnsp.org>
parents: 168
diff changeset
506 }
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
507 }
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
508 else
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
509 {
208
c6bbf69afc57 Add some error handling and debugging.
Matti Hamalainen <ccr@tnsp.org>
parents: 206
diff changeset
510 print STDERR "Error fetching FMI XML: ".$res->status_line."\n";
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
511 }
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
512 }
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
513
164
d5a0e4248f3e weather: Implement configuration file support for weather fetcher backend.
Matti Hamalainen <ccr@tnsp.org>
parents: 162
diff changeset
514
375
c303ddc0a683 fetch_weather: Don't die() in case of bad XML from FMI, just skip parsing
Matti Hamalainen <ccr@tnsp.org>
parents: 374
diff changeset
515 ### Skip here if the FMI shit fails due to broken data
c303ddc0a683 fetch_weather: Don't die() in case of bad XML from FMI, just skip parsing
Matti Hamalainen <ccr@tnsp.org>
parents: 374
diff changeset
516 skip_it:
c303ddc0a683 fetch_weather: Don't die() in case of bad XML from FMI, just skip parsing
Matti Hamalainen <ccr@tnsp.org>
parents: 374
diff changeset
517
c303ddc0a683 fetch_weather: Don't die() in case of bad XML from FMI, just skip parsing
Matti Hamalainen <ccr@tnsp.org>
parents: 374
diff changeset
518
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
519 ###
373
bc7746ca622e fetch_weather: Implement purge_threshold setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 371
diff changeset
520 ### Purge very old entries, default to 60 minutes
371
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
521 ###
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
522 my $wqtime = time();
373
bc7746ca622e fetch_weather: Implement purge_threshold setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 371
diff changeset
523 my $purge = opt_get_int("purge_threshold");
bc7746ca622e fetch_weather: Implement purge_threshold setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 371
diff changeset
524 $purge = 60 if ($purge <= 0);
bc7746ca622e fetch_weather: Implement purge_threshold setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 371
diff changeset
525
371
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
526 foreach my $key (keys %$weatherdata)
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
527 {
373
bc7746ca622e fetch_weather: Implement purge_threshold setting.
Matti Hamalainen <ccr@tnsp.org>
parents: 371
diff changeset
528 if ($wqtime - $weatherdata->{$key}[1] > (60 * $purge))
371
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
529 {
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
530 delete $$weatherdata{$key};
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
531 }
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
532 }
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
533
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
534
36869897f21d fetch_weather: Purge sufficiently old data.
Matti Hamalainen <ccr@tnsp.org>
parents: 370
diff changeset
535 ###
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
536 ### Output
178
9b8ec700ede4 Clean up the weather data parser backend a bit.
Matti Hamalainen <ccr@tnsp.org>
parents: 170
diff changeset
537 ###
353
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
538 if (opt_chk_valid("outfile", 1))
a52a983c0c14 Cosmetics.
Matti Hamalainen <ccr@tnsp.org>
parents: 352
diff changeset
539 {
369
86adad909681 fetch_weather: Improve debugging and one error message.
Matti Hamalainen <ccr@tnsp.org>
parents: 368
diff changeset
540 print STDERR "Dumping data to ".opt_get("outfile")."\n" if (opt_get_int("debug") > 0);
368
ed1c7f2d81df fetch_weather: Close STDOUT filehandle before reopening it, to make sure we
Matti Hamalainen <ccr@tnsp.org>
parents: 367
diff changeset
541 close(STDOUT);
369
86adad909681 fetch_weather: Improve debugging and one error message.
Matti Hamalainen <ccr@tnsp.org>
parents: 368
diff changeset
542 open(STDOUT, '>', opt_get("outfile")) or die("Could not open output file '".opt_get("outfile")."': $!\n");
158
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
543 }
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
544
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
545 binmode STDOUT, ':encoding(utf-8)';
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
546
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
547 foreach my $key (sort { $a cmp $b } keys %$weatherdata)
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
548 {
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
549 print STDOUT $key."|".join("|", @{$weatherdata->{$key}})."\n";
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
550 }
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
551
db2b1f74d994 Initial import of weather data fetching backend, written in Perl.
Matti Hamalainen <ccr@tnsp.org>
parents:
diff changeset
552 close(STDOUT);