private int GetSubCategories(Category parentCategory, string url) { string webData; int p = url.IndexOf('#'); if (p >= 0) { string nm = url.Substring(p + 1); webData = GetWebData(url.Substring(0, p), cookies: cc, forceUTF8: true); webData = @"class=""listbig"">" + Helpers.StringUtils.GetSubString(webData, @"class=""listbig""><a name=""" + nm + @"""", @"class=""listbig"""); } else { webData = GetWebData(url, cookies: cc, forceUTF8: true); } parentCategory.SubCategories = new List <Category>(); Match m = null; switch ((Depth)parentCategory.Other) { case Depth.MainMenu: webData = Helpers.StringUtils.GetSubString(webData, @"class=""pagination""", @"class=""listbig"""); m = regex_Az.Match(webData); break; case Depth.Alfabet: //webData = Helpers.StringUtils.GetSubString(webData, @"class=""listbig""", @"class=""clear"""); m = regEx_dynamicSubCategories.Match(webData); break; case Depth.Series: Match m2 = Regex.Match(webData, @"imdb\.com/title/(?<imdbId>[^/]*)/"); webData = Helpers.StringUtils.GetSubString(webData, @"class=""lists"" >", @"class=""clear"""); string[] tmp = { @"class=""lists"" >" }; string[] seasons = webData.Split(tmp, StringSplitOptions.RemoveEmptyEntries); foreach (string s in seasons) { SeriesRssLink cat = new SeriesRssLink(); if (m2.Success) { cat.imDbId = m2.Groups["imdbId"].Value; } cat.Name = HttpUtility.HtmlDecode(Helpers.StringUtils.GetSubString(s, @"name"">", "<")).Trim(); cat.Url = s; cat.SubCategoriesDiscovered = true; cat.HasSubCategories = false; cat.Other = ((Depth)parentCategory.Other) + 1; parentCategory.SubCategories.Add(cat); cat.ParentCategory = parentCategory; } break; default: m = null; break; } while (m != null && m.Success) { RssLink cat = new RssLink(); cat.Name = HttpUtility.HtmlDecode(m.Groups["title"].Value).Trim(); cat.Url = m.Groups["url"].Value; if (!String.IsNullOrEmpty(cat.Url) && !Uri.IsWellFormedUriString(cat.Url, System.UriKind.Absolute)) { cat.Url = new Uri(new Uri(baseUrl), cat.Url).AbsoluteUri; } cat.Description = HttpUtility.HtmlDecode(m.Groups["description"].Value); cat.HasSubCategories = !parentCategory.Other.Equals(Depth.Series); cat.Other = ((Depth)parentCategory.Other) + 1; if (cat.Name == "NEW") { cat.HasSubCategories = false; cat.Other = Depth.BareList; } parentCategory.SubCategories.Add(cat); cat.ParentCategory = parentCategory; m = m.NextMatch(); } parentCategory.SubCategoriesDiscovered = true; return(parentCategory.SubCategories.Count); }
private int GetSubCategories(Category parentCategory, string url) { string webData; int p = url.IndexOf('#'); if (p >= 0) { string nm = url.Substring(p + 1); webData = GetWebData(url.Substring(0, p), cookies: cc, forceUTF8: true); webData = @"class=""listbig"">" + Helpers.StringUtils.GetSubString(webData, @"class=""listbig""><a name=""" + nm + @"""", @"class=""listbig"""); } else { webData = GetWebData(url, cookies: cc, forceUTF8: true); } parentCategory.SubCategories = new List <Category>(); Match m = null; switch ((Depth)parentCategory.Other) { case Depth.MainMenu: webData = Helpers.StringUtils.GetSubString(webData, @"class=""pagination""", @"class=""listbig"""); m = regex_Az.Match(webData); break; case Depth.Alfabet: //webData = Helpers.StringUtils.GetSubString(webData, @"class=""listbig""", @"class=""clear"""); m = regEx_dynamicSubCategories.Match(webData); break; case Depth.Series: Match m2 = Regex.Match(webData, @"imdb\.com/title/(?<imdbId>[^/]*)/"); Match m3 = Regex.Match(webData, @"function\sloadMoreLinks\(season\)\s{\s*\$\.post\(\s*'(?<url>[^']*)',\s*{(?<postdata>[^}]*)}", defaultRegexOptions); webData = Helpers.StringUtils.GetSubString(webData, @"class=""lists"" >", @"class=""clear"" "); string[] tmp = { @"class=""lists"" >" }; string[] seasons = webData.Split(tmp, StringSplitOptions.RemoveEmptyEntries); foreach (string s in seasons) { SeriesRssLink cat = new SeriesRssLink(); if (m2.Success) { cat.imDbId = m2.Groups["imdbId"].Value; } cat.Name = HttpUtility.HtmlDecode(Helpers.StringUtils.GetSubString(s, @"name"">", "<")).Trim(); cat.Url = s; cat.SubCategoriesDiscovered = true; cat.HasSubCategories = false; Match m4 = Regex.Match(s, @"javascript:loadMoreLinks\((?<season>\d+)\)"); if (m4.Success && m3.Success) { string posturl = m3.Groups["url"].Value; Match m5 = Regex.Match(m3.Groups["postdata"].Value, @"'(?<key>[^']*)'\s*:\s*(?:')?(?<value>[^',]*)"); string postData = ""; while (m5.Success) { postData += "&" + m5.Groups["key"].Value + "="; if (m5.Groups["key"].Value == "season") { postData += m4.Groups["season"].Value; } else { postData += m5.Groups["value"].Value; } m5 = m5.NextMatch(); } cat.Other = new Tuple <string, string>(posturl, postData.Substring(1)); } else { cat.Other = ((Depth)parentCategory.Other) + 1; } parentCategory.SubCategories.Add(cat); cat.ParentCategory = parentCategory; } break; default: m = null; break; } while (m != null && m.Success) { RssLink cat = new RssLink(); cat.Name = HttpUtility.HtmlDecode(m.Groups["title"].Value).Trim(); cat.Url = m.Groups["url"].Value; if (!String.IsNullOrEmpty(cat.Url) && !Uri.IsWellFormedUriString(cat.Url, System.UriKind.Absolute)) { cat.Url = new Uri(new Uri(baseUrl), cat.Url).AbsoluteUri; } cat.Description = HttpUtility.HtmlDecode(m.Groups["description"].Value); cat.HasSubCategories = !parentCategory.Other.Equals(Depth.Series); cat.Other = ((Depth)parentCategory.Other) + 1; if (cat.Name == "NEW") { cat.HasSubCategories = false; cat.Other = Depth.BareList; } parentCategory.SubCategories.Add(cat); cat.ParentCategory = parentCategory; m = m.NextMatch(); } parentCategory.SubCategoriesDiscovered = true; return(parentCategory.SubCategories.Count); }
private int GetSubCategories(Category parentCategory, string url) { string webData; int p = url.IndexOf('#'); if (p >= 0) { string nm = url.Substring(p + 1); webData = GetWebData(url.Substring(0, p), cookies: cc, forceUTF8: true); webData = @"class=""listbig"">" + Helpers.StringUtils.GetSubString(webData, @"class=""listbig""><a name=""" + nm + @"""", @"class=""listbig"""); } else webData = GetWebData(url, cookies: cc, forceUTF8: true); parentCategory.SubCategories = new List<Category>(); Match m = null; switch ((Depth)parentCategory.Other) { case Depth.MainMenu: webData = Helpers.StringUtils.GetSubString(webData, @"class=""pagination""", @"class=""listbig"""); m = regex_Az.Match(webData); break; case Depth.Alfabet: webData = Helpers.StringUtils.GetSubString(webData, @"class=""listbig""", @"class=""clear"""); m = regEx_dynamicSubCategories.Match(webData); break; case Depth.Series: Match m2 = Regex.Match(webData, @"imdb\.com/title/(?<imdbId>[^/]*)/"); webData = Helpers.StringUtils.GetSubString(webData, @"class=""lists"">", @"class=""clear"""); string[] tmp = { @"class=""lists"">" }; string[] seasons = webData.Split(tmp, StringSplitOptions.RemoveEmptyEntries); foreach (string s in seasons) { SeriesRssLink cat = new SeriesRssLink(); if (m2.Success) cat.imDbId = m2.Groups["imdbId"].Value; cat.Name = HttpUtility.HtmlDecode(Helpers.StringUtils.GetSubString(s, ">", "<")).Trim(); cat.Url = s; cat.SubCategoriesDiscovered = true; cat.HasSubCategories = false; cat.Other = ((Depth)parentCategory.Other) + 1; parentCategory.SubCategories.Add(cat); cat.ParentCategory = parentCategory; } break; default: m = null; break; } while (m != null && m.Success) { RssLink cat = new RssLink(); cat.Name = HttpUtility.HtmlDecode(m.Groups["title"].Value).Trim(); cat.Url = m.Groups["url"].Value; if (!String.IsNullOrEmpty(cat.Url) && !Uri.IsWellFormedUriString(cat.Url, System.UriKind.Absolute)) cat.Url = new Uri(new Uri(baseUrl), cat.Url).AbsoluteUri; cat.Description = HttpUtility.HtmlDecode(m.Groups["description"].Value); cat.HasSubCategories = !parentCategory.Other.Equals(Depth.Series); cat.Other = ((Depth)parentCategory.Other) + 1; if (cat.Name == "NEW") { cat.HasSubCategories = false; cat.Other = Depth.BareList; } parentCategory.SubCategories.Add(cat); cat.ParentCategory = parentCategory; m = m.NextMatch(); } parentCategory.SubCategoriesDiscovered = true; return parentCategory.SubCategories.Count; }