public QMusicSearchInfoChangedArgs(QMusicsOfPageModel musicInfoOfPageModels, int targetPageNumber, bool isSuccessed = true, string erroInfo = null) { MusicInfoOfPageModels = musicInfoOfPageModels; TargetPageNumber = targetPageNumber; IsSuccessed = isSuccessed; ErrorInfo = erroInfo; }
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("服务器崩溃了 --!"); } }