#!/usr/bin/env perl use strict; use warnings; use 5.014; use utf8; use Data::Dumper; use Encode qw(encode); use File::Slurp qw(read_file write_file); use JSON; my $json = JSON->new->utf8; sub load_instance { my ( $path, %opt ) = @_; my $data = $json->decode( scalar read_file("ext/transport-apis/data/${path}-efa.json") ); my %ret = ( name => $opt{name} // $data->{name} =~ s{ *[(][^)]+[)]}{}r, homepage => $data->{attribution}{homepage}, url => $opt{url} // $data->{options}{endpoint} =~ s{ / $ }{}rx, time_zone => $data->{timezone}, languages => $data->{supportedLanguages}, coverage => { area => $data->{coverage}{realtimeCoverage}{area}, regions => $data->{coverage}{realtimeCoverage}{region} // [] }, ); return %ret; } my %efa_instance = ( BSVG => { url => 'https://bsvg.efa.de/bsvagstd', name => 'Braunschweiger Verkehrs-GmbH', }, DING => { url => 'https://www.ding.eu/ding3', name => 'Donau-Iller Nahverkehrsverbund', }, KVV => { load_instance('de/kvv') }, LinzAG => { url => 'https://www.linzag.at/static', name => 'Linz AG', encoding => 'iso-8859-15', }, MVV => { url => 'https://efa.mvv-muenchen.de/mobile', name => 'Münchner Verkehrs- und Tarifverbund', }, NVBW => { url => 'https://www.efa-bw.de/nvbw', name => 'Nahverkehrsgesellschaft Baden-Württemberg', }, VAG => { url => 'https://efa.vagfr.de/vagfr3', name => 'Freiburger Verkehrs AG', }, VGN => { url => 'https://efa.vgn.de/vgnExt_oeffi', name => 'Verkehrsverbund Grossraum Nuernberg', }, # HTTPS: certificate verification fails VMV => { url => 'http://efa.vmv-mbh.de/vmv', name => 'Verkehrsgesellschaft Mecklenburg-Vorpommern', }, VRN => { url => 'https://www.vrn.de/mngvrn/', name => 'Verkehrsverbund Rhein-Neckar', }, VRR => { url => 'https://efa.vrr.de/vrr', name => 'Verkehrsverbund Rhein-Ruhr', }, VRR2 => { url => 'https://app.vrr.de/standard', name => 'Verkehrsverbund Rhein-Ruhr (alternative)', }, VRR3 => { url => 'https://efa.vrr.de/rbgstd3', name => 'Verkehrsverbund Rhein-Ruhr (alternative alternative)', }, VVO => { url => 'https://efa.vvo-online.de/VMSSL3', name => 'Verkehrsverbund Oberelbe', }, VVS => { url => 'https://www2.vvs.de/vvs', name => 'Verkehrsverbund Stuttgart', }, ); my $buf = <<'__EOF__'; package Travel::Status::DE::EFA::Services; # vim:readonly # This package has been automatically generated # by lib/Travel/Status/DE/EFA/Services.pm.PL. # Do not edit, changes will be lost. use strict; use warnings; use 5.014; use utf8; our $VERSION = '3.00'; # Most of these have been adapted from # and # . # Many thanks to Jannis R / @derhuerst and all contributors for maintaining # these resources. __EOF__ my $perlobj = Data::Dumper->new( [ \%efa_instance ], ['efa_instance'] ); $buf .= 'my ' . $perlobj->Sortkeys(1)->Indent(0)->Dump; $buf .= <<'__EOF__'; sub get_service_ids { return sort keys %{$efa_instance}; } sub get_service { my ($service) = @_; return $efa_instance->{$service}; } sub get_service_ref { return $efa_instance; } sub get_service_map { return %{$efa_instance}; } 1; __EOF__ write_file( $ARGV[0], { binmode => ':utf8' }, $buf );