using System.Text.RegularExpressions; using AngleSharp; using AngleSharp.Dom; using AngleSharp.Html.Dom; public class SpotifyValidator : UriBasedSongValidatorBase { public override string UriValidatorRegex => @"^(https?://)?open.spotify.com/track/([a-zA-Z0-9_-]{22})(\?si=[a-zA-Z0-9_-]+)?$"; private SpotifyApiClient spotifyApiClient; public SpotifyValidator() { spotifyApiClient = new SpotifyApiClient(); } public override async Task CanExtractSongMetadataAsync(Uri songUri) { return this.CanValidateUri(songUri); } public override async Task ValidateAsync(Uri songUri) { var regexp = new Regex(UriValidatorRegex, RegexOptions.IgnoreCase); var trackIdMatch = regexp.Match(songUri.ToString()).Groups[2].Value; var track = await spotifyApiClient.GetTrackByIdAsync(trackIdMatch); var song = new Song { Name = track.Name, Artist = track.Artists.FirstOrDefault()?.Name ?? "Unknown Artist", Url = songUri.ToString(), Provider = SongProvider.Spotify, SpotifyId = trackIdMatch }; return song; } }