/// <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));
            }
        }