package WebService::TFL::Bus; use Moose; use Moose::Util::TypeConstraints; use MooseX::Types::URI 'Uri'; use WebService::TFL::Bus::Response; use namespace::autoclean; has user_agent => ( isa => duck_type(['get']), is => 'ro', lazy_build => 1, ); sub _build_user_agent { require LWP::UserAgent; my $ua = LWP::UserAgent->new(); $ua->env_proxy; return $ua; } has uri => ( isa => Uri, is => 'ro', coerce => 1, default => 'http://countdown.api.tfl.gov.uk/interfaces/ura/instant_V1', ); sub request { my ($self,$request) = @_; my $http_response = $self->user_agent->get( $request->request_uri($self->uri) ); if ($http_response->is_success) { my $json = $http_response->content; return WebService::TFL::Bus::Response->new_from_json( $request->ReturnList, $json ); } else { die $http_response->status_line; } } 1;