summaryrefslogtreecommitdiff
path: root/script
diff options
context:
space:
mode:
authordakkar <dakkar@thenautilus.net>2010-06-21 23:20:31 +0100
committerdakkar <dakkar@thenautilus.net>2010-06-21 23:20:31 +0100
commitd5d36bac73f37a92d4ee2d18a807b2acbccf16f3 (patch)
treec007ce45296d350f43a2bd3afbae7ecb41dff90f /script
downloadTFLMonitor-d5d36bac73f37a92d4ee2d18a807b2acbccf16f3.tar.gz
TFLMonitor-d5d36bac73f37a92d4ee2d18a807b2acbccf16f3.tar.bz2
TFLMonitor-d5d36bac73f37a92d4ee2d18a807b2acbccf16f3.zip
initial version
Diffstat (limited to 'script')
-rw-r--r--script/dump_schema.pl13
-rw-r--r--script/tfl_monitor75
2 files changed, 88 insertions, 0 deletions
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);
+ }
+ }
+);