示例#1
0
        public MusicDetail GetMusicDetail(Uri uri)
        {
            string id             = _idRegex.Match(uri.ToString()).Groups[1].Value;
            string responseString = DownloadString(uri);

            HtmlDocument document = new HtmlDocument();

            document.LoadHtml(responseString);

            HtmlNode    musicDetailElement = document.DocumentNode.SelectNodes("//div[contains(@class, 'pdMusicDetail')]")[0];
            MusicDetail musicDetail        = MusicDetail.ParseFromElement(musicDetailElement, id);

            HtmlNodeCollection charts = document.DocumentNode.SelectNodes("//div[@class='pdm-result']");

            foreach (HtmlNode chartElement in charts)
            {
                ChartScore chart = ChartScore.ParseFromElement(chartElement);
                musicDetail.AddChart(chart);
            }

            return(musicDetail);
        }
示例#2
0
        public static ChartScore ParseFromElement(HtmlNode element)
        {
            ChartScore score = new ChartScore();

            HtmlNode resultHead = element.ChildNodes[1]; // pdm-resultHead

            foreach (ChartDifficulty difficulty in Enum.GetValues(typeof(ChartDifficulty)))
            {
                if (resultHead.HasClass(difficulty.ToString().ToLower()))
                {
                    score.Difficulty = difficulty;
                    break;
                }
            }

            score.Level     = int.Parse(resultHead.ChildNodes[3].SelectSingleNode("text()").InnerText.Trim());
            score.NoteCount = int.Parse(resultHead.ChildNodes[5].SelectSingleNode("text()").InnerText.Trim());

            HtmlNode leftResult = element.ChildNodes[3].ChildNodes[1]; // pdResultList

            score.HighScore = int.Parse(leftResult.ChildNodes[3].InnerText.Trim());
            score.ClearRate = decimal.Parse(leftResult.ChildNodes[7].InnerText.Trim().TrimEnd('%'));

            decimal rankPoint;

            if (decimal.TryParse(leftResult.ChildNodes[11].InnerText.Trim(), out rankPoint))
            {
                score.RankPoints = rankPoint;
            }
            else
            {
                score.RankPoints = 0;
            }

            HtmlNode rightResult = element.ChildNodes[5].ChildNodes[1]; // pdResultIco

            HtmlNode clearContainer = rightResult.ChildNodes[1];        // li class=clear

            if (clearContainer.ChildNodes.Count > 1)
            {
                HtmlNode clearImage    = clearContainer.ChildNodes[1].ChildNodes[1];
                string   clearImageUrl = clearImage.Attributes["src"].Value;
                if (clearImageUrl.StartsWith("https://rev-srw.ac.capcom.jp/assets/common/img_common/bnr_ULTIMATE_CLEAR.png"))
                {
                    score.ClearType = ChartClearType.Ultimate;
                }
                else if (clearImageUrl.StartsWith("https://rev-srw.ac.capcom.jp/assets/common/img_common/bnr_SURVIVAL_CLEAR.png"))
                {
                    score.ClearType = ChartClearType.Survival;
                }
            }

            HtmlNode gradeContainer = rightResult.ChildNodes[3]; // li class=grade
            string   gradeImageUrl  = gradeContainer.ChildNodes[1].Attributes["src"].Value;

            score.GradeValue = GradeHelper.GetGradeFromImageUrl(gradeImageUrl);

            if (rightResult.ChildNodes.Count == 7)
            {
                score.IsFullCombo = true;
            }

            if (score.ClearType == ChartClearType.Unknown)
            {
                if (score.GradeValue == 11)
                {
                    score.ClearType = ChartClearType.Unplayed;
                }
                else if (score.GradeValue == 10)
                {
                    score.ClearType = ChartClearType.Failed;
                }
                else
                {
                    score.ClearType = ChartClearType.Cleared;
                }
            }

            return(score);
        }
示例#3
0
 public void AddChart(ChartScore score)
 {
     Scores.Add(score.Difficulty, score);
 }