diff options
Diffstat (limited to 'lib/Travel/Routing')
| -rw-r--r-- | lib/Travel/Routing/DE/DBRIS.pm | 118 | ||||
| -rw-r--r-- | lib/Travel/Routing/DE/DBRIS/Connection.pm | 3 | ||||
| -rw-r--r-- | lib/Travel/Routing/DE/DBRIS/Offer.pm | 39 | 
3 files changed, 125 insertions, 35 deletions
| diff --git a/lib/Travel/Routing/DE/DBRIS.pm b/lib/Travel/Routing/DE/DBRIS.pm index f596bfd..07399a3 100644 --- a/lib/Travel/Routing/DE/DBRIS.pm +++ b/lib/Travel/Routing/DE/DBRIS.pm @@ -16,6 +16,7 @@ use JSON;  use LWP::UserAgent;  use Travel::Status::DE::DBRIS;  use Travel::Routing::DE::DBRIS::Connection; +use Travel::Routing::DE::DBRIS::Offer;  our $VERSION = '0.03'; @@ -60,37 +61,67 @@ sub new {  		@mots = @{ $conf{modes_of_transit} // [] };  	} -	my $req_url -	  = $self->{language} eq 'de' -	  ? 'https://www.bahn.de/web/api/angebote/fahrplan' -	  : 'https://int.bahn.de/web/api/angebote/fahrplan'; -	my $req = { -		abfahrtsHalt     => $conf{from}->id, -		ankunftsHalt     => $conf{to}->id, -		anfrageZeitpunkt => $dt->strftime('%Y-%m-%dT%H:%M:00'), -		ankunftSuche     => $conf{arrival}     ? 'ANKUNFT'  : 'ABFAHRT', -		klasse           => $conf{first_class} ? 'KLASSE_1' : 'KLASSE_2', -		produktgattungen => \@mots, -		reisende         => [ -			{ -				typ            => 'ERWACHSENER', -				ermaessigungen => [ -					{ -						art    => 'KEINE_ERMAESSIGUNG', -						klasse => 'KLASSENLOS' -					}, -				], -				alter  => [], -				anzahl => 1, -			} -		], -		schnelleVerbindungen              => \1, -		sitzplatzOnly                     => \0, -		bikeCarriage                      => \0, -		reservierungsKontingenteVorhanden => \0, -		nurDeutschlandTicketVerbindungen  => \0, -		deutschlandTicketVorhanden        => \0 -	}; +	my ($req_url, $req); + +	if ($conf{from} and $conf{to}) { +		$req_url +		= $self->{language} eq 'de' +		? 'https://www.bahn.de/web/api/angebote/fahrplan' +		: 'https://int.bahn.de/web/api/angebote/fahrplan'; +		$req = { +			abfahrtsHalt     => $conf{from}->id, +			ankunftsHalt     => $conf{to}->id, +			anfrageZeitpunkt => $dt->strftime('%Y-%m-%dT%H:%M:00'), +			ankunftSuche     => $conf{arrival}     ? 'ANKUNFT'  : 'ABFAHRT', +			klasse           => $conf{first_class} ? 'KLASSE_1' : 'KLASSE_2', +			produktgattungen => \@mots, +			reisende         => [ +				{ +					typ            => 'ERWACHSENER', +					ermaessigungen => [ +						{ +							art    => 'KEINE_ERMAESSIGUNG', +							klasse => 'KLASSENLOS' +						}, +					], +					alter  => [], +					anzahl => 1, +				} +			], +			schnelleVerbindungen              => \1, +			sitzplatzOnly                     => \0, +			bikeCarriage                      => \0, +			reservierungsKontingenteVorhanden => \0, +			nurDeutschlandTicketVerbindungen  => \0, +			deutschlandTicketVorhanden        => \0 +		}; +	} +	elsif ($conf{offers}) { +		$req_url +		= $self->{language} eq 'de' +		? 'https://www.bahn.de/web/api/angebote/recon' +		: 'https://int.bahn.de/web/api/angebote/recon'; +		$req = { +			klasse           => $conf{first_class} ? 'KLASSE_1' : 'KLASSE_2', +			ctxRecon => $conf{offers}{recon}, +			reisende         => [ +				{ +					typ            => 'ERWACHSENER', +					ermaessigungen => [ +						{ +							art    => 'KEINE_ERMAESSIGUNG', +							klasse => 'KLASSENLOS' +						}, +					], +					alter  => [], +					anzahl => 1, +				} +			], +			reservierungsKontingenteVorhanden => \0, +			nurDeutschlandTicketVerbindungen  => \0, +			deutschlandTicketVorhanden        => \0 +		}; +	}  	for my $via ( @{ $conf{via} } ) {  		my $via_stop = { id => $via->{stop}->id }; @@ -184,7 +215,12 @@ sub new {  		}  		$self->{raw_json} = $json->decode($content); -		$self->parse_connections; +		if ($conf{from} and $conf{to}) { +			$self->parse_connections; +		} +		elsif ($conf{offers}) { +			$self->parse_offers; +		}  	}  	return $self; @@ -258,7 +294,6 @@ sub post_with_cache {  	);  	if ( $reply->is_error ) { -		say $reply->status_line;  		return ( undef, $reply->status_line );  	}  	my $content = $reply->content; @@ -294,6 +329,16 @@ sub parse_connections {  	}  } +sub parse_offers { +	my ($self) = @_; + +	for my $offer (@{$self->{raw_json}{verbindungen}[0]{reiseAngebote} // []}) { +		push(@{$self->{offers}}, Travel::Routing::DE::DBRIS::Offer->new( +			json => $offer +		)); +	} +} +  # }}}  # {{{ Public Functions @@ -305,7 +350,12 @@ sub errstr {  sub connections {  	my ($self) = @_; -	return @{ $self->{connections} }; +	return @{ $self->{connections} // []}; +} + +sub offers { +	my ($self) = @_; +	return @{$self->{offers} // [] };  }  # }}} diff --git a/lib/Travel/Routing/DE/DBRIS/Connection.pm b/lib/Travel/Routing/DE/DBRIS/Connection.pm index b090e01..8062929 100644 --- a/lib/Travel/Routing/DE/DBRIS/Connection.pm +++ b/lib/Travel/Routing/DE/DBRIS/Connection.pm @@ -18,7 +18,7 @@ Travel::Routing::DE::DBRIS::Connection->mk_ro_accessors(  	  sched_dep rt_dep dep  	  sched_arr rt_arr arr  	  occupancy occupancy_first occupancy_second -	  price price_unit +	  price price_unit recon  	)  ); @@ -35,6 +35,7 @@ sub new {  		  // -1,  		is_unscheduled => $json->{isAlternativeVerbindung},  		id             => $json->{tripId}, +		recon          => $json->{ctxRecon},  		price          => $json->{angebotsPreis}{betrag},  		price_unit     => $json->{angebotsPreis}{waehrung},  		strptime_obj   => $strptime, diff --git a/lib/Travel/Routing/DE/DBRIS/Offer.pm b/lib/Travel/Routing/DE/DBRIS/Offer.pm new file mode 100644 index 0000000..47bf543 --- /dev/null +++ b/lib/Travel/Routing/DE/DBRIS/Offer.pm @@ -0,0 +1,39 @@ +package Travel::Routing::DE::DBRIS::Offer; + +use strict; +use warnings; +use 5.020; +use utf8; + +use parent 'Class::Accessor'; + +our $VERSION = '0.03'; + +Travel::Routing::DE::DBRIS::Offer->mk_ro_accessors( +	qw(class name price price_unit)); + +sub new { +	my ( $obj, %opt ) = @_; + +	my $json = $opt{json}; + +	my $ref = { +		class      => $json->{klasse} =~ s{KLASSE_}{}r, +		name       => $json->{name}, +		price      => $json->{preis}{betrag}, +		price_unit => $json->{preis}{waehrung}, +		conditions => $json->{konditionsAnzeigen}, +	}; + +	bless( $ref, $obj ); + +	return $ref; +} + +sub conditions { +	my ($self) = @_; + +	return @{ $self->{conditions} // [] }; +} + +1; | 
