本文整理汇总了Python中tapiriik.services.interchange.Lap.Waypoints方法的典型用法代码示例。如果您正苦于以下问题:Python Lap.Waypoints方法的具体用法?Python Lap.Waypoints怎么用?Python Lap.Waypoints使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类tapiriik.services.interchange.Lap
的用法示例。
在下文中一共展示了Lap.Waypoints方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: DownloadActivity
# 需要导入模块: from tapiriik.services.interchange import Lap [as 别名]
# 或者: from tapiriik.services.interchange.Lap import Waypoints [as 别名]
def DownloadActivity(self, svcRecord, activity):
if activity.ServiceData["Manual"]: # I should really add a param to DownloadActivity for this value as opposed to constantly doing this
# We've got as much information as we're going to get - we need to copy it into a Lap though.
activity.Laps = [Lap(startTime=activity.StartTime, endTime=activity.EndTime, stats=activity.Stats)]
return activity
activityID = activity.ServiceData["ActivityID"]
self._globalRateLimit()
streamdata = requests.get("https://www.strava.com/api/v3/activities/" + str(activityID) + "/streams/time,altitude,heartrate,cadence,watts,temp,moving,latlng", 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))
try:
streamdata = streamdata.json()
except:
raise APIException("Stream data returned is not JSON")
if "message" in streamdata and streamdata["message"] == "Record Not Found":
raise APIException("Could not find activity")
ridedata = {}
for stream in streamdata:
ridedata[stream["type"]] = stream["data"]
lap = Lap(stats=activity.Stats, startTime=activity.StartTime, endTime=activity.EndTime) # Strava doesn't support laps, but we need somewhere to put the waypoints.
activity.Laps = [lap]
lap.Waypoints = []
hasHR = "heartrate" in ridedata and len(ridedata["heartrate"]) > 0
hasCadence = "cadence" in ridedata and len(ridedata["cadence"]) > 0
hasTemp = "temp" in ridedata and len(ridedata["temp"]) > 0
hasPower = ("watts" in ridedata and len(ridedata["watts"]) > 0)
hasAltitude = "altitude" in ridedata and len(ridedata["altitude"]) > 0
if "error" in ridedata:
raise APIException("Strava error " + ridedata["error"])
waypointCt = len(ridedata["time"])
for idx in range(0, waypointCt - 1):
waypoint = Waypoint(activity.StartTime + timedelta(0, ridedata["time"][idx]))
if "latlng" in ridedata:
latlng = ridedata["latlng"][idx]
waypoint.Location = Location(latlng[0], latlng[1], None)
if waypoint.Location.Longitude == 0 and waypoint.Location.Latitude == 0:
waypoint.Location.Longitude = None
waypoint.Location.Latitude = None
if hasAltitude:
if not waypoint.Location:
waypoint.Location = Location(None, None, None)
waypoint.Location.Altitude = float(ridedata["altitude"][idx])
if idx == 0:
waypoint.Type = WaypointType.Start
elif idx == waypointCt - 2:
waypoint.Type = WaypointType.End
if hasHR:
waypoint.HR = ridedata["heartrate"][idx]
if hasCadence:
waypoint.Cadence = ridedata["cadence"][idx]
if hasTemp:
waypoint.Temp = ridedata["temp"][idx]
if hasPower:
waypoint.Power = ridedata["watts"][idx]
lap.Waypoints.append(waypoint)
return activity
示例2: DownloadActivity
# 需要导入模块: from tapiriik.services.interchange import Lap [as 别名]
# 或者: from tapiriik.services.interchange.Lap import Waypoints [as 别名]
def DownloadActivity(self, svcRecord, activity):
if activity.ServiceData["Manual"]: # I should really add a param to DownloadActivity for this value as opposed to constantly doing this
# We've got as much information as we're going to get - we need to copy it into a Lap though.
activity.Laps = [Lap(startTime=activity.StartTime, endTime=activity.EndTime, stats=activity.Stats)]
return activity
activityID = activity.ServiceData["ActivityID"]
streamdata = requests.get("https://www.strava.com/api/v3/activities/" + str(activityID) + "/streams/time,altitude,heartrate,cadence,watts,temp,moving,latlng", headers=self._apiHeaders(svcRecord))
if streamdata.status_code == 401:
self._logAPICall("download", (svcRecord.ExternalID, str(activity.StartTime)), "auth")
raise APIException("No authorization to download activity", block=True, user_exception=UserException(UserExceptionType.Authorization, intervention_required=True))
try:
streamdata = streamdata.json()
except:
raise APIException("Stream data returned is not JSON")
if "message" in streamdata and streamdata["message"] == "Record Not Found":
self._logAPICall("download", (svcRecord.ExternalID, str(activity.StartTime)), "missing")
raise APIException("Could not find activity")
ridedata = {}
for stream in streamdata:
ridedata[stream["type"]] = stream["data"]
lap = Lap(stats=activity.Stats, startTime=activity.StartTime, endTime=activity.EndTime) # Strava doesn't support laps, but we need somewhere to put the waypoints.
activity.Laps = [lap]
lap.Waypoints = []
hasHR = "heartrate" in ridedata and len(ridedata["heartrate"]) > 0
hasCadence = "cadence" in ridedata and len(ridedata["cadence"]) > 0
hasTemp = "temp" in ridedata and len(ridedata["temp"]) > 0
hasPower = ("watts" in ridedata and len(ridedata["watts"]) > 0)
hasAltitude = "altitude" in ridedata and len(ridedata["altitude"]) > 0
hasMovingData = "moving" in ridedata and len(ridedata["moving"]) > 0
moving = True
if "error" in ridedata:
self._logAPICall("download", (svcRecord.ExternalID, str(activity.StartTime)), "data")
raise APIException("Strava error " + ridedata["error"])
hasLocation = False
waypointCt = len(ridedata["time"])
for idx in range(0, waypointCt - 1):
latlng = ridedata["latlng"][idx]
waypoint = Waypoint(activity.StartTime + timedelta(0, ridedata["time"][idx]))
latlng = ridedata["latlng"][idx]
waypoint.Location = Location(latlng[0], latlng[1], None)
if waypoint.Location.Longitude == 0 and waypoint.Location.Latitude == 0:
waypoint.Location.Longitude = None
waypoint.Location.Latitude = None
else: # strava only returns 0 as invalid coords, so no need to check for null (update: ??)
hasLocation = True
if hasAltitude:
waypoint.Location.Altitude = float(ridedata["altitude"][idx])
if idx == 0:
waypoint.Type = WaypointType.Start
elif idx == waypointCt - 2:
waypoint.Type = WaypointType.End
elif hasMovingData and not moving and ridedata["moving"][idx] is True:
waypoint.Type = WaypointType.Resume
moving = True
elif hasMovingData and ridedata["moving"][idx] is False:
waypoint.Type = WaypointType.Pause
moving = False
if hasHR:
waypoint.HR = ridedata["heartrate"][idx]
if hasCadence:
waypoint.Cadence = ridedata["cadence"][idx]
if hasTemp:
waypoint.Temp = ridedata["temp"][idx]
if hasPower:
waypoint.Power = ridedata["watts"][idx]
lap.Waypoints.append(waypoint)
if not hasLocation:
self._logAPICall("download", (svcRecord.ExternalID, str(activity.StartTime)), "faulty")
raise APIExcludeActivity("No waypoints with location", activityId=activityID, userException=UserException(UserExceptionType.Corrupt))
self._logAPICall("download", (svcRecord.ExternalID, str(activity.StartTime)), None)
return activity
示例3: _populateActivityFromTrackData
# 需要导入模块: from tapiriik.services.interchange import Lap [as 别名]
# 或者: from tapiriik.services.interchange.Lap import Waypoints [as 别名]
def _populateActivityFromTrackData(self, activity, recordText, minimumWaypoints=False):
lap = Lap()
activity.Laps = [lap]
### 1ST RECORD ###
# userID;
# timestamp - create date?;
# type? W=1st
# User name;
# activity name;
# activity type;
# another timestamp - start time of event?;
# duration.00;
# distance (km);
# kcal;
#;
# max alt;
# min alt;
# max HR;
# avg HR;
### TRACK RECORDS ###
# timestamp;
# type (2=start, 3=end, 0=pause, 1=resume);
# latitude;
# longitude;
#;
#;
# alt;
# hr;
wptsWithLocation = False
wptsWithNonZeroAltitude = False
rows = recordText.split("\n")
for row in rows:
if row == "OK" or len(row) == 0:
continue
split = row.split(";")
if split[2] == "W":
# init record
lap.Stats.MovingTime = ActivityStatistic(ActivityStatisticUnit.Time, value=timedelta(seconds=float(split[7])) if split[7] != "" else None)
lap.Stats.Distance = ActivityStatistic(ActivityStatisticUnit.Kilometers, value=float(split[8]) if split[8] != "" else None)
lap.Stats.HR = ActivityStatistic(ActivityStatisticUnit.BeatsPerMinute, avg=float(split[14]) if split[14] != "" else None, max=float(split[13]) if split[13] != "" else None)
lap.Stats.Elevation = ActivityStatistic(ActivityStatisticUnit.Meters, min=float(split[12]) if split[12] != "" else None, max=float(split[11]) if split[11] != "" else None)
lap.Stats.Energy = ActivityStatistic(ActivityStatisticUnit.Kilocalories, value=float(split[12]) if split[12] != "" else None)
activity.Stats.update(lap.Stats)
lap.Stats = activity.Stats
activity.Name = split[4]
else:
wp = Waypoint()
if split[1] == "2":
wp.Type = WaypointType.Start
elif split[1] == "3":
wp.Type = WaypointType.End
elif split[1] == "0":
wp.Type = WaypointType.Pause
elif split[1] == "1":
wp.Type = WaypointType.Resume
else:
wp.Type == WaypointType.Regular
if split[0] == "":
continue # no timestamp, for whatever reason
wp.Timestamp = pytz.utc.localize(datetime.strptime(split[0], "%Y-%m-%d %H:%M:%S UTC")) # it's like this as opposed to %z so I know when they change things (it'll break)
if split[2] != "":
wp.Location = Location(float(split[2]), float(split[3]), None)
if wp.Location.Longitude > 180 or wp.Location.Latitude > 90 or wp.Location.Longitude < -180 or wp.Location.Latitude < -90:
raise APIExcludeActivity("Out of range lat/lng")
if wp.Location.Latitude is not None and wp.Location.Latitude is not None:
wptsWithLocation = True
if split[6] != "":
wp.Location.Altitude = float(split[6]) # why this is missing: who knows?
if wp.Location.Altitude != 0:
wptsWithNonZeroAltitude = True
if split[7] != "":
wp.HR = float(split[7])
lap.Waypoints.append(wp)
if wptsWithLocation and minimumWaypoints:
break
lap.Waypoints = sorted(activity.Waypoints, key=lambda v: v.Timestamp)
if wptsWithLocation:
activity.EnsureTZ(recalculate=True)
if not wptsWithNonZeroAltitude: # do this here so, should the activity run near sea level, altitude data won't be spotty
for x in lap.Waypoints: # clear waypoints of altitude data if all of them were logged at 0m (invalid)
if x.Location is not None:
x.Location.Altitude = None
else:
lap.Waypoints = [] # practically speaking
示例4: DownloadActivity
# 需要导入模块: from tapiriik.services.interchange import Lap [as 别名]
# 或者: from tapiriik.services.interchange.Lap import Waypoints [as 别名]
def DownloadActivity(self, svcRecord, activity):
activityID = activity.ServiceData["ActivityID"]
extID = svcRecord.ExternalID
url = self.SingletrackerDomain + "getRideData"
payload = {"userId": extID, "rideId": activityID}
headers = {
'content-type': "application/json",
'cache-control': "no-cache",
}
streamdata = requests.post(url, data=json.dumps(payload), headers=headers)
if streamdata.status_code == 500:
raise APIException("Internal server error")
if streamdata.status_code == 403:
raise APIException("No authorization to download activity", block=True,
user_exception=UserException(UserExceptionType.Authorization,
intervention_required=True))
if streamdata.status_code != 200:
raise APIException("Unknown Singletracker response %d %s" % (streamdata.status_code, streamdata.text))
try:
streamdata = streamdata.json()
except:
raise APIException("Stream data returned is not JSON")
ridedata = {}
lap = Lap(stats=activity.Stats, startTime=activity.StartTime,
endTime=activity.EndTime) # Singletracker doesn't support laps, but we need somewhere to put the waypoints.
activity.Laps = [lap]
lap.Waypoints = []
wayPointExist = False
for stream in streamdata:
waypoint = Waypoint(dateutil.parser.parse(stream["time"], ignoretz=True))
if "latitude" in stream:
if "longitude" in stream:
latitude = stream["latitude"]
longitude = stream["longitude"]
waypoint.Location = Location(latitude, longitude, None)
if waypoint.Location.Longitude == 0 and waypoint.Location.Latitude == 0:
waypoint.Location.Longitude = None
waypoint.Location.Latitude = None
if "elevation" in stream:
if not waypoint.Location:
waypoint.Location = Location(None, None, None)
waypoint.Location.Altitude = stream["elevation"]
if "distance" in stream:
waypoint.Distance = stream["distance"]
if "speed" in stream:
waypoint.Speed = stream["speed"]
waypoint.Type = WaypointType.Regular
lap.Waypoints.append(waypoint)
return activity
示例5: DownloadActivity
# 需要导入模块: from tapiriik.services.interchange import Lap [as 别名]
# 或者: from tapiriik.services.interchange.Lap import Waypoints [as 别名]
def DownloadActivity(self, svcRecord, activity):
if activity.ServiceData["Manual"]: # I should really add a param to DownloadActivity for this value as opposed to constantly doing this
# We've got as much information as we're going to get - we need to copy it into a Lap though.
activity.Laps = [Lap(startTime=activity.StartTime, endTime=activity.EndTime, stats=activity.Stats)]
return activity
activityID = activity.ServiceData["ActivityID"]
streamdata = self._requestWithAuth(lambda session: session.get("https://www.strava.com/api/v3/activities/" + str(activityID) + "/streams/time,altitude,heartrate,cadence,watts,temp,moving,latlng,distance,velocity_smooth"), svcRecord)
if streamdata.status_code == 401:
raise APIException("No authorization to download activity", block=True, user_exception=UserException(UserExceptionType.Authorization, intervention_required=True))
try:
streamdata = streamdata.json()
except:
raise APIException("Stream data returned is not JSON")
if "message" in streamdata and streamdata["message"] == "Record Not Found":
raise APIException("Could not find activity")
ridedata = {}
for stream in streamdata:
ridedata[stream["type"]] = stream["data"]
lap = Lap(stats=activity.Stats, startTime=activity.StartTime, endTime=activity.EndTime) # Strava doesn't support laps, but we need somewhere to put the waypoints.
activity.Laps = [lap]
lap.Waypoints = []
hasHR = "heartrate" in ridedata and len(ridedata["heartrate"]) > 0
hasCadence = "cadence" in ridedata and len(ridedata["cadence"]) > 0
hasTemp = "temp" in ridedata and len(ridedata["temp"]) > 0
hasPower = ("watts" in ridedata and len(ridedata["watts"]) > 0)
hasAltitude = "altitude" in ridedata and len(ridedata["altitude"]) > 0
hasDistance = "distance" in ridedata and len(ridedata["distance"]) > 0
hasVelocity = "velocity_smooth" in ridedata and len(ridedata["velocity_smooth"]) > 0
if "error" in ridedata:
raise APIException("Strava error " + ridedata["error"])
inPause = False
waypointCt = len(ridedata["time"])
for idx in range(0, waypointCt - 1):
waypoint = Waypoint(activity.StartTime + timedelta(0, ridedata["time"][idx]))
if "latlng" in ridedata:
latlng = ridedata["latlng"][idx]
waypoint.Location = Location(latlng[0], latlng[1], None)
if waypoint.Location.Longitude == 0 and waypoint.Location.Latitude == 0:
waypoint.Location.Longitude = None
waypoint.Location.Latitude = None
if hasAltitude:
if not waypoint.Location:
waypoint.Location = Location(None, None, None)
waypoint.Location.Altitude = float(ridedata["altitude"][idx])
# When pausing, Strava sends this format:
# idx = 100 ; time = 1000; moving = true
# idx = 101 ; time = 1001; moving = true => convert to Pause
# idx = 102 ; time = 2001; moving = false => convert to Resume: (2001-1001) seconds pause
# idx = 103 ; time = 2002; moving = true
if idx == 0:
waypoint.Type = WaypointType.Start
elif idx == waypointCt - 2:
waypoint.Type = WaypointType.End
elif idx < waypointCt - 2 and ridedata["moving"][idx+1] and inPause:
waypoint.Type = WaypointType.Resume
inPause = False
elif idx < waypointCt - 2 and not ridedata["moving"][idx+1] and not inPause:
waypoint.Type = WaypointType.Pause
inPause = True
if hasHR:
waypoint.HR = ridedata["heartrate"][idx]
if hasCadence:
waypoint.Cadence = ridedata["cadence"][idx]
if hasTemp:
waypoint.Temp = ridedata["temp"][idx]
if hasPower:
waypoint.Power = ridedata["watts"][idx]
if hasVelocity:
waypoint.Speed = ridedata["velocity_smooth"][idx]
if hasDistance:
waypoint.Distance = ridedata["distance"][idx]
lap.Waypoints.append(waypoint)
return activity