예제 #1
0
        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);
        }
예제 #2
0
// 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);
        }