Source code for spacepy.realtime
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
The realtime module fetches realtime data and forecasts from other sites
Authors: Josef Koller
Institution: Los Alamos National Laboratory
Contact: jkoller@lanl.gov
Copyright 2012 Los Alamos National Security, LLC.
About realtime
--------------
bla bla
Examples
--------
badf asdfasdf asdf
>>> import spacepy.realtime as rt
"""
__contact__ = 'Josef Koller, jkoller@lanl.gov'
import datetime
import urllib.request as u
import spacepy.datamodel as dm
import dateutil.parser as dup
# -------------------------------------
[docs]
def now():
"""
Return the current values for the parameters
Returns
-------
out : datamodel.SpaceData
A SpaceData containing the current values of the indices
"""
raise(NotImplementedError('Not yet implemented (nudge nudge)'))
# -------------------------------------
[docs]
def nextForecast():
"""
Return only the next value
Returns
-------
out : datamodel.SpaceData
A SpaceData containing the next forcast for the indices
"""
dd = forecast()
data = dm.SpaceData()
data.attrs = dd.attrs
data['forecast_hours'] = [1,3]
data['AE'] = [dd['AE_1hr'][-1], dd['AE_3hr'][-1]]
data['Kp'] = [dd['Kp_1hr'][-1], dd['Kp_3hr'][-1]]
data['Dst'] = [dd['Dst_1hr'][-1], dd['Dst_3hr'][-1]]
data['Calc'] = [dd['Calc_1hr'][-1], dd['Calc_3hr'][-1]]
data['Epoch'] = [dd['Epoch_1hr'][-1], dd['Epoch_3hr'][-1]]
return data
def _parseRICE(data, hours):
"""
parse the data read form the Rice website
.. warning: This is an internal function do not call directly
Parameters
----------
data : list
data from the Rice website
hours : str
the forecast hours, used int h dict keys
Returns
-------
out : datamodel.SpaceData
datemnodel object of the parsed data
"""
dd = dm.SpaceData()
# strip the newlines
data = [val.rstrip() for val in data]
header = data.pop(0) # grab the header
header = header.split()[4:]
units = []
for i, val in enumerate(header):
if '(' in val:
val = val.split('(')
units.append(val[-1].split(')')[0])
header[i] = val[0]
else:
units.append(None)
data = dm.dmarray([val.split() for val in data])
times = dm.dmarray([dup.parse('{0}{1:02d}{2:02d}T{3:04d}'.format(val[0], int(val[1]), int(val[2]), int(val[3]))) for val in data[:, 0:4]])
data = dm.dmarray(data[:,4:], dtype=float)
for i, (key, unit) in enumerate(zip(header, units)):
dd[key+'_' + hours + 'hr'] = dm.dmarray(data[:,i], attrs={'units':unit})
dd['Calc_' + hours + 'hr'] = times
dd['Epoch_' + hours + 'hr'] = dd['Calc_' + hours + 'hr'] + datetime.timedelta(hours=int(hours))
return dd
[docs]
def forecast():
RICE_URL_1_last = 'http://mms.rice.edu/realtime/Predictions_1.last'
RICE_URL_3_last = 'http://mms.rice.edu/realtime/Predictions_3.last'
RICE_Boyle_all = 'http://mms.rice.edu/realtime/File1.txt'
RICE_1hr_Kp_Dst = 'http://mms.rice.edu/realtime/File2.txt'
RICE_3hr_Kp_Dst = 'http://mms.rice.edu/realtime/File3.txt'
# grab all the 1 hour data
hr1 = u.urlopen(RICE_1hr_Kp_Dst)
data = hr1.readlines()
hr1.close()
dd1 = _parseRICE(data, '1')
# grab all the 3 hour data
hr3 = u.urlopen(RICE_3hr_Kp_Dst)
data = hr3.readlines()
hr3.close()
dd3 = _parseRICE(data, '3')
dd = dm.SpaceData()
dd.attrs['URL_1hr'] = RICE_1hr_Kp_Dst
dd.attrs['URL_3hr'] = RICE_3hr_Kp_Dst
dd.attrs['retrive_time'] = datetime.datetime.now()
for key1, key3 in zip(dd1, dd3):
dd[key1] = dd1[key1]
dd[key3] = dd3[key3]
return dd