/// <summary> /// Creates REST client, connects, and fetches top artists from a user /// </summary> /// <param name="accessToken">Required. A valid access token from the Spotify Accounts service</param> /// <param name="time_range">Optional. Over what time frame the affinities are computed. Valid values: long_term (calculated from several years of data and including all new data as it becomes available), medium_term (approximately last 6 months), short_term (approximately last 4 weeks). Default: medium_term.</param> /// <returns>IEnumerable of Artists</returns> private static async Task <IEnumerable <Artist> > GetTopArtistsAsync(string accessToken, string time_range) { client.DefaultRequestHeaders.Clear(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/vnd.github.v3+json")); client.DefaultRequestHeaders.Add("Authorization", $"Bearer {accessToken}"); var result = client.GetStringAsync($"https://api.spotify.com/v1/me/top/artists?time_range={time_range}&limit=50").Result; var topArtists = TopArtists.FromJson(result); var allTopArtists = new HashSet <Artist>(); allTopArtists.UnionWith(topArtists.Artists); while (topArtists.Next != null) { result = await client.GetStringAsync(topArtists.Next); topArtists = TopArtists.FromJson(result); allTopArtists.UnionWith(topArtists.Artists); } return(allTopArtists); }
public async Task <IResult <List <TopArtists> > > GetTop100Artistas(string tipo, int mes, int ano) { try { var url = $"{VagalumeApiConstants.TOP100_ARTISTAS_URL}{ProviderHelper.TratarParametrosTop100(tipo, mes, ano)}"; var html = await ProviderHelper.GetDefaultHtmlText(url, _httpRequestProcessor); var htmlDoc = new HtmlDocument(); htmlDoc.LoadHtml(html); List <TopArtists> result = new List <TopArtists>(); var htmlBody = htmlDoc.GetElementbyId("top100Page"); var olElem = htmlBody.Descendants("ol").Where(c => c.GetAttributeValue("class", "").Equals("topCard")).ToList(); foreach (HtmlNode li in olElem[0].ChildNodes) { HtmlNode topPosition = li.ChildNodes.Where(c => c.Name == "div").FirstOrDefault(); var position = topPosition.ChildNodes.Where(c => c.Name == "p").FirstOrDefault()?.InnerText?.ToString()?.Trim(); HtmlNode cardCenterCol = li.ChildNodes.Where(c => c.Name == "div").LastOrDefault(); HtmlNode aElem = cardCenterCol.ChildNodes.Where(c => c.Name == "div").FirstOrDefault().ChildNodes.Where(x => x.Name == "a").FirstOrDefault(); var link = aElem.Attributes.Where(c => c.Name == "href").FirstOrDefault()?.Value?.Trim(); var name = cardCenterCol.Descendants("a").Where(c => c.GetAttributeValue("class", "").Equals("w1 h22")).FirstOrDefault()?.InnerText?.Trim(); HtmlNode pictureElem = aElem.ChildNodes.Where(c => c.Name == "picture").FirstOrDefault(); var webp = pictureElem.ChildNodes.Where(c => c.Name == "source").FirstOrDefault()?.Attributes.Where(c => c.Name == "srcset").FirstOrDefault()?.Value; var img = pictureElem.ChildNodes.Where(c => c.Name == "img").FirstOrDefault()?.Attributes.Where(c => c.Name == "src").FirstOrDefault()?.Value; if (webp == null) { webp = pictureElem.ChildNodes.Where(c => c.Name == "source").FirstOrDefault()?.Attributes.Where(c => c.Name == "data-src").FirstOrDefault()?.Value; } if (img == null) { img = pictureElem.ChildNodes.Where(c => c.Name == "img").FirstOrDefault()?.Attributes.Where(c => c.Name == "data-src").FirstOrDefault()?.Value; } TopArtists TopArtists = new TopArtists() { Position = position, Name = name, Url = link, Art = link.Split('/')[1], FotoArtista = new FotoArtista { Webp = webp, Url = img } }; result.Add(TopArtists); } return(Result.Success(result)); } catch (Exception ex) { return(Result.Fail <List <TopArtists> >(ex.Message)); } }