40 lines
1.2 KiB
C#
40 lines
1.2 KiB
C#
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<bool> CanExtractSongMetadataAsync(Uri songUri)
|
|
{
|
|
return this.CanValidateUri(songUri);
|
|
}
|
|
|
|
public override async Task<Song> 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;
|
|
}
|
|
} |