From d5d36bac73f37a92d4ee2d18a807b2acbccf16f3 Mon Sep 17 00:00:00 2001 From: dakkar Date: Mon, 21 Jun 2010 23:20:31 +0100 Subject: initial version --- script/dump_schema.pl | 13 +++++++++ script/tfl_monitor | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 88 insertions(+) create mode 100644 script/dump_schema.pl create mode 100644 script/tfl_monitor (limited to 'script') diff --git a/script/dump_schema.pl b/script/dump_schema.pl new file mode 100644 index 0000000..ec1e1bc --- /dev/null +++ b/script/dump_schema.pl @@ -0,0 +1,13 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use DBIx::Class::Schema::Loader qw/ make_schema_at /; + +make_schema_at( + 'TFLMonitor::Schema', + { + debug => 1, + dump_directory => './lib', + }, + [ 'dbi:SQLite:dbname=monitor.db', ], +); diff --git a/script/tfl_monitor b/script/tfl_monitor new file mode 100644 index 0000000..704f3fc --- /dev/null +++ b/script/tfl_monitor @@ -0,0 +1,75 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use TFLMonitor::Schema; +use XML::LibXML; +use XML::LibXML::XPathContext; +use Path::Class; + +my $libdir=file(__FILE__)->parent; +my $dbfile=$libdir->parent->file('monitor.db'); + +my $doc=XML::LibXML->load_xml(location=> 'http://apibeta.london.gov.uk/TrackernetWebServicev3/timetableservice.aspx?Feed=7&linesWithIncidents=false'); + +die "Couldn't fetch status\n" unless $doc; + +my $schema=TFLMonitor::Schema->connect( + "dbi:SQLite:dbname=$dbfile", + '','', + { + AutoCommit => 1, + }); + +my $xpath=XML::LibXML::XPathContext->new($doc); +$xpath->registerNs('ws','http://webservices.lul.co.uk/'); + +my (%lines,%status,@ls); + +for my $ls ($xpath->findnodes(q{/ws:ArrayOfLineStatus/ws:LineStatus},$doc)) { + my ($line)=$xpath->findnodes(q{ws:Line},$ls); + my $line_id=$line->findvalue(q{@ID}); + $lines{$line_id} ||= { + id => $line_id, + name => $line->findvalue(q{@Name}), + }; + + my ($status)=$xpath->findnodes(q{ws:Status},$ls); + my $status_code=$status->findvalue(q{@ID}); + my $is_active=$status->findvalue(q{@IsActive}); + $status{$status_code} ||= { + code => $status_code, + class => $status->findvalue(q{@CssClass}), + description => $status->findvalue(q{@Description}), + is_active => $is_active, + }; + + push @ls,{ + 'time' => time(), + line_id => $line_id, + status_code => $status_code, + is_active => $is_active, + details => $ls->findvalue(q{@StatusDetails}), + }; +} + +$schema->txn_do( + sub{ + for my $l (values %lines) { + $schema->resultset('TFLMonitor::Schema::Line') + ->find_or_create( + $l, + { key => 'primary' }, + ); + } + for my $s (values %status) { + $schema->resultset('TFLMonitor::Schema::Status') + ->find_or_create( + $s, + { key => 'primary' }, + ); + } + for my $ls (@ls) { + $schema->resultset('TFLMonitor::Schema::LineStatus')->create($ls); + } + } +); -- cgit v1.2.3