コード例 #1
0
ファイル: MetaEndpoint.cs プロジェクト: michel-pi/muzlan-dl
        public async ValueTask <MuzlanResponse <IList <ArtistRecord> > > ListPopularArtists(CancellationToken token = default)
        {
            var pageUri = _baseUri;

            try
            {
                var content = await _client.TryGetStringAsync(pageUri, token).ConfigureAwait(false);

                using var document = await _parser.ParseDocumentAsync(content, token).ConfigureAwait(false);

                var artists = new List <ArtistRecord>();

                foreach (var artistElement in document.QuerySelectorAll <IHtmlDivElement>("div.page-content div.row-col div div.padding div.row div div.item"))
                {
                    var anchor = artistElement.QuerySelector <IHtmlAnchorElement>("div.item-info div.item-title.text-ellipsis a");
                    var image  = artistElement.QuerySelector <IHtmlImageElement>("div.item-media a.item-media-content img.lazy.img-responsive");

                    var name = anchor.Text.Trim();

                    var artistUri = new Uri($"https://{_baseUri.DnsSafeHost}/artist/{Uri.EscapeDataString(name)}");
                    var searchUri = new Uri($"https://{_baseUri.DnsSafeHost}{anchor.PathName}");
                    var imageUri  = new Uri($"https://{_baseUri.DnsSafeHost}{image.Dataset["original"]}");

                    var artist = new ArtistRecord(name, artistUri, searchUri, imageUri);

                    artists.Add(artist);
                }

                return(MuzlanResponse <IList <ArtistRecord> > .FromResult(artists, pageUri));
            }
            catch (Exception ex)
            {
                return(MuzlanResponse <IList <ArtistRecord> > .FromException(ex, pageUri));
            }
        }
コード例 #2
0
        public async ValueTask <MuzlanResponse <IList <SearchArtistRecord> > > FindArtists(
            string query,
            CancellationToken token = default)
        {
            var pageUri = new Uri($"https://{_baseUri.DnsSafeHost}/search/{Uri.EscapeDataString(query)}");

            try
            {
                var content = await _client.TryGetStringAsync(
                    pageUri,
                    token).ConfigureAwait(false);

                using var document = await _parser.ParseDocumentAsync(content, token).ConfigureAwait(false);

                var artists = new List <SearchArtistRecord>();

                foreach (var artistElement in document.QuerySelectorAll <IHtmlDivElement>("div.page-content div.row-col div.row.item-list:not(#search-result-items)"))
                {
                    var imageElement       = artistElement.QuerySelector <IHtmlAnchorElement>("div.item-media a.item-media-content");
                    var titleElement       = artistElement.QuerySelector <IHtmlAnchorElement>("div.item-info div.item-title.text-ellipsis a");
                    var descriptionElement = artistElement.QuerySelector <IHtmlDivElement>("div.item-info div.item-except");

                    var artistName      = titleElement.Text.Trim();
                    var artistUri       = new Uri($"https://{_baseUri.DnsSafeHost}/artist/{Uri.EscapeDataString(query)}");
                    var artistSearchUri = new Uri($"https://{_baseUri.DnsSafeHost}/search/{Uri.EscapeDataString(query)}");

                    var match = _bgImageRegex.Match(imageElement.OuterHtml);

                    var artistImageUri = new Uri($"https://{_baseUri.DnsSafeHost}{match.Groups[1].Value}");

                    var description = string.IsNullOrEmpty(descriptionElement.TextContent)
                        ? string.Empty
                        : descriptionElement.TextContent.Trim();

                    var tags = new List <TagRecord>();

                    foreach (var tagElement in artistElement.QuerySelectorAll <IHtmlAnchorElement>("div.item-info div.item-meta a.btn"))
                    {
                        var tagName = tagElement.Text.Trim();
                        var tagUri  = new Uri($"https://{_baseUri.DnsSafeHost}{tagElement.PathName}");

                        tags.Add(new TagRecord(tagName, tagUri));
                    }

                    var artist = new ArtistRecord(artistName, artistUri, artistSearchUri, artistImageUri);

                    artists.Add(new SearchArtistRecord(artist, tags, description));
                }

                return(MuzlanResponse <IList <SearchArtistRecord> > .FromResult(artists, pageUri));
            }
            catch (Exception ex)
            {
                return(MuzlanResponse <IList <SearchArtistRecord> > .FromException(ex, pageUri));
            }
        }