123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- import sys, os
- sys.path.append("/var/lib/django")
- from django.core.management import setup_environ
- from pbp_com import settings
- setup_environ(settings)
- import re
- import urllib
- import urllib2
- import time
- from datetime import datetime, timedelta
- import dateutil
- from almanac.models import Day, AstroChart, TideChart, TideDay, Tide
- from directory.models import Place
- year = "2011"
- place = Place.objects.get(slug__exact="bar-harbor-public-wharf")
- def get_table(year="", location=place.point.town.name):
- parser = re.compile("\d\d/\d\d/\d\d\d\d")
- location = location.replace(" ", "%20")
- url = (
- "http://tidesandcurrents.noaa.gov/get_predictions.shtml?year=%s&stn=3320+Bar%sHarbor"
- % (year, location)
- )
- post_data = {}
- data = urllib.urlencode(post_data)
- req = urllib2.Request(url, data)
- response = urllib2.urlopen(req)
- page = response.read()
- data = page.split("\n")
- table = []
- for line in data:
- if parser.match(line):
- table.append(line)
- return table
- """ End of get_table() """
- def fix_time(str, today, chart):
- """if chart.dst_start < today.date < chart.dst_end:
- delta=timedelta(hours=1)
- else:
- delta=timedelta(hours=0)"""
- return time.strftime(
- "%H:%M", datetime(*time.strptime(str, "%I:%M%p")[0:5]).timetuple()
- )
- """ End of fix_time() """
- """### THE HEAVY LIFTING ### """
- tides = get_table(year)
- tide_table = []
- try:
- chart = TideChart.objects.get(year__exact=year, place__exact=place)
- except TideChart.DoesNotExist:
- raise Exception(
- "Currently you have to manually add a tide chart to hold this info before in can be imported."
- )
- try:
- astro_chart = AstroChart.objects.get(year__exact=year)
- except AstroChart.DoesNotExist:
- raise Exception(
- "You must create an astronomical chart for the year you wish to input tide data for."
- )
- for entry in tides:
- row = entry.split(" ")
- row = [content for content in row if content != ""]
- try:
- day = Day.objects.get(date__exact=datetime.strptime(row[0], "%m/%d/%Y").date())
- except Day.DoesNotExist:
- raise Exception(
- "Tide data must be loaded after astronomical data for any given date."
- )
- tideday = TideDay.objects.create(day=day, tide_chart=chart)
- tideday.tide_1 = Tide.objects.create(
- time=fix_time(row[2], day, astro_chart), level=row[4], state=row[5]
- )
- tideday.tide_2 = Tide.objects.create(
- time=fix_time(row[6], day, astro_chart), level=row[8], state=row[9]
- )
- tideday.tide_3 = Tide.objects.create(
- time=fix_time(row[10], day, astro_chart), level=row[12], state=row[13]
- )
- try:
- tideday.tide_4 = Tide.objects.create(
- time=fix_time(row[14], day, astro_chart), level=row[16], state=row[17]
- )
- except:
- pass
- """ Load the data into the DB"""
- tideday.save()
|