protected override void GetLyricsInternal(Media media) { var urlArtist = media.Artist.Replace(' ', '-'); var urlSong = media.Song.Replace(' ', '-'); var url = $"http://genius.com/{urlArtist}-{urlSong}-lyrics"; media.Url = url; HtmlDocument doc; try { var web = new HtmlWeb(); doc = web.Load(url); } catch (Exception ex) { throw ServiceNotAvailableException.Create(ServiceName, media, ex); } var lyricDivs = doc.DocumentNode.Descendants("div").Where(n => (n as HtmlNode).HasClass("lyrics")).ToList(); if (!lyricDivs.Any()) { throw LyricsNotFoundException.Create(ServiceName, media); } if (lyricDivs.Count > 1) { //todo: Do we need to select one in this case? Console.WriteLine("todo.."); } var lyricNode = lyricDivs.First(); var lyrics = lyricNode.InnerText; media.Lyrics = lyrics; }
protected override void GetLyricsInternal(Media media) { const string userAgent = "curl/7.9.8 (i686-pc-linux-gnu) libcurl 7.9.8 (OpenSSL 0.9.6b) (ipv6 enabled)"; var artist = media.Artist.Replace(' ', '-'); var song = media.Song.Replace(' ', '-'); var url = $"https://www.musixmatch.com/search/{artist}-{song}/tracks"; media.Url = url; string html; try { html = HttpHelpers.GetHtml(url, userAgent); } catch (Exception ex) { throw ServiceNotAvailableException.Create(ServiceName, media, ex); } var rgx = new Regex(@"""track_share_url"":""([^""]*)"""); if (!rgx.IsMatch(html)) { throw LyricsNotFoundException.Create(ServiceName, media); } var trackShareUrl = rgx.Match(html).Groups[1].Value; trackShareUrl = Regex.Unescape(trackShareUrl); media.Url = trackShareUrl; //unsure about this one HtmlDocument doc = new HtmlDocument(); try { html = HttpHelpers.GetHtml(trackShareUrl, userAgent); doc.LoadHtml(html); } catch (Exception ex) { throw ServiceNotAvailableException.Create(ServiceName, media, ex); } var notAvailable = doc.DocumentNode.Descendants("div").Any(n => (n as HtmlNode).HasClass("mxm-lyrics-not-available")); if (notAvailable) { throw LyricsNotFoundException.Create(ServiceName, media); } var lyrics = doc.DocumentNode.OuterHtml.Split(new[] { "\"body\":\"" }, StringSplitOptions.None)[1].Split(new[] { "\",\"language\":\"" }, StringSplitOptions.None)[0]; lyrics = lyrics.Replace("\\n", Environment.NewLine).Replace("\\", ""); media.Lyrics = lyrics; }
public Media GetLyrics(Media media) { if (!_lyricsCache.ContainsKey(media.Artist + media.Song)) { if (_notFound.ContainsKey(media.Artist + media.Song)) { throw LyricsNotFoundException.Create(ServiceName, _notFound[media.Artist + media.Song]); } try { GetLyricsInternal(media); } catch { _notFound[media.Artist + media.Song] = media; throw; } media.Lyrics = media.Lyrics.Replace("&", "&").Replace("`", "'").Trim(); _lyricsCache.Add(media.Artist + media.Song, media); } return(_lyricsCache[media.Artist + media.Song]); }