|
|
@@ -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); |
|
|
|
} |