package WebService::TFL::TubeStatus; use Moo; use Type::Utils -all; use Types::URI 'Uri'; use XML::LibXML; use XML::LibXML::XPathContext; use WebService::TFL::TubeStatus::Response; use namespace::autoclean; has user_agent => ( isa => duck_type(['get']), is => 'lazy', ); sub _build_user_agent { require LWP::UserAgent; my $ua = LWP::UserAgent->new(); $ua->env_proxy; return $ua; } has uri => ( isa => Uri, is => 'ro', coerce => Uri->coercion, default => 'http://cloud.tfl.gov.uk/TrackerNet/LineStatus', ); sub request { my ($self) = @_; my $doc = XML::LibXML->load_xml(location => $self->uri) or die "Couldn't fetch tube status"; my $xpath=XML::LibXML::XPathContext->new($doc); $xpath->registerNs('ws','http://webservices.lul.co.uk/'); return WebService::TFL::TubeStatus::Response->new_from_xml($doc,$xpath); } 1;