Skip to content

Commit

Permalink
Collect calories stat from Strava during export
Browse files Browse the repository at this point in the history
Strava does provide information about how many calories user spent during
activity only when details on specific activity is requested.

Additional API call was added to request activity details during downloading
activity in order to obtain calories information.

Previous behavior was to collect calories stats from the response to request
of the list of user activities which doesn't contain this information.

Closes #353
  • Loading branch information
sergmelikyan committed Jul 27, 2017
1 parent 0e97b8e commit b82e4fc
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions tapiriik/services/Strava/strava.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,8 +174,6 @@ def DownloadActivityList(self, svcRecord, exhaustive=False):
activity.Stats.Cadence.update(ActivityStatistic(ActivityStatisticUnit.RevolutionsPerMinute, avg=ride["average_cadence"]))
if "average_temp" in ride:
activity.Stats.Temperature.update(ActivityStatistic(ActivityStatisticUnit.DegreesCelcius, avg=ride["average_temp"]))
if "calories" in ride:
activity.Stats.Energy = ActivityStatistic(ActivityStatisticUnit.Kilocalories, value=ride["calories"])
activity.Name = ride["name"]
activity.Private = ride["private"]
activity.Stationary = ride["manual"]
Expand Down Expand Up @@ -216,6 +214,18 @@ def DownloadActivity(self, svcRecord, activity):
return activity
activityID = activity.ServiceData["ActivityID"]

#Note (smelikyan): request activity details in order to extract calories stat
details = requests.get("https://www.strava.com/api/v3/activities/" + str(activityID), headers=self._apiHeaders(svcRecord))
if details.status_code == 401:
raise APIException("No authorization to download activity", block=True, user_exception=UserException(UserExceptionType.Authorization, intervention_required=True))
try:
details = details.json()
except ValueError:
raise APIException("Activity details data returned is not JSON")

if "calories" in details:
activity.Stats.Energy = ActivityStatistic(ActivityStatisticUnit.Kilocalories, value=details["calories"])

streamdata = requests.get("https://www.strava.com/api/v3/activities/" + str(activityID) + "/streams/time,altitude,heartrate,cadence,watts,temp,moving,latlng,distance,velocity_smooth", headers=self._apiHeaders(svcRecord))
if streamdata.status_code == 401:
raise APIException("No authorization to download activity", block=True, user_exception=UserException(UserExceptionType.Authorization, intervention_required=True))
Expand Down

0 comments on commit b82e4fc

Please sign in to comment.