In [ ]:
from pydap.client import open_url
dataset = open_url('http://opendap.co-ops.nos.noaa.gov/dods/IOOS/Raw_Water_Level')
In [ ]:
dataset
In [ ]:
dataset.attributes
In [ ]:
seq = dataset['WATERLEVEL_RAW_PX']
reqStr=urllib.quote('_STATION_ID="1615680"&_BEGIN_DATE="20130613 10:06"&_END_DATE="20130614 10:06"&_DATUM="MLLW"')
print 'reqStr:',reqStr
filt_seq=seq.filter(reqStr)
data = filt_seq._get_data() # Is this bad - using private method?
print 'Found this many waterlevel points:',len(data)
print data[-1]
In [ ]:
def get_waterlevel(stationId,start_date,end_date,verbose=False, returnDict=True,datum='MSL'):
'''
Fetch the dictionary for the current water level
FIX:.... in progress!
'''
beginDate = str(start_date.year)+('%02d' % start_date.month)+('%02d' % start_date.day)+' '+ ('%02d' % (start_date.hour))+':'+('%02d' % (start_date.minute))
endDate = str(end_date.year)+('%02d' % end_date.month)+('%02d' % end_date.day)+' '+ ('%02d' % (end_date.hour))+':'+('%02d' % (end_date.minute))
reqStr = '_STATION_ID="'+str(stationId)+'"&_BEGIN_DATE="'+beginDate+'"&_END_DATE="'+endDate+'"&_DATUM="'+datum+'"'
if verbose:
print 'plain text, then quoted'
print 'getWaterLevelNow reqStr:\n ',reqStr
reqStr = urllib.quote(reqStr) # FIX: remove this step when pydap updated
if verbose:
print 'getWaterLevelNow reqStr:\n ',reqStr
filt_seq=waterlevelSeq.filter(reqStr)
if verbose: print 'sending data request...'
data = filt_seq._get_data()
#if len(data) != 1: print 'WARNING: retrieved more than one point!'
if not returnDict: return data[-1][:]
data = data[-1][:] # get just the row and drop the surrounding "[]"
keys = filt_seq.keys()
#print len(keys),': ',keys
#print len(data),': ',data
#print
assert len(keys) == len(data)
r = {} # Results
for i in range(len(keys)):
r[keys[i]] = data[i]
return r