private void Downloader_FinishDownload(object sender, DownloaderHtmlPageArgs e) { // если нужного узла не будет - null HtmlNodeCollection htmlNodes = e.Page.DocumentNode.SelectNodes(@"//div[@id=""index""]//tr[position()>1]/td[2]"); // необходимо для добавления корректной ссылки на страницу раздачи // по умолчанию ссылка парситься без домена первого уровня string rutorMainUrl = UriWork.OriginalString.Replace(@"/soft", ""); if (htmlNodes != null) { List <ItemList> postsList; postsList = htmlNodes.Select((el, i) => new ItemList { // HtmlDecode необходим чтобы привести HTML escape последовательности // в нормальный вид Name = HttpUtility.HtmlDecode(el.LastChild.InnerText), Href = rutorMainUrl + el.LastChild.GetAttributeValue("href", null), Index = i, Magnet = el.ChildNodes[1].GetAttributeValue("href", null), }).ToList(); ItemListArgs eventArgs = new ItemListArgs(postsList); //вызываем событие. аналог if(onPostReceived!=null)onPostReceived(arg); ListReceived?.Invoke(this, eventArgs); } else { Program.statusBarGlobal.Message = "Ошибка на этапе парсинга страницы"; } }
private void Client_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e) { if (e.Error == null) { byte[] dataArray = e.Result; //ставим правильную кодировку для данных, инчае будут string page = Encoding.UTF8.GetString(dataArray); //корикозябры вместо кириллицы HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(page); //делаем страницу из string DownloaderHtmlPageArgs args = new DownloaderHtmlPageArgs(doc); FinishDownload?.Invoke(this, args); //вызываем событие, аналог if(OnPageDow!=null) } else { Program.statusBarGlobal.Message = "Ошибка подключения при запросе списка торрентов"; } }