Closed florian-asche closed 4 years ago
Von Markus M. aus dem Forum:
sub uba_GetStations($) {
my ($hash) = @_;
my $name = $hash->{NAME};
my $dateymd = strftime("%Y-%m-%d", localtime());
my($err,$data) = HttpUtils_BlockingGet({
url => 'https://www.umweltbundesamt.de/api/air_data/v2/meta/json?use=airquality&date_from='.$dateymd.'&date_to='.$dateymd.'&time_from=1&time_to=24',
noshutdown => 1,
timeout => 20,
});
return $err if($err);
my $json = eval { JSON->new->utf8(0)->decode($data) };
if($@)
{
Log3 $name, 2, "$name: json evaluation error ".$@;
return $@;
}
my @stations = ();
foreach my $stationnumber ( keys (%{$json->{stations}})){
my $station;
$station->{number} = $json->{stations}->{$stationnumber}[0];
$station->{id} = $json->{stations}->{$stationnumber}[1];
$station->{name} = encode_utf8($json->{stations}->{$stationnumber}[2]);
$station->{city} = $json->{stations}->{$stationnumber}[3];
$station->{type} = $json->{stations}->{$stationnumber}[15].' '.$json->{stations}->{$stationnumber}[16];
push( @stations, $station );
}
my $ret = '';
@stations = sort { $a->{number} <=> $b->{number} } @stations;
foreach my $station (@stations){
$ret .= $station->{id}."\t<b>-> ".$station->{number}." <-</b>\t".$station->{name}." (".$station->{type}.")\n"
}
return $ret;
}
Aber die API ist echt träge.
Beispieltest der neuen API: Es werden die Daten von einem Tag mit dem Zeitraum von nur einer Stunde abgefragt:
https://www.umweltbundesamt.de/api/air_data/v2/meta/json?use=airquality&date_from=2020-01-17&date_to=2020-01-17&time_from=11&time_to=12
Die Abfrage hat 30 Sekunden gedauert.
Über die CSV Schnittstelle:
use Text::CSV_XS qw( csv );
use Text::CSV_XS;
# create memory mapped file form received data and parse as CSV
my $csv = Text::CSV_XS->new({ sep_char => ';' });
if (!defined($csv)) {
Log3 $name, 2, "error creating CSV parser: ".Text::CSV_XS->error_diag();
}
#open my $fileHandle, '<', \$data;
open my $fileHandle, "<:encoding(utf8)", \$data or Log3 $name, 2, "$name: fileHandle open error";
# parse file content
my @columnNames = @{$csv->getline($fileHandle)};
if (!@columnNames) {
Log3 $name, 2, "error parsing header line";
}
foreach my $columnName (@columnNames) {
Log3 $name, 2, "$name: Processing cn: $columnName";
}
$csv->column_names(@columnNames);
my @aoh;
while (my $row = $csv->getline ($fileHandle)) {
#Log3 $name, 2, "$name: Processing r: $row";
Log3 $name, 2, "$name: Processing r: $row->[0]";
push(@aoh, $row);
}
# abort if no data
if (scalar(@aoh) == 0) {
Log3 $name, 2, "file does not contain valid data";
}
#Log3 $name, 2, "$name: Processing data: ".join("\n",@aoh)."\n";
Gerade eine Fehlermeldung mit "Varnish cache server" gesehen. Das lässt schon mal an bisschen Aufschluss, was da vor dem Webserver steht...
done with b454c674319b66cf5a7b52097e4e6a01412dde04
Leider ist die alte API nicht mehr verfügbar. Dass Module muss angepasst werden.
http://www.umweltbundesamt.de/js/uaq/data/stations/measuring?pollutant[]=SO2&scope[]=1SMW&station[]=DERP020&group[]=pollutant&range[]=1569871800,1569956400 https://www.umweltbundesamt.de/api/air_data/v2/airquality/json?date_from=2019-10-11&time_from=10&date_to=2019-10-11&time_to=10&lang=de https://www.umweltbundesamt.de/daten/luft/luftdaten/luftqualitaet/eJzrWJSSuMrIwNBS19BA19BwUUnmIiCZl7pgUXHJEkNDI6PFKW5FcAUGJotTQvKR1edWsS3KTW5anJNYctrBc9WcUp8tdotz8tJPO6hc3MDAwMAIAJ1lIwg= https://www.umweltbundesamt.de/api/air_data/v2/airquality/json?date_from=2019-10-03&time_from=24&date_to=2019-10-11&time_to=24&station=1122&lang=de https://www.umweltbundesamt.de/daten/luft/luftdaten/luftqualitaet/eJzrWJSSuMrIwNBS19BA19BwUUnmIiCZl7pgUXHJEkNDI6PFKW5FEAUGhkC0OCUkH1l9bhXbotzkpsU5iSWnHTxXBVbnnj67OCcv_bSDypUGBgYGRgCiSyNa
Stationen: https://www.umweltbundesamt.de/api/air_data/v2/stations/json?use=airquality&lang=de&date_from=2019-01-01&time_from=1&date_to=2019-12-31&time_to=24
Download: https://www.umweltbundesamt.de/api/air_data/v2/airquality/csv?date_from=2019-10-03&time_from=24&date_to=2019-10-11&time_to=24&station=1122&lang=de
Stationscode;Datum;"Feinstaub (PM₁₀) stündlich gleitendes Tagesmittel in µg/m³";"Ozon (O₃) Ein-Stunden-Mittelwert in µg/m³";"Stickstoffdioxid (NO₂) Ein-Stunden-Mittelwert in µg/m³";Luftqualitätsindex DENW067;"'04.10.2019 01:00'";10;22;20;"sehr gut" DENW067;"'04.10.2019 02:00'";10;17;22;gut DENW067;"'04.10.2019 03:00'";11;15;22;gut DENW067;"'04.10.2019 21:00'";11;29;23;gut DENW067;"'04.10.2019 22:00'";11;23;26;gut DENW067;"'04.10.2019 23:00'";10;33;-;"sehr gut" DENW067;"'04.10.2019 24:00'";9;-;18;"sehr gut" DENW067;"'05.10.2019 01:00'";8;44;11;"sehr gut" DENW067;"'05.10.2019 02:00'";8;-;-;"sehr gut" DENW067;"'05.10.2019 03:00'";6;51;5;"sehr gut" DENW067;"'05.10.2019 04:00'";6;48;7;"sehr gut"
Warnlimits: https://www.umweltbundesamt.de/berechnungsgrundlagen-luftqualitaetsindex