Example #1
0
        private void DownloaderItem_FinishDownload(object sender, DownloaderHtmlPageArgs e)
        {
            HtmlNode mainNode = e.Page.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   = _parentItem;
                readyPost.FoundedTime = DateTime.Now;

                ReadyPostArgs eventArgs = new ReadyPostArgs(readyPost);
                ReadyPostsReceived?.Invoke(this, eventArgs);
            }
            else
            {
                MessageService.ShowError("Ошибка на этапе парсинга раздачи. mainNode = null");
            }
        }
Example #2
0
        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 = 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();

                FoundPostArgs eventArgs = new FoundPostArgs(foundPosts);
                FoundPostsReceived?.Invoke(this, eventArgs);
            }
            else
            {
                MessageService.ShowError("Ошибка на этапе парсинга списка раздач. htmlNodes = null");
            }
        }
        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
            {
                MessageService.ShowError("Ошибка подключения при запросе списка торрентов.");
            }
        }