Fix for #21
- Activity listing endpoint no longer appears to work: switched from https://connect.garmin.com/proxy/activity-search-service-1.2/json/activities to https://connect.garmin.com/modern/proxy/activitylist-service/activities/search/activities. - Activity details json endpoint no longer appears to work: switched from https://connect.garmin.com/modern/proxy/activity-service-1.3/json/activity_embed/<id> to https://connect.garmin.com/modern/proxy/activity-service/activity/<id>.
This commit is contained in:
parent
186fa4ac7b
commit
769d02b2a2
@ -155,7 +155,8 @@ class GarminClient(object):
|
|||||||
"""Return all activity ids stored by the logged in user, along
|
"""Return all activity ids stored by the logged in user, along
|
||||||
with their starting timestamps.
|
with their starting timestamps.
|
||||||
|
|
||||||
:returns: The full list of activity identifiers.
|
:returns: The full list of activity identifiers (along with their
|
||||||
|
starting timestamps).
|
||||||
:rtype: tuples of (int, datetime)
|
:rtype: tuples of (int, datetime)
|
||||||
"""
|
"""
|
||||||
ids = []
|
ids = []
|
||||||
@ -171,8 +172,9 @@ class GarminClient(object):
|
|||||||
|
|
||||||
@require_session
|
@require_session
|
||||||
def _fetch_activity_ids_and_ts(self, start_index, max_limit=100):
|
def _fetch_activity_ids_and_ts(self, start_index, max_limit=100):
|
||||||
"""Return a sequence of activity ids starting at a given index,
|
"""Return a sequence of activity ids (along with their starting
|
||||||
with index 0 being the user's most recently registered activity.
|
timestamps) starting at a given index, with index 0 being the user's
|
||||||
|
most recently registered activity.
|
||||||
|
|
||||||
Should the index be out of bounds or the account empty, an empty
|
Should the index be out of bounds or the account empty, an empty
|
||||||
list is returned.
|
list is returned.
|
||||||
@ -182,26 +184,32 @@ class GarminClient(object):
|
|||||||
:param max_limit: The (maximum) number of activities to retrieve.
|
:param max_limit: The (maximum) number of activities to retrieve.
|
||||||
:type max_limit: int
|
:type max_limit: int
|
||||||
|
|
||||||
:returns: A list of activity identifiers.
|
:returns: A list of activity identifiers (along with their
|
||||||
:rtype: list of str
|
starting timestamps).
|
||||||
|
:rtype: tuples of (int, datetime)
|
||||||
"""
|
"""
|
||||||
log.debug("fetching activities {} through {} ...".format(
|
log.debug("fetching activities {} through {} ...".format(
|
||||||
start_index, start_index+max_limit-1))
|
start_index, start_index+max_limit-1))
|
||||||
response = self.session.get(
|
response = self.session.get(
|
||||||
"https://connect.garmin.com/proxy/activity-search-service-1.2/json/activities", params={"start": start_index, "limit": max_limit})
|
"https://connect.garmin.com/modern/proxy/activitylist-service/activities/search/activities",
|
||||||
|
params={"start": start_index, "limit": max_limit})
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
raise Exception(
|
raise Exception(
|
||||||
u"failed to fetch activities {} to {} types: {}\n{}".format(
|
u"failed to fetch activities {} to {} types: {}\n{}".format(
|
||||||
start_index, (start_index+max_limit-1),
|
start_index, (start_index+max_limit-1),
|
||||||
response.status_code, response.text))
|
response.status_code, response.text))
|
||||||
results = json.loads(response.text)["results"]
|
activities = json.loads(response.text)
|
||||||
if not "activities" in results:
|
if not activities:
|
||||||
# index out of bounds or empty account
|
# index out of bounds or empty account
|
||||||
return []
|
return []
|
||||||
|
|
||||||
entries = [ (int(entry["activity"]["activityId"]),
|
entries = []
|
||||||
dateutil.parser.parse(entry["activity"]["activitySummary"]["BeginTimestamp"]["value"]))
|
for activity in activities:
|
||||||
for entry in results["activities"] ]
|
id = int(activity["activityId"])
|
||||||
|
timestamp_utc = dateutil.parser.parse(activity["startTimeGMT"])
|
||||||
|
# make sure UTC timezone gets set
|
||||||
|
timestamp_utc = timestamp_utc.replace(tzinfo=dateutil.tz.tzutc())
|
||||||
|
entries.append( (id, timestamp_utc) )
|
||||||
log.debug("got {} activities.".format(len(entries)))
|
log.debug("got {} activities.".format(len(entries)))
|
||||||
return entries
|
return entries
|
||||||
|
|
||||||
@ -217,8 +225,10 @@ class GarminClient(object):
|
|||||||
:returns: The activity summary as a JSON dict.
|
:returns: The activity summary as a JSON dict.
|
||||||
:rtype: dict
|
:rtype: dict
|
||||||
"""
|
"""
|
||||||
response = self.session.get("https://connect.garmin.com/modern/proxy/activity-service-1.3/json/activity_embed/{}".format(activity_id))
|
response = self.session.get("https://connect.garmin.com/modern/proxy/activity-service/activity/{}".format(activity_id))
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
|
log.error(u"failed to fetch json summary for activity {}: {}\n{}".format(
|
||||||
|
activity_id, response.status_code, response.text))
|
||||||
raise Exception(u"failed to fetch json summary for activity {}: {}\n{}".format(
|
raise Exception(u"failed to fetch json summary for activity {}: {}\n{}".format(
|
||||||
activity_id, response.status_code, response.text))
|
activity_id, response.status_code, response.text))
|
||||||
return json.loads(response.text)
|
return json.loads(response.text)
|
||||||
|
Loading…
Reference in New Issue
Block a user