Exemple #1
0
 public QMusicSearchInfoChangedArgs(QMusicsOfPageModel musicInfoOfPageModels, int targetPageNumber, bool isSuccessed = true, string erroInfo = null)
 {
     MusicInfoOfPageModels = musicInfoOfPageModels;
     TargetPageNumber      = targetPageNumber;
     IsSuccessed           = isSuccessed;
     ErrorInfo             = erroInfo;
 }
Exemple #2
0
        public static void InvokeFromQMSearchChanged(QMusicsOfPageModel musicInfoOfPageModels, int targetPageNumber, bool isSuccessed = true, string errorInfo = null)
        {
            var e = new QMusicSearchInfoChangedArgs(musicInfoOfPageModels, targetPageNumber, isSuccessed, errorInfo);

            QMSearchChangedEvent?.Invoke(null, e);
        }
        private QMusicsOfPageModel GetQMusicInfoOfPageModel(int currentPageNumber, string searchKey)
        {
            var musicInfoOfPageModel = new QMusicsOfPageModel()
            {
                CurrentPageNumber = currentPageNumber
            };

            searchKey = HttpUtility.UrlEncode(searchKey);
            var url = $"https://y.qq.com/portal/search.html#page={currentPageNumber}&searchid=1&remoteplace=txt.yqq.top&t=song&w={searchKey}";

            try
            {
                var doc = GetHtmlDocument(url, TimeSpan.FromSeconds(10), html =>
                {
                    if (currentPageNumber == 1)
                    {
                        return(html.Contains("js_song") &&
                               html.Contains("songlist__artist") &&
                               html.Contains("album_name") &&
                               html.Contains("songlist__time"));
                    }
                    else
                    {
                        return(html.Contains("js_song") &&
                               html.Contains("songlist__artist") &&
                               html.Contains("album_name") &&
                               html.Contains("songlist__time") &&
                               html.Contains("js_pageindex"));
                    }
                });
                var songList         = doc.DocumentNode.SelectNodes("//a[@class='js_song']");
                var singerList       = doc.DocumentNode.SelectNodes("//div[@class='songlist__artist']");
                var albumList        = doc.DocumentNode.SelectNodes("//a[@class='album_name']");
                var timeDurationList = doc.DocumentNode.SelectNodes("//div[@class='songlist__time']");
                var lastPagerNode    = doc.DocumentNode.SelectNodes("//div[@class='mod_page_nav js_pager']")?.FirstOrDefault()?.ChildNodes?.LastOrDefault();

                if (lastPagerNode == null)
                {
                    musicInfoOfPageModel.TotalPageNumber = 1;
                }
                else
                {
                    if (lastPagerNode?.Attributes["class"].Value.Equals("current") == true)
                    {
                        musicInfoOfPageModel.TotalPageNumber = Convert.ToInt32(lastPagerNode.InnerHtml);
                    }
                    else
                    {
                        musicInfoOfPageModel.TotalPageNumber = Convert.ToInt32(doc.DocumentNode.SelectNodes("//a[@class='js_pageindex']").LastOrDefault()?.Attributes["data-index"].Value);
                    }
                }

                var songCount = MathUtil.GetMin(songList.Count, singerList.Count, albumList.Count, timeDurationList.Count);
                for (int i = 0; i < songCount; i++)
                {
                    var id = songList[i].Attributes["href"].Value.Substring(songList[i].Attributes["href"].Value.LastIndexOf('/') + 1).Replace(".html", "");
                    if (id.Length != 14)
                    {
                        continue;
                    }

                    musicInfoOfPageModel.MusicInfoList.Add(new QMInfoModel()
                    {
                        Id         = id,
                        SourcePath = songList[i].Attributes["href"].Value,
                        Name       = songList[i].Attributes["title"].Value,
                        Singer     = string.Join("/", singerList[i].SelectNodes("./a[@class='singer_name']").Select(n => n.Attributes["title"]).Select(n => n.Value)),
                        AlbumInfo  = new QMAlbumInfoModel()
                        {
                            Id   = albumList[i].Attributes["data-albumid"].Value,
                            Name = albumList[i].Attributes["title"].Value
                        },
                        TimeDuration = timeDurationList[i].FirstChild.InnerText,
                    });
                }

                return(musicInfoOfPageModel);
            }
            catch (Exception ex)
            {
                throw new Exception("服务器崩溃了 --!");
            }
        }