/// <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); } }
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")); }
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]"); }
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()); }
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); }