/// <summary> /// Возвращает список найденных раздач /// </summary> /// <returns></returns> public List <FoundPost> GetList() { DownloaderThroughTor downloader = new DownloaderThroughTor(); HtmlDocument document = downloader.Page(UriSoft); HtmlNodeCollection htmlNodes = document.DocumentNode.SelectNodes(@"//div[@id=""index""]//tr[position()>1]/td[2]"); // необходимо для добавления корректной ссылки на страницу раздачи // по умолчанию ссылка парситься без домена первого уровня string rutorMainUrl = UriSoft.OriginalString.Replace(@"/soft", ""); if (htmlNodes != null) { var foundQuery = from el in htmlNodes select new FoundPost { Name = HttpUtility.HtmlDecode(el.LastChild.InnerText), Uri = rutorMainUrl + el.LastChild.GetAttributeValue("href", null), Magnet = el.ChildNodes[1].GetAttributeValue("href", null), FoundedTime = DateTime.Now, TorrentTracker_idTorrentTracker = (int)TTrakers.Rutor, }; List <FoundPost> foundPosts = foundQuery.Reverse().ToList(); return(foundPosts); } else { MessageService.ShowError("Ошибка на этапе парсинга списка раздач. htmlNodes = null"); return(null); } }
/// <summary> /// Получает полноценный пост, по найденному посту /// </summary> /// <param name="item">Найденный пост</param> /// <returns></returns> public ReadyPost GetItem(FoundPost item) { DownloaderThroughTor downloader = new DownloaderThroughTor(); HtmlDocument document = downloader.Page(new Uri(item.Uri)); HtmlNode mainNode = document.DocumentNode.SelectSingleNode(@"//table[@id=""details""]/tr[1]/td[2]"); if (mainNode != null) { // Важно чтобы сначала вызывался парсинг спойлеров, а затем только парсинг описания // Порядок вызова остальных функций не важен. Читай комментарий в методе со спойлерами ReadyPost readyPost = new ReadyPost(); readyPost.Spoilers = ParsingSpoilers(mainNode, readyPost); readyPost.Imgs = ParsingImgs(mainNode, readyPost); readyPost.Description = HttpUtility.HtmlDecode(mainNode.InnerHtml); readyPost.Name = ParsingName(mainNode); readyPost.TorrentUrl = ParsingTorrentUrl(mainNode); readyPost.FoundPost = item; readyPost.FoundedTime = DateTime.Now; return(readyPost); } else { MessageService.ShowError("Ошибка на этапе парсинга раздачи. mainNode = null"); return(null); } }
/// <summary> /// Возвращает прямую ссылку на изображение со страницы изображения на хостинге. /// Происходит парсинг сайта. /// </summary> /// <param name="uri">Страница с изображением</param> /// <param name="xPath">Какой хостинг</param> /// <returns></returns> public string GetDirectUri(string uri, string xPath) { DownloaderThroughTor downloader = new DownloaderThroughTor(); HtmlDocument document = downloader.Page(new Uri(uri)); HtmlNode node = document.DocumentNode.SelectSingleNode(xPath); string result = uri; if (node != null) { result = node.GetAttributeValue("src", null); } return(result); }