/// <summary> /// Converts the weight filter object to the appropriate string. /// </summary> /// <param name="weight">The weight class.</param> /// <returns>The appropriate string for the specified weight class.</returns> public static String WeightFilterToString(WeightFilter weight) { switch (weight) { case WeightFilter.One: return("0-54"); case WeightFilter.Two: return("55-64"); case WeightFilter.Three: return("65-74"); case WeightFilter.Four: return("75-84"); case WeightFilter.Five: return("85-94"); case WeightFilter.Six: return("95_plus"); default: return(String.Empty); } }
/// <summary> /// Gets the leaderboard of a segment. You can use various filters to filter the data. /// Some of the filters require a Strava Premium account! /// </summary> /// <param name="segmentId">The Strava segment Id.</param> /// <param name="weight">The weight class used to filter the leaderboard.</param> /// <param name="age">The age group used to filter the leaderboard.</param> /// <param name="time">The time used to filter the leaderboard.</param> /// <param name="gender">The gender used to filter the leaderboard.</param> /// <returns>The leaderboard filtered by gender.</returns> public async Task<Leaderboard> GetSegmentLeaderboardAsync(String segmentId, WeightFilter weight, AgeFilter age, TimeFilter time, GenderFilter gender) { int page = 1; //Create one dummy request to get the number of entries. Leaderboard request = await GetSegmentLeaderboardAsync(segmentId, weight, age, time, gender, 1, 1); int totalAthletes = request.EntryCount; Leaderboard leaderboard = new Leaderboard { EffortCount = request.EffortCount, EntryCount = request.EntryCount }; while ((page - 1) * 200 < totalAthletes) { Leaderboard l = await GetSegmentLeaderboardAsync(segmentId, weight, age, time, gender, page++, 200); foreach (LeaderboardEntry entry in l.Entries) { leaderboard.Entries.Add(entry); } } return leaderboard; }
/// <summary> /// Gets the leaderboard of a segment. You can use various filters to filter the data. /// Some of the filters require a Strava Premium account! /// </summary> /// <param name="segmentId">The Strava segment Id.</param> /// <param name="following">The leaderboard only shows athletes you're following.</param> /// <param name="weight">The weight class used to filter the leaderboard.</param> /// <param name="age">The age group used to filter the leaderboard.</param> /// <param name="time">The time used to filter the leaderboard.</param> /// <param name="gender">The gender used to filter the leaderboard.</param> /// <returns>The leaderboard filtered by gender.</returns> public Leaderboard GetSegmentLeaderboard(string segmentId, bool following, WeightFilter weight, AgeFilter age, TimeFilter time, GenderFilter gender) { int page = 1; //Create one dummy request to get the number of entries. Leaderboard request = GetSegmentLeaderboard(segmentId, following, weight, age, time, gender, 1, 1); int totalAthletes = request.EntryCount; Leaderboard leaderboard = new Leaderboard { EffortCount = request.EffortCount, EntryCount = request.EntryCount }; while ((page - 1) * 200 < totalAthletes) { Leaderboard l = GetSegmentLeaderboard(segmentId, following, weight, age, time, gender, page++, 200); foreach (LeaderboardEntry entry in l.Entries) { leaderboard.Entries.Add(entry); } } return(leaderboard); }
public async Task <Leaderboard> GetSegmentLeaderboardAsync(string segmentId, WeightFilter weight, AgeFilter age, TimeFilter time, GenderFilter gender, int page, int perPage) { bool useGender = false; bool useTime = false; bool useAge = false; bool useWeight = false; string genderFilter = string.Empty; string timeFilter = string.Empty; string ageFilter = string.Empty; string weightFilter = string.Empty; if (!string.IsNullOrEmpty(StringConverter.GenderFilterToString(gender))) { genderFilter = $"gender={StringConverter.GenderFilterToString(gender)}"; useGender = true; } if (!string.IsNullOrEmpty(StringConverter.TimeFilterToString(time))) { timeFilter = $"date_range={StringConverter.TimeFilterToString(time)}"; useTime = true; } if (!string.IsNullOrEmpty(StringConverter.AgeFilterToString(age))) { ageFilter = $"age_group={StringConverter.AgeFilterToString(age)}"; useAge = true; } if (!string.IsNullOrEmpty(StringConverter.WeightFilterToString(weight))) { weightFilter = $"weight_class={StringConverter.WeightFilterToString(weight)}"; useWeight = true; } string getUrl = string.Format("{0}/{1}/leaderboard?{2}&{3}&{4}&{5}&page={6}&per_page={7}&access_token={8}", "https://www.strava.com/api/v3/segments", segmentId, useGender ? genderFilter : string.Empty, useTime ? timeFilter : string.Empty, useAge ? ageFilter : string.Empty, useWeight ? weightFilter : string.Empty, page, perPage, Authentication.AccessToken); return(Unmarshaller <Leaderboard> .Unmarshal(await WebRequest.SendGetAsync(new Uri(getUrl)))); }
public void Elect() { var readDataSources = Enumerable.Range(1, 100).Select(m => new ReadDataSource { Name = m.ToString(), Weight = m }); var inWeightSources = readDataSources.Select(readDataSource => new WeightFilter <ReadDataSource> .WeightSource { Source = readDataSource, Weight = readDataSource.Weight }); WeightFilter <ReadDataSource> weightFilter = new WeightFilter <ReadDataSource>(); var choiced = weightFilter.Elect(inWeightSources); }
/// <summary> /// Gets the leaderboard of a segment. You can use various filters to filter the data. /// Some of the filters require a Strava Premium account! /// </summary> /// <param name="segmentId">The Strava segment Id.</param> /// <param name="following">The leaderboard only shows athletes you're following.</param> /// <param name="weight">The weight class used to filter the leaderboard.</param> /// <param name="age">The age group used to filter the leaderboard.</param> /// <param name="time">The time used to filter the leaderboard.</param> /// <param name="gender">The gender used to filter the leaderboard.</param> /// <param name="page">The result page.</param> /// <param name="perPage">Efforts shown per page.</param> /// <returns>The leaderboard filtered by gender.</returns> public Leaderboard GetSegmentLeaderboard(string segmentId, bool following, WeightFilter weight, AgeFilter age, TimeFilter time, GenderFilter gender, int page, int perPage) { bool useGender = false; bool useTime = false; bool useAge = false; bool useWeight = false; string genderFilter = string.Empty; string timeFilter = string.Empty; string ageFilter = string.Empty; string weightFilter = string.Empty; if (!string.IsNullOrEmpty(StringConverter.GenderFilterToString(gender))) { genderFilter = string.Format("gender={0}", StringConverter.GenderFilterToString(gender)); useGender = true; } if (!string.IsNullOrEmpty(StringConverter.TimeFilterToString(time))) { timeFilter = string.Format("date_range={0}", StringConverter.TimeFilterToString(time)); useTime = true; } if (!string.IsNullOrEmpty(StringConverter.AgeFilterToString(age))) { ageFilter = string.Format("age_group={0}", StringConverter.AgeFilterToString(age)); useAge = true; } if (!string.IsNullOrEmpty(StringConverter.WeightFilterToString(weight))) { weightFilter = string.Format("weight_class={0}", StringConverter.WeightFilterToString(weight)); useWeight = true; } string getUrl = string.Format("{0}/{1}/leaderboard?{2}&{3}&{4}&{5}&following={6}&page={7}&per_page={8}&access_token={9}", Endpoints.Leaderboard, segmentId, useGender ? genderFilter : string.Empty, useTime ? timeFilter : string.Empty, useAge ? ageFilter : string.Empty, useWeight ? weightFilter : string.Empty, following, page, perPage, AuthSettings.ScopeAccessToken ); string json = HttpHelper.GetRequest(getUrl); return(Unmarshaller <Leaderboard> .Unmarshal(json)); }
public Leaderboard GetSegmentLeaderboard(string segmentId, bool following, WeightFilter weight, AgeFilter age, TimeFilter time, GenderFilter gender) { int num = 1; Leaderboard segmentLeaderboard = GetSegmentLeaderboard(segmentId, following, weight, age, time, gender, 1, 1); int entryCount = segmentLeaderboard.EntryCount; Leaderboard leaderboard = new Leaderboard { EffortCount = segmentLeaderboard.EffortCount, EntryCount = segmentLeaderboard.EntryCount }; while ((num - 1) * 200 < entryCount) { Leaderboard segmentLeaderboard2 = GetSegmentLeaderboard(segmentId, following, weight, age, time, gender, num++, 200); foreach (LeaderboardEntry entry in segmentLeaderboard2.Entries) { leaderboard.Entries.Add(entry); } } return(leaderboard); }
public async Task <Leaderboard> GetSegmentLeaderboardAsync(string segmentId, WeightFilter weight, AgeFilter age, TimeFilter time, GenderFilter gender) { int page = 1; Leaderboard request = await GetSegmentLeaderboardAsync(segmentId, weight, age, time, gender, 1, 1); int totalAthletes = request.EntryCount; Leaderboard leaderboard = new Leaderboard { EffortCount = request.EffortCount, EntryCount = request.EntryCount }; while ((page - 1) * 200 < totalAthletes) { foreach (LeaderboardEntry entry in (await GetSegmentLeaderboardAsync(segmentId, weight, age, time, gender, page++, 200)).Entries) { leaderboard.Entries.Add(entry); } } return(leaderboard); }
public Leaderboard GetSegmentLeaderboard(string segmentId, bool following, WeightFilter weight, AgeFilter age, TimeFilter time, GenderFilter gender, int page, int perPage) { bool flag = false; bool flag2 = false; bool flag3 = false; bool flag4 = false; string text = string.Empty; string text2 = string.Empty; string text3 = string.Empty; string text4 = string.Empty; if (!string.IsNullOrEmpty(StringConverter.GenderFilterToString(gender))) { text = $"gender={StringConverter.GenderFilterToString(gender)}"; flag = true; } if (!string.IsNullOrEmpty(StringConverter.TimeFilterToString(time))) { text2 = $"date_range={StringConverter.TimeFilterToString(time)}"; flag2 = true; } if (!string.IsNullOrEmpty(StringConverter.AgeFilterToString(age))) { text3 = $"age_group={StringConverter.AgeFilterToString(age)}"; flag3 = true; } if (!string.IsNullOrEmpty(StringConverter.WeightFilterToString(weight))) { text4 = $"weight_class={StringConverter.WeightFilterToString(weight)}"; flag4 = true; } string uriString = string.Format("{0}/{1}/leaderboard?{2}&{3}&{4}&{5}&following={6}&page={7}&per_page={8}&access_token={9}", "https://www.strava.com/api/v3/segments", segmentId, flag ? text : string.Empty, flag2 ? text2 : string.Empty, flag3 ? text3 : string.Empty, flag4 ? text4 : string.Empty, following, page, perPage, Authentication.AccessToken); string json = WebRequest.SendGet(new Uri(uriString)); return(Unmarshaller <Leaderboard> .Unmarshal(json)); }
/// <summary> /// Converts the weight filter object to the appropriate string. /// </summary> /// <param name="weight">The weight class.</param> /// <returns>The appropriate string for the specified weight class.</returns> public static String WeightFilterToString(WeightFilter weight) { switch (weight) { case WeightFilter.One: return "0-54"; case WeightFilter.Two: return "55-64"; case WeightFilter.Three: return "65-74"; case WeightFilter.Four: return "75-84"; case WeightFilter.Five: return "85-94"; case WeightFilter.Six: return "95_plus"; default: return String.Empty; } }
/// <summary> /// Gets the leaderboard of a segment. You can use various filters to filter the data. /// Some of the filters require a Strava Premium account! /// </summary> /// <param name="segmentId">The Strava segment Id.</param> /// <param name="weight">The weight class used to filter the leaderboard.</param> /// <param name="age">The age group used to filter the leaderboard.</param> /// <param name="time">The time used to filter the leaderboard.</param> /// <param name="gender">The gender used to filter the leaderboard.</param> /// <param name="page">The result page.</param> /// <param name="perPage">Efforts shown per page.</param> /// <returns>The leaderboard filtered by gender.</returns> public async Task<Leaderboard> GetSegmentLeaderboardAsync(String segmentId, WeightFilter weight, AgeFilter age, TimeFilter time, GenderFilter gender, int page, int perPage) { bool useGender = false; bool useTime = false; bool useAge = false; bool useWeight = false; String genderFilter = String.Empty; String timeFilter = String.Empty; String ageFilter = String.Empty; String weightFilter = String.Empty; if (!String.IsNullOrEmpty(StringConverter.GenderFilterToString(gender))) { genderFilter = String.Format("gender={0}", StringConverter.GenderFilterToString(gender)); useGender = true; } if (!String.IsNullOrEmpty(StringConverter.TimeFilterToString(time))) { timeFilter = String.Format("date_range={0}", StringConverter.TimeFilterToString(time)); useTime = true; } if (!String.IsNullOrEmpty(StringConverter.AgeFilterToString(age))) { ageFilter = String.Format("age_group={0}", StringConverter.AgeFilterToString(age)); useAge = true; } if (!String.IsNullOrEmpty(StringConverter.WeightFilterToString(weight))) { weightFilter = String.Format("weight_class={0}", StringConverter.WeightFilterToString(weight)); useWeight = true; } String getUrl = String.Format("{0}/{1}/leaderboard?{2}&{3}&{4}&{5}&page={6}&per_page={7}&access_token={8}", Endpoints.Leaderboard, segmentId, useGender ? genderFilter : String.Empty, useTime ? timeFilter : String.Empty, useAge ? ageFilter : String.Empty, useWeight ? weightFilter : String.Empty, page, perPage, Authentication.AccessToken ); String json = await WebRequest.SendGetAsync(new Uri(getUrl)); return Unmarshaller<Leaderboard>.Unmarshal(json); }
public void WeightFilterTest() { var building = new Building { Id = new Guid(), Description = "Test", Name = "Test", ShortCut = "Test" }; var currentLock = new Lock { Id = new Guid(), Description = "TestDescription", Name = "TestName", BuildingId = building.Id, Building = building, Floor = "TestFloor", RoomNumber = "TestRoomNumber", SerialNumber = "TestSerialNumber", Type = "TestType" }; var group = new Group { Id = new Guid(), Description = "TestGroupDescription", Name = "TestGroupName", }; var medium = new Medium { Id = new Guid(), Description = "TestDescription", SerialNumber = "TestSerialNumber", Type = "TestType", Group = group, GroupId = group.Id, Owner = "TestOwner" }; var elements = new List <Element> { building, currentLock, group, medium }; var weightFilter = new WeightFilter(); weightFilter.SetElements(elements); var result = weightFilter.Filter("test"); Assert.Equal(428, result.Sum(x => x.Weight)); Assert.Equal(210, result[0].Weight); Assert.Equal(169, result[1].Weight); Assert.Equal(35, result[2].Weight); Assert.Equal(14, result[3].Weight); }
public IHttpActionResult SaveWeight(WeightFilter request) { var response = service.SaveWeight(request); return(Ok(response)); }