static void Main(string[] args) { // Configure OAuth2 access token for authorization: strava_oauth //Configuration.Default.AccessToken = "31a808cc0c54980db382e99ad2cc5bcfec97ebed"; /// ATHLETE DETAILS - WORKING - just need to update access_token try { var apiClient = new ApiClient(); apiClient.AccessToken = "1a8c919b477c0c7b03e218a41267636f80b6691e"; var apiInstance = new AthletesApi(apiClient); var result = apiInstance.GetLoggedInAthlete(); Debug.WriteLine(result); } catch (Exception ex) { Debug.Print("Exception when calling AthletesApi.GetLoggedInAthlete: " + ex.Message); } /// Activity DETAILS - update access_token with the current activity:read token try { var apiClientActivity = new ApiClient(); apiClientActivity.AccessToken = "17417ac5199f23d2904341aa48c234ed5e932812"; //activity:read token var apiInstance = new ActivitiesApi(apiClientActivity); var result = apiInstance.GetLoggedInAthleteActivities(null, null, page: 1, perPage: 30); float? distance = 0.0F; float? time = 0.0F; DateTime fromDate = DateTime.Parse("01/09/2019"); foreach (SummaryActivity activity in result) { if ((activity.Type.ToLower() == "ride") && (activity.Name.ToLower() != "spinning")) { if (activity.StartDate > fromDate) { distance += activity.Distance; time += activity.MovingTime; } } } Console.WriteLine(string.Format(@"Total distance on bike since {0:dd/MM/yyyy} is {1:0} km", fromDate, distance / 1000)); Console.WriteLine(string.Format(@"Total time on bike was {0:0.00} hrs", time / 3600)); } catch (Exception ex) { Debug.Print("Exception when calling ActivitiesApi.GetLoggedInAthleteActivities: " + ex.Message); } }
public static async Task GetActivityByIdAsync(int id) { //Получаем токен TokenModel token; token = Token.RenewToken(); Configuration.ApiKey.Add("access_token", token.Access_token); Configuration.ApiKey.Add("refresh_token", token.Refresh_token); Console.WriteLine(token.Access_token); //Подключаемся к БД string connString = "mongodb://192.168.1.200:27017"; MongoClient client = new(connString); IMongoDatabase mongoDatabase = client.GetDatabase("strava"); var apiInst = new ActivitiesApi(); var includeAllEffots = true; try { DetailedActivity result = apiInst.GetActivityById(id, includeAllEffots); var collection = mongoDatabase.GetCollection <GetActivity>("activities"); GetActivity getActivity = new() { Id = result.Id, Name = result.Name, Distance = result.Distance, Moving_time = result.MovingTime, Start_date_local = result.StartDateLocal, Average_speed = result.AverageSpeed, Max_speed = result.MaxSpeed, Average_temp = result.AverageSpeed, Workout_type = result.WorkoutType, Calories = result.Calories }; await collection.InsertOneAsync(getActivity); } catch (Exception e) { Console.WriteLine(e.Message); } }
public async Task <DetailedActivity> GetActivity(StravaToken token, long activityId) { try { await this.RefreshAccessTokenIfNeededAsync(token); var apiClient = new ApiClient { AccessToken = token.AccessToken }; var apiInstance = new ActivitiesApi(apiClient); return(apiInstance.GetActivityById(activityId, includeAllEfforts: false)); } catch (Exception) { // TODO: log error return(null); } }
public async Task <List <SummaryActivity> > GetAthleteActivites(StravaToken token, DateTimeOffset startTime, DateTimeOffset?endTime = null) { var allActivites = new List <SummaryActivity>(); var minActivityDateTime = startTime > ActivitiesMinDataTime ? startTime : ActivitiesMinDataTime; var maxActivityDateTime = endTime ?? DateTimeOffset.UtcNow; var minActivityEpochTime = (int)minActivityDateTime.ToUnixTimeSeconds(); var maxActivityEpochTime = (int)maxActivityDateTime.ToUnixTimeSeconds(); var pageNumber = 1; try { await this.RefreshAccessTokenIfNeededAsync(token); var apiClient = new ApiClient { AccessToken = token.AccessToken }; var apiInstance = new ActivitiesApi(apiClient); while (true) { var activites = apiInstance.GetLoggedInAthleteActivities(maxActivityEpochTime, minActivityEpochTime, pageNumber, StravaConsts.MaxApiRecordsPerPage); allActivites.AddRange(activites); if (activites.Count <= StravaConsts.MaxApiRecordsPerPage * 0.9) { break; } else { pageNumber++; } } } catch (Exception) { // TODO: log error throw; } return(allActivites); }
public void Init() { instance = new ActivitiesApi(); }
private static void GetRoutes(string accessToken, string folderPath) { Console.WriteLine($"Access Token: {accessToken}, folderPath: {folderPath}"); Configuration.AccessToken = accessToken; var activitiesApi = new ActivitiesApi(); var streamsApi = new StreamsApi(); var gpxFileSystem = new GpxFileSystem(folderPath); // Get all the activities for the logged in user var activities = activitiesApi.GetAllLoggedInAthleteActivities(); var polyLineCount = 0; for (var activityIndex = 0; activityIndex < activities.Count; activityIndex++) { var activity = activities[activityIndex]; try { var fileExists = File.Exists(gpxFileSystem.GetActivityFilePath(activity)); Console.WriteLine($" {activityIndex} {activity.Id} - {activity.Name}. ({activityIndex + 1} of {activities.Count}) - {(fileExists? "EXISTS" : "FETCH")}"); if (fileExists) { gpxFileSystem.Add(activity.Type, activity.Id.Value); continue; } //var latlng = streamsApi.GetActivityStreams(activity.Id, new List<string> { "latlng" }, true); if (!activity.StartDate.HasValue) { throw new Exception("Start Date not set on activity"); } var heatMapJson = new HeatMapJson() { ActivityType = activity.Type, Polyline = activity.Map.Polyline ?? activity.Map.SummaryPolyline, Name = activity.Name, StartDateTime = activity.StartDate }; if (activity.Map.Polyline != null) { polyLineCount++; } var json = JsonConvert.SerializeObject(heatMapJson); var activityJsonPath = gpxFileSystem.GetActivityFilePath(activity); File.WriteAllText(activityJsonPath, json); gpxFileSystem.Add(activity.Type, activity.Id.Value); } catch (Exception e) { Console.WriteLine($"ERROR: {activity.Id} - {activity.Name}. {e}"); } } Debug.WriteLine("Polyline: " + polyLineCount); var jsonFS = JsonConvert.SerializeObject(gpxFileSystem.FileSystem, Formatting.Indented); File.WriteAllText(gpxFileSystem.GetFileSystemPath(), jsonFS); }
public void Init() { instance = new ActivitiesApi(new TestConfig()); }
private void btnLoad_Click(object sender, EventArgs e) { _token = CStravaImporter.RenewToken(tbClient.Text, tbClientSecret.Text, tbRefreshToken.Text); if (Configuration.ApiKey.ContainsKey("access_token")) { Configuration.ApiKey.Remove("access_token"); } Configuration.ApiKey.Add("access_token", _token.access_token); if (Configuration.ApiKey.ContainsKey("refresh_token")) { Configuration.ApiKey.Remove("refresh_token"); } Configuration.ApiKey.Add("refresh_token", _token.refresh_token); log("Tokens Loaded"); _blRuntasticActivities = new BindingList <RuntasticActivity>(); dgvImport.DataSource = _blRuntasticActivities; int index = 0; String sPathSessions = Path.Combine(tbPath.Text, "Sport-sessions"); String sPathGps = Path.Combine(sPathSessions, "GPS-data"); String sPathSessionAlbums = Path.Combine(tbPath.Text, "Photos\\Images-meta-data\\Sport-session-albums"); String sPathPhotos = Path.Combine(tbPath.Text, "Photos"); foreach (string sSessionFilePath in Directory.GetFiles(sPathSessions)) { String sSessionFile = Path.GetFileName(sSessionFilePath); String sGpsFile = Path.Combine(sPathGps, Path.ChangeExtension(sSessionFile, "gpx")); String sPhotoFile = Path.ChangeExtension(sSessionFile, "json"); RuntasticActivity ac = Newtonsoft.Json.JsonConvert.DeserializeObject <RuntasticActivity>(System.IO.File.ReadAllText(sSessionFilePath), new EpochDateTimeConverter()); DetailedActivity resultActivity = null; index++; if (File.Exists(sGpsFile)) { try { Upload resultUpload; var file = File.OpenRead(sGpsFile); var apiUpload = new UploadsApi(); resultUpload = apiUpload.CreateUpload(file, null, null, null, null, "gpx", null); int timeOut = 0; do { System.Threading.Thread.Sleep(2000); resultUpload = apiUpload.GetUploadById(resultUpload.Id); System.Windows.Forms.Application.DoEvents(); if (30 < timeOut++) { MessageBox.Show("Timeout"); break; } }while ((resultUpload.Status.ToString().Contains("Your activity is still being processed."))); if ((resultUpload.Status.ToString().Contains("Your activity is ready."))) { logActivity(ac, Color.Green); log(index.ToString() + " -> " + resultUpload.ActivityId + " uploaded form:" + Path.GetFileName(file.Name)); } else { logActivity(ac, Color.Red); log(index.ToString() + " -> " + resultUpload.Status.ToString() + " " + Path.GetFileName(file.Name)); } System.Windows.Forms.Application.DoEvents(); } catch (Exception except) { log(index.ToString() + " -> " + except.Message); logActivity(ac, Color.Red); } } else { try { ActivitiesApi apiActivities = new ActivitiesApi(); var name = "Activity " + index; var type = "Run"; var startDateLocal = ac.created_at.ToString("yyyy-MM-dd-THH:mm:ssZ"); var elapsedTime = (int)(ac.duration / 1000); var distance = ac.distance; var photoIds = ""; resultActivity = apiActivities.CreateActivity(name, type, startDateLocal, elapsedTime, null, distance, null, photoIds, null); logActivity(ac, Color.Green); log(index.ToString() + " -> " + resultActivity.Name + " done manualy"); } catch (Exception except) { log(index.ToString() + " -> " + except.Message); logActivity(ac, Color.Red); } } } }