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()