diff options
-rwxr-xr-x | lib/Travelynx.pm | 1 | ||||
-rw-r--r-- | lib/Travelynx/Helper/DBDB.pm | 47 | ||||
-rw-r--r-- | lib/Travelynx/Helper/DBRIS.pm | 33 |
3 files changed, 70 insertions, 11 deletions
diff --git a/lib/Travelynx.pm b/lib/Travelynx.pm index 5d440dc..6addb5d 100755 --- a/lib/Travelynx.pm +++ b/lib/Travelynx.pm @@ -413,6 +413,7 @@ sub startup { my ($self) = @_; state $dbdb = Travelynx::Helper::DBDB->new( log => $self->app->log, + dbris_config => $self->app->config->{dbris}, main_cache => $self->app->cache_iris_main, realtime_cache => $self->app->cache_iris_rt, root_url => $self->base_url_for('/')->to_abs, diff --git a/lib/Travelynx/Helper/DBDB.pm b/lib/Travelynx/Helper/DBDB.pm index a310aa3..e3d5539 100644 --- a/lib/Travelynx/Helper/DBDB.pm +++ b/lib/Travelynx/Helper/DBDB.pm @@ -10,6 +10,7 @@ use 5.020; use Encode qw(decode); use Mojo::Promise; +use Mojo::UserAgent; use JSON; sub new { @@ -61,9 +62,22 @@ sub has_wagonorder_p { } } - $self->{user_agent}->request_timeout(5) - ->get_p( $url => $self->{header} ) - ->then( + my $agent = $self->{user_agent}; + my $proxy; + if ( my @proxies = @{ $self->{dbris_config}{'bahn.de'}{proxies} // [] } ) { + $proxy = $proxies[ int( rand( scalar @proxies ) ) ]; + } + elsif ( my $p = $self->{dbris_config}{'bahn.de'}{proxy} ) { + $proxy = $p; + } + + if ($proxy) { + $agent = Mojo::UserAgent->new; + $agent->proxy->http($proxy); + $agent->proxy->https($proxy); + } + + $agent->request_timeout(5)->get_p( $url => $self->{header} )->then( sub { my ($tx) = @_; if ( $tx->result->is_success ) { @@ -82,7 +96,7 @@ sub has_wagonorder_p { } return; } - )->catch( + )->catch( sub { my ($err) = @_; $self->{log}->debug("${debug_prefix}: n ($err)"); @@ -90,7 +104,7 @@ sub has_wagonorder_p { $promise->reject; return; } - )->wait; + )->wait; return $promise; } @@ -121,9 +135,22 @@ sub get_wagonorder_p { return $promise; } - $self->{user_agent}->request_timeout(5) - ->get_p( $url => $self->{header} ) - ->then( + my $agent = $self->{user_agent}; + my $proxy; + if ( my @proxies = @{ $self->{dbris_config}{'bahn.de'}{proxies} // [] } ) { + $proxy = $proxies[ int( rand( scalar @proxies ) ) ]; + } + elsif ( my $p = $self->{dbris_config}{'bahn.de'}{proxy} ) { + $proxy = $p; + } + + if ($proxy) { + $agent = Mojo::UserAgent->new; + $agent->proxy->http($proxy); + $agent->proxy->https($proxy); + } + + $agent->request_timeout(5)->get_p( $url => $self->{header} )->then( sub { my ($tx) = @_; @@ -141,14 +168,14 @@ sub get_wagonorder_p { } return; } - )->catch( + )->catch( sub { my ($err) = @_; $self->{log}->debug("${debug_prefix}: error ${err}"); $promise->reject($err); return; } - )->wait; + )->wait; return $promise; } diff --git a/lib/Travelynx/Helper/DBRIS.pm b/lib/Travelynx/Helper/DBRIS.pm index 1b7f099..e8ef45b 100644 --- a/lib/Travelynx/Helper/DBRIS.pm +++ b/lib/Travelynx/Helper/DBRIS.pm @@ -31,6 +31,23 @@ sub new { sub get_station_id_p { my ( $self, $station_name ) = @_; + + my $agent = $self->{user_agent}; + my $proxy; + if ( my @proxies = @{ $self->{service_config}{'bahn.de'}{proxies} // [] } ) + { + $proxy = $proxies[ int( rand( scalar @proxies ) ) ]; + } + elsif ( my $p = $self->{service_config}{'bahn.de'}{proxy} ) { + $proxy = $p; + } + + if ($proxy) { + $agent = Mojo::UserAgent->new; + $agent->proxy->http($proxy); + $agent->proxy->https($proxy); + } + my $promise = Mojo::Promise->new; Travel::Status::DE::DBRIS->new_p( locationSearch => $station_name, @@ -40,7 +57,7 @@ sub get_station_id_p { agent => $self->{header}{'User-Agent'}, }, promise => 'Mojo::Promise', - user_agent => Mojo::UserAgent->new, + user_agent => $agent, )->then( sub { my ($dbris) = @_; @@ -68,6 +85,20 @@ sub get_departures_p { my ( $self, %opt ) = @_; my $agent = $self->{user_agent}; + my $proxy; + if ( my @proxies = @{ $self->{service_config}{'bahn.de'}{proxies} // [] } ) + { + $proxy = $proxies[ int( rand( scalar @proxies ) ) ]; + } + elsif ( my $p = $self->{service_config}{'bahn.de'}{proxy} ) { + $proxy = $p; + } + + if ($proxy) { + $agent = Mojo::UserAgent->new; + $agent->proxy->http($proxy); + $agent->proxy->https($proxy); + } if ( $opt{station} =~ m{ [@] L = (?<eva> \d+ ) }x ) { $opt{station} = { |