|
|
@@ -0,0 +1,72 @@ |
|
|
|
|
|
|
|
import urllib2 |
|
|
|
import urllib |
|
|
|
import urlparse |
|
|
|
|
|
|
|
import datetime, time |
|
|
|
import cgi |
|
|
|
|
|
|
|
from BeautifulSoup import BeautifulSoup |
|
|
|
|
|
|
|
from PlanningUtils import PlanningApplication, \ |
|
|
|
PlanningAuthorityResults, \ |
|
|
|
getPostcodeFromText |
|
|
|
|
|
|
|
date_format = "%d/%m/%Y" |
|
|
|
|
|
|
|
class KensingtonParser: |
|
|
|
|
|
|
|
def __init__(self, *args): |
|
|
|
|
|
|
|
self.authority_name = "The Royal Borough of Kensington and Chelsea" |
|
|
|
self.authority_short_name = "Kensington and Chelsea" |
|
|
|
self.base_url = "http://www.rbkc.gov.uk/Planning/scripts/weeklyresults.asp" |
|
|
|
|
|
|
|
self._results = PlanningAuthorityResults(self.authority_name, self.authority_short_name) |
|
|
|
|
|
|
|
|
|
|
|
def getResultsByDayMonthYear(self, day, month, year): |
|
|
|
search_day = datetime.date(year, month, day) |
|
|
|
|
|
|
|
# We want the sunday of the week being searched for. |
|
|
|
# (sunday is at the end of the week). |
|
|
|
friday = search_day - datetime.timedelta(search_day.weekday()) + datetime.timedelta(4) |
|
|
|
|
|
|
|
# Not using urllib.urlencode as it insists on turning the "+" into "%2B" |
|
|
|
post_data = "WeekEndDate=%d%%2F%d%%2F%d&order=Received+Date&submit=search" %(friday.day, friday.month, friday.year) |
|
|
|
|
|
|
|
|
|
|
|
# Now get the search page |
|
|
|
response = urllib2.urlopen(self.base_url, post_data) |
|
|
|
soup = BeautifulSoup(response.read()) |
|
|
|
|
|
|
|
trs = soup.find("table", summary="Planning Application search results table").findAll("tr")[1:] |
|
|
|
|
|
|
|
for tr in trs: |
|
|
|
application = PlanningApplication() |
|
|
|
|
|
|
|
tds = tr.findAll("td") |
|
|
|
|
|
|
|
# Not sure why these are entities. We'll convert them back. |
|
|
|
application.council_reference = tds[0].a.contents[1].strip().replace("/", "/") |
|
|
|
application.info_url = urlparse.urljoin(self.base_url, tds[0].a['href']) |
|
|
|
application.comment_url = application.info_url |
|
|
|
|
|
|
|
application.date_received = datetime.datetime(*(time.strptime(tds[1].string.strip(), date_format)[0:6])) |
|
|
|
|
|
|
|
application.address = tds[2].string.strip() |
|
|
|
application.postcode = getPostcodeFromText(application.address) |
|
|
|
|
|
|
|
application.description = tds[3].string.strip() |
|
|
|
|
|
|
|
self._results.addApplication(application) |
|
|
|
|
|
|
|
return self._results |
|
|
|
|
|
|
|
def getResults(self, day, month, year): |
|
|
|
return self.getResultsByDayMonthYear(int(day), int(month), int(year)).displayXML() |
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
|
parser = KensingtonParser() |
|
|
|
print parser.getResults(11,6,2008) |
|
|
|
|