Created
October 6, 2022 13:46
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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