public async Task <WorkoutSessionMetrics> GetWorkoutMetricsAsync(RideDatum ride, ILogger logger, string SaveJsonPath = null) { using (var client = new WebClient()) { client.Headers["accept"] = "application/json"; string url = $"https://api.onepeloton.com/api/workout/{ride.id}/performance_graph?every_n=1"; if (logger != null) { logger.Log($"Downloading metrics for workout: {ride.ride.title} on {Util.DateTimeFromEpochSeconds(ride.device_time_created_at).ToShortDateString()}"); } var response = await client.DownloadStringTaskAsync(url); Debug.WriteLine(" " + response.Substring(0, 50)); Debug.WriteLine($" Length: {response.Length}"); if (logger != null) { logger.Log($"Done downloading"); } if (SaveJsonPath != null) { var formattedJson = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(response, JSonSerializerSettings), Formatting.Indented, JSonSerializerSettings); File.WriteAllText(SaveJsonPath, formattedJson); } WorkoutSessionMetrics session = JsonConvert.DeserializeObject <WorkoutSessionMetrics>(response, JSonSerializerSettings); return(session); } }
public void OutputRideCSV(WorkoutSessionMetrics session, string filename) { List <string> lines = new List <string>(); var header = "elapsed_seconds," + string.Join(",", session.metrics.Select(m => m.slug)); lines.Add(header); var metricLists = session.metrics.Select(m => m.values); for (int i = 0; i < session.seconds_since_pedaling_start.Count(); i++) { string line = session.seconds_since_pedaling_start[i] + "," + string.Join(",", metricLists.Select(m => m[i])); lines.Add(line); } File.WriteAllLines(filename, lines); }