tide_generator.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import sys, os
  2. sys.path.append('/var/lib/django')
  3. from django.core.management import setup_environ
  4. from pbp_com import settings
  5. setup_environ(settings)
  6. import re
  7. import urllib
  8. import urllib2
  9. import time
  10. from datetime import datetime, timedelta
  11. import dateutil
  12. from almanac.models import Day, AstroChart, TideChart, TideDay, Tide
  13. from directory.models import Place
  14. year = '2011'
  15. place = Place.objects.get(slug__exact='bar-harbor-public-wharf')
  16. def get_table(year="", location=place.point.town.name):
  17. parser = re.compile('\d\d/\d\d/\d\d\d\d')
  18. location = location.replace(" ", "%20")
  19. url = "http://tidesandcurrents.noaa.gov/get_predictions.shtml?year=%s&stn=3320+Bar%sHarbor" % (year, location)
  20. post_data= {}
  21. data = urllib.urlencode(post_data)
  22. req = urllib2.Request(url, data)
  23. response = urllib2.urlopen(req)
  24. page = response.read()
  25. data = page.split('\n')
  26. table=[]
  27. for line in data:
  28. if parser.match(line):
  29. table.append(line)
  30. return table
  31. ''' End of get_table() '''
  32. def fix_time(str, today, chart):
  33. '''if chart.dst_start < today.date < chart.dst_end:
  34. delta=timedelta(hours=1)
  35. else:
  36. delta=timedelta(hours=0)'''
  37. return time.strftime("%H:%M", datetime(*time.strptime(str, "%I:%M%p")[0:5]).timetuple())
  38. ''' End of fix_time() '''
  39. '''### THE HEAVY LIFTING ### '''
  40. tides = get_table(year)
  41. tide_table=[]
  42. try:
  43. chart=TideChart.objects.get(year__exact=year, place__exact=place)
  44. except TideChart.DoesNotExist:
  45. raise Exception('Currently you have to manually add a tide chart to hold this info before in can be imported.')
  46. try:
  47. astro_chart=AstroChart.objects.get(year__exact=year)
  48. except AstroChart.DoesNotExist:
  49. raise Exception('You must create an astronomical chart for the year you wish to input tide data for.')
  50. for entry in tides:
  51. row = entry.split(" ")
  52. row = [content for content in row if content != '']
  53. try:
  54. day = Day.objects.get(date__exact=datetime.strptime(row[0], "%m/%d/%Y").date())
  55. except Day.DoesNotExist:
  56. raise Exception('Tide data must be loaded after astronomical data for any given date.')
  57. tideday=TideDay.objects.create(day=day, tide_chart=chart)
  58. tideday.tide_1 = Tide.objects.create(time=fix_time(row[2],day,astro_chart), level=row[4], state=row[5])
  59. tideday.tide_2 = Tide.objects.create(time=fix_time(row[6],day,astro_chart), level=row[8], state=row[9])
  60. tideday.tide_3 = Tide.objects.create(time=fix_time(row[10],day,astro_chart), level=row[12], state=row[13])
  61. try:
  62. tideday.tide_4 = Tide.objects.create(time=fix_time(row[14],day,astro_chart) , level=row[16], state=row[17])
  63. except:
  64. pass
  65. ''' Load the data into the DB'''
  66. tideday.save()