Planning applications tracker for InLinkUK from BT kiosks. https://kiosks.adrianshort.org/
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.
 
 
 
 
 

86 lines
2.8 KiB

  1. require 'scraperwiki'
  2. require 'petrify'
  3. require 'csv'
  4. class Site
  5. def self.generate
  6. # Home page
  7. summary = ScraperWiki.select("
  8. authority_name, status, decision, appeal_status, appeal_decision, count(*) as applications
  9. from applications
  10. group by authority_name, status, decision, appeal_status, appeal_decision
  11. ")
  12. q = ScraperWiki.select("
  13. scraped_at
  14. from applications
  15. order by scraped_at desc
  16. limit 1")
  17. last_updated = DateTime.parse(q[0]['scraped_at'])
  18. path = '.'
  19. Petrify.page(path, 'index', { summary: summary, last_updated: last_updated })
  20. Petrify.csv(path, 'inlink-summary', summary)
  21. # New applications page
  22. apps = ScraperWiki.select("* from `applications` order by date_received desc limit 60")
  23. Petrify.page('new-applications', 'new-applications', { apps: apps })
  24. # Latest decisions page
  25. apps = ScraperWiki.select("* from `applications` order by date_decision desc limit 60")
  26. path = 'decisions'
  27. Petrify.page(path, 'decisions', { apps: apps })
  28. Petrify.csv(path, 'inlink-decisions', apps)
  29. # Appeals page
  30. summary = ScraperWiki.select("
  31. authority_name, status, decision, appeal_status, appeal_decision, count(*) as applications
  32. from applications
  33. where (appeal_status is not null
  34. and appeal_status != 'Unknown')
  35. or status like '%appeal%'
  36. group by authority_name, appeal_status, appeal_decision
  37. collate nocase
  38. ")
  39. apps = ScraperWiki.select("
  40. * from applications
  41. where (appeal_status is not null
  42. and appeal_status != 'Unknown')
  43. or status like '%appeal%'
  44. collate nocase
  45. ")
  46. path = 'appeals'
  47. Petrify.page(path, 'appeals', { summary: summary, apps: apps })
  48. Petrify.csv(path, 'inlink-appeals', apps)
  49. # Media page
  50. stories = CSV.read('media.csv', :headers => true )
  51. Petrify.page('media', 'media', { stories: stories })
  52. # Authority pages
  53. auths = ScraperWiki.select("distinct(authority_name) as authority_name from applications")
  54. auths.each do |auth|
  55. summary = ScraperWiki.select("
  56. status, decision, appeal_status, appeal_decision, count(*) as qty
  57. from applications
  58. where authority_name = ?
  59. group by status, decision, appeal_status, appeal_decision
  60. ", auth['authority_name'])
  61. apps = ScraperWiki.select("* from applications where authority_name = ? order by date_received desc", auth['authority_name'])
  62. this_stories = stories.select \
  63. { |story| story['authorities'].match(auth['authority_name']) }
  64. path = ['authorities', slug(auth['authority_name'])]
  65. Petrify.page(path, 'authority', \
  66. { apps: apps, auth: auth, summary: summary, stories: this_stories })
  67. Petrify.csv(path, slug(auth['authority_name']), apps)
  68. end
  69. end
  70. end