Automatically exported from code.google.com/p/planningalerts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 lines
2.4 KiB

  1. import urllib2
  2. import urllib
  3. import urlparse
  4. import datetime, time
  5. import cgi
  6. from BeautifulSoup import BeautifulSoup
  7. from PlanningUtils import PlanningApplication, \
  8. PlanningAuthorityResults, \
  9. getPostcodeFromText
  10. date_format = "%d/%m/%Y"
  11. class KensingtonParser:
  12. def __init__(self, *args):
  13. self.authority_name = "The Royal Borough of Kensington and Chelsea"
  14. self.authority_short_name = "Kensington and Chelsea"
  15. self.base_url = "http://www.rbkc.gov.uk/Planning/scripts/weeklyresults.asp"
  16. self._results = PlanningAuthorityResults(self.authority_name, self.authority_short_name)
  17. def getResultsByDayMonthYear(self, day, month, year):
  18. search_day = datetime.date(year, month, day)
  19. # We want the sunday of the week being searched for.
  20. # (sunday is at the end of the week).
  21. friday = search_day - datetime.timedelta(search_day.weekday()) + datetime.timedelta(4)
  22. # Not using urllib.urlencode as it insists on turning the "+" into "%2B"
  23. post_data = "WeekEndDate=%d%%2F%d%%2F%d&order=Received+Date&submit=search" %(friday.day, friday.month, friday.year)
  24. # Now get the search page
  25. response = urllib2.urlopen(self.base_url, post_data)
  26. soup = BeautifulSoup(response.read())
  27. trs = soup.find("table", summary="Planning Application search results table").findAll("tr")[1:]
  28. for tr in trs:
  29. application = PlanningApplication()
  30. tds = tr.findAll("td")
  31. # Not sure why these are entities. We'll convert them back.
  32. application.council_reference = tds[0].a.contents[1].strip().replace("/", "/")
  33. application.info_url = urlparse.urljoin(self.base_url, tds[0].a['href'])
  34. application.comment_url = application.info_url
  35. application.date_received = datetime.datetime(*(time.strptime(tds[1].string.strip(), date_format)[0:6]))
  36. application.address = tds[2].string.strip()
  37. application.postcode = getPostcodeFromText(application.address)
  38. application.description = tds[3].string.strip()
  39. self._results.addApplication(application)
  40. return self._results
  41. def getResults(self, day, month, year):
  42. return self.getResultsByDayMonthYear(int(day), int(month), int(year)).displayXML()
  43. if __name__ == '__main__':
  44. parser = KensingtonParser()
  45. print parser.getResults(11,6,2008)