Exemplo n.º 1
0
        public async Task <ArtistInfo> GetArtistInfo(string name)
        {
            var artistInfo = new ArtistInfo();

            _artistUri = new Uri(_client.BaseAddress, $"/{name}");
            var response = await _client.GetStringAsync($"/{name}");

            if (response.Contains("Not found"))
            {
                return(null);
            }

            var parser   = new HtmlParser();
            var document = parser.Parse(response);

            artistInfo.Name = document.QuerySelector(".profile-bar__image").GetAttribute("alt");
            foreach (var playerTrackElement in document.QuerySelectorAll("#tracks-container > .player-track"))
            {
                var trackNameElement = playerTrackElement.QuerySelector(".player-track__name");
                if (trackNameElement == null)
                {
                    continue;
                }

                var bareTrackInfo = new BareTrackInfo(_client, _artistUri);
                bareTrackInfo.Name = trackNameElement.TextContent;
                bareTrackInfo.Id   = playerTrackElement.GetAttribute("id").Replace("track", string.Empty);
                artistInfo.BareTrackInfos.Add(bareTrackInfo);
            }
            return(artistInfo);
        }
Exemplo n.º 2
0
        private async Task GetTrackThenDownload(string directoryPath, BareTrackInfo bareTrackInfo)
        {
            var trackInfo = await bareTrackInfo.GetTrackInfo();

            var fileName = Path.Combine(directoryPath, SanitizeHelper.ForFileName(trackInfo.Name) + ".mp3");
            var data     = await _provider.GetDownloadAsByteArray(trackInfo);

            using (FileStream sourceStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None, bufferSize: 4096, useAsync: true))
                await sourceStream.WriteAsync(data, 0, data.Length);
        }