using AngleSharp; using AngleSharp.Dom; public class YoutubeMusicValidator : UriBasedSongValidatorBase { public override string UriValidatorRegex => @"^(https?://)?(music\.youtube\.com/watch\?v=|youtu\.be/)([a-zA-Z0-9_-]{11})"; public override async Task CanExtractSongMetadataAsync(Uri songUri) { return this.CanValidateUri(songUri); } public override async Task ValidateAsync(Uri songUri) { var title = string.Empty; var artist = string.Empty; using(HttpClient httpClient = new HttpClient()) { var response = await httpClient.GetAsync(songUri); var config = Configuration.Default.WithDefaultLoader(); var context = BrowsingContext.New(config); using(var document = await context.OpenAsync(async req => req.Content(await response.Content.ReadAsStringAsync()))) { // document.getElementsByTagName("ytmusic-player-queue-item")[0].getElementsByClassName("song-title")[0].innerHTML title = document.QuerySelector(".ytmusic-player-queue-item")?.QuerySelector(".song-title")?.InnerHtml; // document.getElementsByTagName("ytmusic-player-queue-item")[0].getElementsByClassName("byline")[0].innerHTML artist = document.QuerySelector(".ytmusic-player-queue-item")?.QuerySelector(".byline")?.InnerHtml; } } var song = new Song { Name = title, Artist = artist, Url = songUri.ToString(), Provider = SongProvider.YouTube, SpotifyId = this.LookupSpotifyId(title, artist) }; return song; } }