示例#1
0
        /// <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);
            }
        }
示例#2
0
        /// <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);
            }
        }
示例#3
0
        /// <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);
        }