#!/usr/bin/env perl use strict; use warnings; use 5.010; use File::Slurp qw(read_file write_file); use Travel::Status::DE::HAFAS; my $json_str = read_file('stations.json'); my $stations = JSON->new->utf8->decode($json_str); @{$stations} = sort { $a->{name} cmp $b->{name} } @{$stations}; my $ua = LWP::UserAgent->new(); $ua->env_proxy; for my $station ( @{$stations} ) { if ( not $station->{latlong} ) { say "Requesting location for $station->{name} ..."; my $hafas = Travel::Status::DE::HAFAS->new( locationSearch => $station->{name}, ); if ( not scalar $hafas->results ) { say ' not found'; next; } for my $result ( $hafas->results ) { if ( $result->name eq $station->{name} ) { $station->{latlong} = [ $result->lat, $result->lon ]; last; } } } } my $json_out = JSON->new->utf8->canonical->pretty->encode($stations); write_file( 'stations.json', $json_out );