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