From 7f8e3dafaae9bb01a199445ba88f5822107910ff Mon Sep 17 00:00:00 2001 From: memespring Date: Sat, 21 Jul 2007 08:33:41 +0000 Subject: [PATCH] north herts --- cgi-bin/NorthHerts.cgi | 98 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 cgi-bin/NorthHerts.cgi diff --git a/cgi-bin/NorthHerts.cgi b/cgi-bin/NorthHerts.cgi new file mode 100644 index 0000000..ab8bb67 --- /dev/null +++ b/cgi-bin/NorthHerts.cgi @@ -0,0 +1,98 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use CGI qw(:cgi); +use HTML::TreeBuilder; +use LWP::UserAgent; +use XML::Writer; + +# The master URLs for the North Hertfordshire planning search +our $SearchURL = "http://www.north-herts.gov.uk/dcdataonline/Pages/acolnetcgi.gov?ACTION=UNWRAP&RIPNAME=Root.pgesearch"; + +# We're a CGI script... +my $query = CGI->new(); + +# Get the date to fetch +my $date = $query->param("day") . "/" . $query->param("month") . "/" . $query->param("year"); + +# Construct an LWP user agent +our $UA = LWP::UserAgent->new(env_proxy => 1); + +# Fetch the search page +my $page = do_get($SearchURL); + +# Find the form submission URL +my $form = $page->look_down("_tag" => "form", name => "frmSearch"); +my $url = URI->new_abs($form->attr("action"), $SearchURL); + +# Do the search +$page = do_post($url, {"regdate1" => $date, "regdate2" => $date}); + +# Output an HTTP response header +print $query->header(-type => "text/xml"); + +# Create an XML output stream +my $Writer = XML::Writer->new(DATA_MODE => 1); + +# Output the XML header data +$Writer->xmlDecl("UTF-8"); +$Writer->startTag("planning"); +$Writer->dataElement("authority_name", "North Hertfordshire District Council"); +$Writer->dataElement("authority_short_name", "North Hertfordshire"); +$Writer->startTag("applications"); + +# Process each table of the results +foreach my $table ($page->look_down("_tag" => "table", "class" => "results-table")) +{ + my @rows = map { $_->look_down("_tag" => "td") } $table->look_down("_tag" => "tr"); + my $reference = $rows[0]->as_trimmed_text; + my $infourl = $rows[0]->look_down("_tag" => "a")->attr("href"); + my $date = $rows[1]->as_trimmed_text; + my $address = $rows[3]->as_trimmed_text; + my $description = $rows[4]->as_trimmed_text; + my $postcode; + + if ($address =~ /\s+([A-Z]+\d+\s+\d+[A-Z]+)$/) + { + $postcode = $1; + } + + $Writer->startTag("application"); + $Writer->dataElement("council_reference", $reference); + $Writer->dataElement("address", $address); + $Writer->dataElement("postcode", $postcode); + $Writer->dataElement("description", $description); + $Writer->dataElement("info_url", $infourl); + $Writer->dataElement("comment_url", "mailto:service\@north-herts.gov.uk?subject=Comment on Planning Application"); + $Writer->dataElement("date_received", $date); + $Writer->endTag("application"); +} + +# Finish off XML output +$Writer->endTag("applications"); +$Writer->endTag("planning"); +$Writer->end(); + +exit 0; + +# Make a GET request +sub do_get +{ + my $response = $UA->get(@_); + + die $response->status_line unless $response->is_success; + + return HTML::TreeBuilder->new_from_content($response->content); +} + +# Make a POST request +sub do_post +{ + my $response = $UA->post(@_, Content_Type => "form-data"); + + die $response->status_line unless $response->is_success; + + return HTML::TreeBuilder->new_from_content($response->content); +}