protected override async Task<List<MatchSong>> InternalGetSongsAsync(string title, string artist, int limit = 10) { using (var response = await new Mp3FreexSearchRequest(title.Append(artist)).ToResponseAsync().DontMarshall() ) { if (!response.HasData) return null; var songNodes = response.Data.DocumentNode.Descendants("div") .Where(p => p.Attributes["class"]?.Value.Contains("actl") ?? false).Take(limit); var songs = new List<MatchSong>(); foreach (var songNode in songNodes) { var song = new MatchSong(); var songTitle = songNode.Descendants("span") .FirstOrDefault(p => p.Attributes["class"]?.Value == "res_title")? .InnerText; if (string.IsNullOrEmpty(songTitle)) continue; song.SetNameAndArtistFromTitle(WebUtility.HtmlDecode(songTitle), true); var meta = songNode.Descendants("span") .FirstOrDefault(p => p.Attributes["class"]?.Value == "label label-info")? .InnerText; if (!string.IsNullOrEmpty(meta)) { var duration = meta.Substring(0, meta.IndexOf("|", StringComparison.Ordinal)).Trim(); var seconds = int.Parse(duration.Substring(duration.Length - 2, 2)); var minutes = int.Parse(duration.Remove(duration.Length - 3)); song.Duration = new TimeSpan(0, 0, minutes, seconds); int bitrate; if (int.TryParse(meta.Substring(meta.IndexOf("|", StringComparison.Ordinal) + 1).Replace("kbps", ""), out bitrate)) { song.BitRate = bitrate; } } var linkNode = songNode.Descendants("a") .FirstOrDefault(p => p.Attributes["class"]?.Value.Contains("mp3download") ?? false); var url = linkNode?.Attributes["data-online"]?.Value; if (string.IsNullOrEmpty(url)) continue; song.AudioUrl = await GetAudioUrlAsync(url).DontMarshall(); if (string.IsNullOrEmpty(song.AudioUrl)) continue; songs.Add(song); } return songs; } }
public void SetNameAndArtistFromTitle() { var match = new MatchSong(); match.SetNameAndArtistFromTitle("Childish Gambino - 3005", true); Assert.AreEqual(match.Title, "3005"); Assert.AreEqual(match.Artist, "Childish Gambino"); }
protected override async Task<List<MatchSong>> InternalGetSongsAsync(string title, string artist, int limit = 10) { using (var resp = await new AnyMazaSearchRequest(title.Append(artist)).ToResponseAsync()) { if (!resp.HasData) return null; var songs = new List<MatchSong>(); foreach (var googleResult in resp.Data.ResponseData.Results) { var song = new MatchSong(); if (!googleResult.Url.StartsWith("http://anymaza.com/music/")) continue; song.SetNameAndArtistFromTitle(googleResult.TitleNoFormatting.Remove(googleResult.TitleNoFormatting.LastIndexOf(artist, StringComparison.Ordinal) + artist.Length).Replace(" By ", " - "), false); using (var anymazaResp = await googleResult.Url.ToUri().GetAsync()) { if (!anymazaResp.IsSuccessStatusCode) continue; var document = await anymazaResp.ParseHtmlAsync(); var duration = document.DocumentNode.Descendants("center").FirstOrDefault()?.InnerText; //Category: Justin Bieber - Purpose ( Deluxe Edition ) Duration: 3:28 sec Singer : Justin Bieber if (!string.IsNullOrEmpty(duration)) { duration = duration.Substring(duration.IndexOf("Duration:", StringComparison.Ordinal) + 9); duration = duration.Remove(duration.LastIndexOf("sec", StringComparison.Ordinal)).Trim(); TimeSpan dur; if (TimeSpan.TryParse("00:" + duration, out dur)) { song.Duration = dur; } } var link = document.DocumentNode.Descendants("a") .FirstOrDefault(p => p.Attributes["class"]?.Value == "dowbutzip")?.Attributes["href"]?.Value; if (string.IsNullOrEmpty(link)) continue; if (link.StartsWith("/")) song.AudioUrl = "http://anymaza.com" + link; else song.AudioUrl = link; } songs.Add(song); } return songs; } }
protected override async Task<List<MatchSong>> InternalGetSongsAsync(string title, string artist, int limit = 10) { using (var response = await new Mp3GluSearchRequest(title.Append(artist)).ToResponseAsync().DontMarshall() ) { if (!response.HasData) return null; var songNodes = response.Data.DocumentNode.Descendants("div") .Where(p => p.Attributes["class"]?.Value.Contains("result_list") ?? false).Take(limit); var songs = new List<MatchSong>(); foreach (var songNode in songNodes) { var song = new MatchSong(); var detailsNode = songNode.Descendants("em").FirstOrDefault(); var duration = detailsNode.InnerText.Substring(0, detailsNode.InnerText.IndexOf("min ", StringComparison.Ordinal)); if (!string.IsNullOrEmpty(duration)) { duration = duration.Replace("Duration : ", "").Trim(); var seconds = int.Parse(duration.Substring(duration.Length - 2, 2)); var minutes = int.Parse(duration.Remove(duration.Length - 3)); song.Duration = new TimeSpan(0, 0, minutes, seconds); } var songTitle = songNode.Descendants("strong").FirstOrDefault()?.InnerText; if (string.IsNullOrEmpty(songTitle)) continue; song.SetNameAndArtistFromTitle(WebUtility.HtmlDecode(songTitle.Substring(0, songTitle.Length - 4)).Trim(), true); var linkNode = songNode.Descendants("a") .FirstOrDefault(); song.AudioUrl = linkNode?.Attributes["href"]?.Value; if (string.IsNullOrEmpty(song.AudioUrl)) continue; songs.Add(song); } return songs; } }