Beispiel #1
0
        /// <summary>
        /// Получает данные задания
        /// </summary>
        /// <param name="link">ссылка на задание без домена</param>
        /// <returns>Задание</returns>
        public Objects.Task GetTaskFromLink(string link)
        {
            Log.ProcessMessage("Пытаемся получить задание " + link);
            try
            {
                if (link.Contains("vacancies"))
                {
                    return(null);
                }
                string     get    = http.GetAsync(Domain + link).Result.Content.ReadAsStringAsync().Result;
                HtmlParser Parser = new HtmlParser();
                AngleSharp.Html.Dom.IHtmlDocument html = Parser.ParseDocument(get);


                var task = new Objects.Task
                {
                    Title        = html.QuerySelector(".col h1").TextContent,
                    Discription  = html.QuerySelector(".text_field p").TextContent,
                    Price        = html.QuerySelector(".page_header_content .title.amount") != null?html.QuerySelector(".page_header_content .title.amount").TextContent : "Бюджет не определен",
                    TimeStamp    = double.Parse(html.QuerySelector(".cols_table.no_hover .text-muted  span[data-timestamp]").GetAttribute("data-timestamp")),
                    Applications = html.QuerySelector(".block-content .title").TextContent,
                    Link         = Domain + link
                };
                Log.GoodMessage("Получили задание " + link);
                return(task);
            }
            catch
            {
                Log.ExMessage("Не удалось получить задание " + link);
                return(null);
            }
        }
Beispiel #2
0
        private ICollection <IndexerCategory> MapCategories(AngleSharp.Html.Dom.IHtmlDocument dom, AngleSharp.Dom.IElement t, AngleSharp.Dom.IElement tr)
        {
            var rName = t.TextContent;
            var rDesc = tr.QuerySelector("h3.tracker_info_bold").TextContent;
            var type  = dom.QuerySelector("div.releases-date:contains('Тип:')").TextContent;

            // Check OVA first cause OVA looks like anime with OVA in release name or description
            if (CategorieOVARegex.IsMatch(rName) || CategorieOVARegex.IsMatch(rDesc))
            {
                return(_categories.MapTrackerCatDescToNewznab("OVA/ONA/Special"));
            }

            // Check movies then, cause some of releases could be movies dorama and should go to movies category
            if (CategorieMovieRegex.IsMatch(rName) || CategorieMovieRegex.IsMatch(rDesc))
            {
                return(_categories.MapTrackerCatDescToNewznab("Movies"));
            }

            // Check dorama. Most of doramas are flaged as doramas in type info, but type info could have a lot of types at same time (movie, etc)
            if (CategorieDoramaRegex.IsMatch(rName) || CategorieDoramaRegex.IsMatch(type))
            {
                return(_categories.MapTrackerCatDescToNewznab("Dorama"));
            }

            return(_categories.MapTrackerCatDescToNewznab("TV Anime"));
        }
Beispiel #3
0
        private string composeTitle(AngleSharp.Html.Dom.IHtmlDocument dom, AngleSharp.Dom.IElement t, AngleSharp.Dom.IElement tr)
        {
            var name_ru   = dom.QuerySelector("div.media__post__header > h1").TextContent.Trim();
            var name_en   = dom.QuerySelector("div.media__panel > div:nth-of-type(1) > div.col-l:nth-of-type(1) > div > span").TextContent.Trim();
            var name_orig = dom.QuerySelector("div.media__panel > div:nth-of-type(1) > div.col-l:nth-of-type(2) > div > span").TextContent.Trim();

            var title = name_ru + " / " + name_en;

            if (name_en != name_orig)
            {
                title += " / " + name_orig;
            }

            var tabName = t.TextContent;

            tabName = tabName.Replace("Сезон", "Season");
            if (tabName.Contains("Серии"))
            {
                tabName = "";
            }

            var heading = tr.QuerySelector("h3.tracker_info_bold").TextContent;

            // Parse episodes info from heading if episods info present
            var match = EpisodesInfoQueryRegex.Match(heading);

            heading = tabName;
            if (match.Success)
            {
                if (string.IsNullOrEmpty(match.Groups[2].Value))
                {
                    heading += " E" + match.Groups[1].Value;
                }
                else
                {
                    heading += string.Format(" E{0}-{1}", match.Groups[1].Value, match.Groups[2].Value);
                }
            }

            return(title + " - " + heading + " [" + getResolution(tr) + "p]");
        }
Beispiel #4
0
        private static string GetDateFromDocument(AngleSharp.Html.Dom.IHtmlDocument content)
        {
            const string DateSelector = ".story_inf > li:nth-child(2)";

            var domDate = content.QuerySelector(DateSelector).LastChild;

            if (domDate?.NodeName != "#text")
            {
                return(string.Empty);
            }

            return(domDate.NodeValue.Trim());
        }
Beispiel #5
0
        private static string GetTitle(AngleSharp.Html.Dom.IHtmlDocument content, AngleSharp.Dom.IElement tabNode)
        {
            var domTitle  = content.QuerySelector("#news-title");
            var baseTitle = domTitle.TextContent.Trim();
            var quality   = GetQuality(tabNode.ParentElement);

            if (!string.IsNullOrWhiteSpace(quality))
            {
                return($"{baseTitle} [{quality}]");
            }

            return(baseTitle);
        }