private SMTrackTitle GetTrackTitle(string web) { SMTrackTitle tracktitle = new SMTrackTitle(); Regex regex = new Regex(@"<h2 class=""sub-head"">(?'match'[^<]+)<", RegexOptions.Compiled); Match match = regex.Match(web); if (match.Success) { string title = WebUtility.HtmlDecode(match.Groups["match"].Value.Trim()); string[] remixes = { "version", "remix", "rmx", "edit", "unplugged", "mix", "demo", "outtake", "remaster", "explicit", "7\"", "12\"", "b-side", "original", "capella", "session", "acoustic", "cut", "akustik", "dub", "akustisch", "clean", "altered", "alternate", "explicit" }; if (title.EndsWith("]")) { tracktitle.Remix = title.Substring(title.LastIndexOf('[') + 1, title.Length - title.LastIndexOf('[') - 2).Trim(); title = title.Substring(0, title.LastIndexOf('[')).Trim(); } while (title.EndsWith(")")) { string test = title.Substring(title.LastIndexOf('(') + 1, title.LastIndexOf(')') - title.LastIndexOf('(') - 1).Trim(); title = title.Substring(0, title.LastIndexOf('(')).Trim(); bool found = false; if (!string.IsNullOrEmpty(tracktitle.Remix)) { tracktitle.Subtitle = test; found = true; } if (!found) { foreach (string remix in remixes) { if (test.ToLower().Contains(remix)) { tracktitle.Remix = test; found = true; break; } } } if (!found) { tracktitle.Subtitle = test; } } tracktitle.Title = title; } return(tracktitle); }
// private functions private async Task <PluginTrackInformation> GetTrack(PluginTrackPayload trackInfo, int maxTracks, CancellationToken ct) { PluginTrackInformation track = new PluginTrackInformation(); string ver = "2.0";// this is the version of downloaded information List <string> excludemultiartists = LoadExcludeArtists(); List <SMMultiArtistCommands> multiartistcommands = LoadMultiArtistCommands(); string id = await GetId(trackInfo.Artist, trackInfo.Title, trackInfo.Subtitle, trackInfo.Remix); string web = await LoadWebpage(string.Format("https://www.offiziellecharts.de/titel-details-{0}", id)); track.Artist = GetTrackArtist(web); List <SMRelatedArtist> relatedartists = GetRelatedArtists(web, track.Artist); track.Artist = CreateTrackArtist(track.Artist, relatedartists); if (AddNewExcludeArtists(relatedartists, multiartistcommands, ref excludemultiartists)) { SaveExcludeArtists(excludemultiartists); } if (string.IsNullOrEmpty(track.Artist)) { track.Artist = trackInfo.Artist; track.Title = trackInfo.Title; } else { track.MultipleArtists = CreateMultipleArtists(track.Artist, multiartistcommands, excludemultiartists); track.Artist = CreateArtistFromMultipleArtists(track.MultipleArtists); track.ArtistSortOrder = CreateArtistFromMultipleArtists(track.MultipleArtists, true); SMTrackTitle tracktitle = GetTrackTitle(web); track.Title = tracktitle.Title; track.Subtitle = tracktitle.Subtitle; track.Remix = tracktitle.Remix; track.TitleSortOrder = CreateSortString(track.Title); track.Custom1 = GetTrackChartsPeak(web); track.Custom2 = GetTrackChartsWeeks(web); track.Custom3 = GetTrackChartsPoints(web); if (string.IsNullOrEmpty(track.Custom3) && track.Custom2 == "001") { int points = (101 - Int32.Parse(track.Custom1)); track.Custom3 = points.ToString().PadLeft(5, '0'); } track.RecordingYear = GetTrackRecYear(web); web = await LoadWebpage(string.Format("https://hitparade.ch/song/song/song-{0}", id)); if (string.IsNullOrEmpty(track.Custom1)) { track.Custom1 = GetTrackChartsPeakAgain(web); track.Custom2 = GetTrackChartsWeeksAgain(web); track.Custom3 = GetTrackChartsPointsEstimated(track.Custom1, track.Custom2); } track.Custom10 = string.Format("{0}|{1}", GetTrackRating(web).ToString(), GetTrackPopularity(track.Custom3).ToString()); if (track.Custom10 == "0|255") { track.Custom10 = string.Format("Charts:{0}", ver); } else { track.Custom10 = string.Format("Charts:{0}|{1}", ver, track.Custom10); } } return(track); }