Skip to content

Instantly share code, notes, and snippets.

@gmaze
Created October 6, 2022 13:46
Show Gist options
  • Save gmaze/70b01b9ff51cb3963307a20598946536 to your computer and use it in GitHub Desktop.
Save gmaze/70b01b9ff51cb3963307a20598946536 to your computer and use it in GitHub Desktop.
How to download an Argo float configuration from the Euro-Argo Fleet Monitoring API
import urllib.request
import json
import numpy as np
import pandas as pd
def get_float_config(wmo, cyc=None):
def id_mission(missionCycles, a_cyc):
this_mission = None
for im, mission in enumerate(missionCycles):
cycles = missionCycles[mission]
if str(a_cyc) in cycles:
this_mission = mission
return this_mission
# Download floats meta-data from EA API:
URI = "https://fleetmonitoring.euro-argo.eu/floats/%s" % wmo
with urllib.request.urlopen(URI) as url:
data = json.load(url)
# Get the list of cycles covered:
all_cycles = []
for mission in data['configurations']['missionCycles']:
cycles = data['configurations']['missionCycles'][mission]
cycles = np.sort([int(cyc) for cyc in cycles])
[all_cycles.append(cyc) for cyc in cycles]
cycles = [str(cyc) for cyc in cycles]
# print("mission #%s: from #%s to #%s" % (mission, cycles[0], cycles[-1]))
# print(cycles[0],"-",cycles[-1])
# print(",".join(cycles) in data['configurations']['cycles'])
data['configurations']['cycles'][",".join(cycles)]
all_cycles = np.sort(all_cycles)
# Create a dataframe with all mission config at each cycles:
CONFIG = {'CONFIG_MissionID': []}
for item in data['configurations']['cycles'][list(data['configurations']['cycles'].keys())[0]]:
CONFIG[item['argoCode']] = []
for a_cyc in all_cycles:
for im, mission_cycles in enumerate(data['configurations']['cycles']):
if a_cyc in [int(cyc) for cyc in mission_cycles.split(',')]:
CONFIG['CONFIG_MissionID'].append(id_mission(data['configurations']['missionCycles'], a_cyc))
this_mission = data['configurations']['cycles'][mission_cycles]
for item in this_mission:
CONFIG[item['argoCode']].append(item['value'])
df = pd.DataFrame(CONFIG, index=all_cycles)
df.index.name = 'CYCLE_NUMBER'
if cyc is not None:
df = df.loc[cyc]
return df
get_float_config(6902919)
get_float_config(6902919, 12)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment