예제 #1
0
        // GET: Forex
        public ActionResult Index()
        {
            ArrayList newsList    = new ArrayList();
            CQ        dom         = CQ.CreateFromUrl("http://www.financemagnates.com/forex");
            CQ        mainArticle = dom.Find("ul.featured_cats_wrapper").Eq(0);

            for (int i = 0; i < mainArticle.Children().Length; i++)
            {
                CQ       article = mainArticle.Children().Eq(i).Find("a").Eq(0);
                newsData nData   = new newsData();
                nData.text    = article.Text();
                nData.alt_url = article.Attr("href").ToString();
                nData.url     = "";
                newsList.Add(nData);
            }
            CQ       addArticle = dom.Find("div.sub-feature").Eq(0);
            newsData firstNews  = new newsData();
            CQ       first      = addArticle.Children("article").Eq(0);

            firstNews.text    = first.Find("a").Eq(0).Find("div").Eq(0).Text();
            firstNews.url     = first.Find("a").Eq(0).Css("background-image");
            firstNews.alt_url = first.Find("a").Eq(0).Attr("href").ToString();
            newsList.Add(firstNews);

            newsData secondNews = new newsData();
            CQ       second     = addArticle.Children("article").Eq(1);

            secondNews.text    = second.Find("a").Eq(0).Find("div").Eq(0).Text();
            secondNews.url     = second.Find("a").Eq(0).Css("background-image");
            secondNews.alt_url = second.Find("a").Eq(0).Attr("href").ToString();
            newsList.Add(secondNews);

            ViewBag.newsList = newsList;
            return(View());
        }
예제 #2
0
        // GET: NewsParse
        public ActionResult Index()
        {
            ArrayList newsList = new ArrayList();

            WebClient    webClient   = new WebClient();
            const string strUrl      = "http://www.edition.cnn.com/world";
            string       pageContent = webClient.DownloadString(strUrl);
            CQ           dom         = pageContent;
            CQ           mainStory   = dom["ul.cn.cn-list-hierarchical-xs.cn--idx-0"].Eq(0);

            for (int i = 0; i < mainStory.Children().Length; i++)
            {
                CQ     news    = mainStory.Children().Eq(i).Children().Eq(0);
                string url     = "";
                string alt_url = "";
                if (news.Find("a").Length != 0)
                {
                    alt_url = news.Find("a").Attr("href").ToString();
                }
                if (news.Find("img").Length != 0)
                {
                    url = news.Find("img").Attr("data-src-large").ToString();
                }

                string   text  = news.Find("span.cd__headline-text").Text();
                newsData nData = new newsData();
                nData.url     = url;
                nData.text    = text;
                nData.alt_url = alt_url;
                newsList.Add(nData);
            }
            CQ lastStory = dom["ul.cn.cn-list-hierarchical-xs.cn--idx-0"].Eq(1);

            for (int i = 0; i < lastStory.Children().Length; i++)
            {
                CQ     news    = lastStory.Children("article").Eq(i).Children().Eq(0);
                string alt_url = "";
                if (news.Find("a").Length != 0)
                {
                    alt_url = news.Find("a").Attr("href").ToString();
                }
                string url = "";
                if (news.Find("img").Length != 0)
                {
                    url = news.Find("img").Attr("data-src-large").ToString();
                }

                string   text  = news.Find("span.cd__headline-text").Text();
                newsData nData = new newsData();
                nData.url     = url;
                nData.alt_url = alt_url;
                nData.text    = text;
                newsList.Add(nData);
            }
            ViewBag.newsList = newsList;
            return(View());
        }
예제 #3
0
        public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query)
        {
            var releases         = new List <ReleaseInfo>();
            var episodeSearchUrl = string.Format("{0}?search={1}&cat=0", SearchUrl, HttpUtility.UrlEncode(query.GetQueryString()));
            var results          = await RequestStringWithCookiesAndRetry(episodeSearchUrl);

            try
            {
                CQ dom = results.Content;

                var table = dom["tbody > tr > .latest"].Parent().Parent();

                foreach (var row in table.Children().Skip(1))
                {
                    var release = new ReleaseInfo();

                    CQ qDetailsCol = row.ChildElements.ElementAt(1).Cq();
                    CQ qLink       = qDetailsCol.Children("a").First();

                    release.MinimumRatio    = 1;
                    release.MinimumSeedTime = 172800;
                    release.Comments        = new Uri(SiteLink + "/" + qLink.Attr("href"));
                    release.Guid            = release.Comments;
                    release.Title           = qLink.Attr("title");
                    release.Description     = release.Title;

                    //"Tuesday, June 11th 2013 at 03:52:53 AM" to...
                    //"Tuesday June 11 2013 03:52:53 AM"
                    var timestamp = qDetailsCol.Children("font").Text().Trim() + " ";
                    var timeParts = new List <string>(timestamp.Replace(" at", "").Replace(",", "").Split(' '));
                    timeParts[2] = Regex.Replace(timeParts[2], "[^0-9.]", "");
                    var formattedTimeString = string.Join(" ", timeParts.ToArray()).Trim();
                    var date = DateTime.ParseExact(formattedTimeString, "dddd MMMM d yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);
                    release.PublishDate = DateTime.SpecifyKind(date, DateTimeKind.Utc).ToLocalTime();

                    release.Link = new Uri(SiteLink + "/" + row.ChildElements.ElementAt(2).Cq().Children("a.index").Attr("href"));

                    var sizeStr = row.ChildElements.ElementAt(6).Cq().Text();
                    release.Size = ReleaseInfo.GetBytes(sizeStr);

                    release.Seeders = ParseUtil.CoerceInt(row.ChildElements.ElementAt(8).Cq().Text());
                    release.Peers   = ParseUtil.CoerceInt(row.ChildElements.ElementAt(9).Cq().Text()) + release.Seeders;

                    //if (!release.Title.ToLower().Contains(title.ToLower()))
                    //    continue;

                    releases.Add(release);
                }
            }
            catch (Exception ex)
            {
                OnParseError(results.Content, ex);
            }

            return(releases);
        }
예제 #4
0
        public ActionResult getDetail(string url)
        {
            CQ dom     = CQ.CreateFromUrl(url);
            CQ article = dom.Find("article.post").Eq(0);
            CQ aMain   = article.Children("div.entry-content").Eq(0);
            CQ ads     = aMain.Find("div.mobile");

            ads.Remove();
            CQ entry = aMain.Find("div.entry-meta");

            entry.Remove();
            string hText = aMain.RenderSelection().ToString();

            CQ     img    = dom.Find("div.site-header-bg").Eq(0);
            string srcImg = "";

            if (img.Length != 0)
            {
                srcImg = img.Css("background-image").ToString();
            }
            //string srcImg = "";
            ViewBag.hText  = hText;
            ViewBag.srcImg = srcImg;
            ViewBag.aTitle = dom.Find("div.hero-text").Eq(0).Children("h1").Eq(0).Text();
            return(View());
        }
예제 #5
0
        public void InnerParsingRules()
        {
            CQ res = Dom.Select("script");

            // bug found 10/31/11
            Assert.AreEqual(0, res.Children().Length, "Script cannot have children");
        }
예제 #6
0
        public ActionResult getDetail(string url)
        {
            CQ     dom       = CQ.CreateFromUrl(url);
            CQ     article   = dom.Find("article.post").Eq(0);
            string aMainText = article.Children("header").Eq(0).Children("h1").Eq(0).Text();
            string aSubText  = article.Children("header").Eq(0).Children("div").Eq(0).Text();

            CQ aMain = article.Children("div.entry-content").Eq(0);

            string hText = aMain.RenderSelection().ToString();

            ViewBag.aMainText = aMainText;
            ViewBag.aSubText  = aSubText;
            ViewBag.hText     = hText;
            return(View());
        }
        // GET: CNN
        public ActionResult Index()
        {
            ArrayList articles  = new ArrayList();
            WebClient webClient = new WebClient();

            webClient.Headers.Add("user-agent", "Only a test!");
            const string strUrl      = "https://edition.cnn.com/middle-east";
            string       pageContent = webClient.DownloadString(strUrl);
            CQ           dom         = pageContent;
            CQ           top_news    = dom.Find("ul.cn-list-hierarchical-piped").Eq(0);

            Article t_news = new Article();

            t_news.img_url = top_news.Find("img").Attr("data-src-large").ToString();
            top_news       = top_news.Find("h3.cd__headline").Eq(0);
            t_news.title   = top_news.Find("span").Text().ToString();
            t_news.url     = top_news.Find("a").Attr("href");
            if (!t_news.url.Contains("http:"))
            {
                t_news.url = "https://edition.cnn.com" + t_news.url;
            }
            if (!t_news.img_url.Contains("http:"))
            {
                t_news.img_url = "http://" + t_news.img_url;
            }
            articles.Add(t_news);

            CQ t_stories = dom.Find("ul.cn-list-xs").Eq(1);

            for (int i = 0; i < t_stories.Children("li").Length; i++)
            {
                CQ      story = t_stories.Children("li").Eq(i);
                Article news  = new Article();
                news.url = story.Find("a").Eq(0).Attr("href").ToString();
                if (!news.url.Contains("http:"))
                {
                    news.url = "https://edition.cnn.com" + news.url;
                }
                news.title = story.Find("span.cd__headline-text").Text().ToString();
                articles.Add(news);
            }

            ViewBag.newsList = articles;

            return(View());
        }
예제 #8
0
        public void SimpleClone()
        {
            CQ  hlinks    = Dom.Select("#hlinks-user");
            int spanCount = hlinks.Find("span").Length;
            CQ  clone     = hlinks.Clone();

            Assert.AreEqual(hlinks.Find("*").Length + 1, clone.Select("*").Length, "Clone has same total elements as original");

            CQ newHome = Dom.Select("#hidden-div");

            spanCount = newHome.Find("span").Length;
            int cloneSpanCount = clone.Select("span").Length;

            Assert.AreEqual(1, newHome.Children().Length, "Sanity check - target has 1 child");
            newHome.Append(clone);
            Assert.AreEqual(2, newHome.Children().Length, "Target has 2 children after cloning");
            Assert.AreEqual(spanCount + cloneSpanCount, newHome.Find("span").Length, "Same # of spans in the clone");
        }
예제 #9
0
        // GET: CryptoCoin
        public ActionResult Index()
        {
            ArrayList newsList    = new ArrayList();
            CQ        dom         = CQ.CreateFromUrl("http://www.cryptocoinsnews.com");
            CQ        mainArticle = dom.Find("div.grid-wrapper").Eq(0);

            for (int i = 0; i < mainArticle.Children(".post").Length; i++)
            {
                CQ       article = mainArticle.Children(".post").Eq(i).Find("a").Eq(0);
                newsData nData   = new newsData();
                nData.text    = article.Attr("title").ToString();
                nData.alt_url = article.Attr("href").ToString();
                nData.url     = "";
                CQ img = article.Children("img").Eq(0);
                nData.url = img.Attr("src").ToString();
                newsList.Add(nData);
            }
            ViewBag.newsList = newsList;
            return(View());
        }
예제 #10
0
        public void SimpleClone()
        {
            var dom = TestDom("TestHtml");

            CQ hlinks = dom.Select("#hlinks-user");

            CQ clone = hlinks.Clone();

            Assert.AreEqual(hlinks.Find("*").Length, clone.Find("*").Length, "Clone has same total elements as original");


            CQ newHome = dom.Select("#hidden-div");

            var spanCount      = newHome.Find("span").Length;
            int cloneSpanCount = clone.Find("span").Length;

            Assert.AreEqual(1, newHome.Children().Length, "Sanity check - target has 1 child");
            newHome.Append(clone);
            Assert.AreEqual(2, newHome.Children().Length, "Target has 2 children after cloning");
        }
예제 #11
0
        public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query)
        {
            var releases         = new List <ReleaseInfo>();
            var searchString     = query.GetQueryString();
            var episodeSearchUrl = string.Format(SearchUrl, HttpUtility.UrlEncode(searchString));
            var results          = await RequestStringWithCookiesAndRetry(episodeSearchUrl);

            try
            {
                CQ  dom  = results.Content;
                var rows = dom["#torrent_table > tbody > tr.torrent"];
                foreach (var row in rows)
                {
                    CQ  qRow    = row.Cq();
                    var release = new ReleaseInfo();

                    release.MinimumRatio    = 1;
                    release.MinimumSeedTime = 172800;
                    release.Title           = qRow.Find(".torrent_name_link").Text();
                    release.Description     = release.Title;
                    release.Guid            = new Uri(SiteLink + "/" + qRow.Find(".torrent_name_link").Parent().Attr("href"));
                    release.Comments        = release.Guid;
                    release.Link            = new Uri(SiteLink + "/" + qRow.Find(".torrent_handle_links > a").First().Attr("href"));

                    var dateStr = qRow.Find(".time").Text().Trim();
                    release.PublishDate = DateTimeUtil.FromTimeAgo(dateStr);

                    var sizeStr = qRow.Find(".size")[0].ChildNodes[0].NodeValue;
                    release.Size    = ReleaseInfo.GetBytes(sizeStr);
                    release.Seeders = ParseUtil.CoerceInt(qRow.Children().ElementAt(6).InnerText.Trim());
                    release.Peers   = ParseUtil.CoerceInt(qRow.Children().ElementAt(7).InnerText.Trim()) + release.Seeders;

                    releases.Add(release);
                }
            }
            catch (Exception ex)
            {
                OnParseError(results.Content, ex);
            }
            return(releases);
        }
예제 #12
0
        public ActionResult getDetail(string url)
        {
            CQ dom = CQ.CreateFromUrl("http://cnbc.com/" + url);

            ViewBag.title = dom.Find("h1").Eq(0).Text();

            string article = dom.Find("#article_body").Eq(0).RenderSelection().ToString();

            if (article.Length == 0)
            {
                ViewBag.title = "";
                CQ aBody = dom.Find(".cnbc-body").Eq(0);
                //article = aBody.Remove(".franchise_content").RenderSelection().ToString();
                //article = article.Replace("data-img-src", "src");
                article  = aBody.Children().Eq(2).RenderSelection().ToString();
                article += aBody.Children().Eq(3).RenderSelection().ToString();
                article  = article.Replace("data-img-src", "src");
            }
            ViewBag.text = article;
            return(View());
        }
예제 #13
0
        public ActionResult detail(string url)
        {
            WebClient webClient = new WebClient();

            webClient.Headers.Add("user-agent", "Only a test!");
            string strUrl       = url;
            string pageContent  = webClient.DownloadString(strUrl);
            CQ     dom          = pageContent;
            CQ     article_body = dom.Find("div.pg-right-rail-tall").Eq(0).Find("article").Eq(0).Find("div.l-container").Eq(0);

            ViewBag.title = article_body.Children("h1").Text().ToString();
            article_body  = article_body.Children("div.pg-rail-tall__wrapper").Eq(0).Children("div.pg-side-of-rail").Eq(0);
            CQ temp = article_body.Find("div.media__video--thumbnail-wrapper").Eq(0);

            temp.Remove();
            temp = article_body.Find(".el__leafmedia.el__leafmedia--storyhighlights").Eq(0);
            temp.Remove();
            temp = article_body.Find(".el__embedded.el__embedded--standard");
            temp.Remove();
            temp = article_body.Find(".el__gallery--expandable.js__gallery--expandable.js__leafmedia--gallery");
            temp.Remove();
            temp = article_body.Find(".cn.cn-list-hierarchical-small-horizontal.cn--idx-0.cn-");
            temp.Remove();
            temp = article_body.Find("input.sharebar-video-embed-field");
            temp.Remove();
            temp = article_body.Find(".zn__containers");
            temp.Remove();
            temp = article_body.Find("img.media__image.media__image--responsive");
            for (int i = 0; i < temp.Length; i++)
            {
                CQ     t   = temp.Eq(i);
                string str = t.Attr("data-src-large");
                t.AttrSet(new { src = str });
            }
            temp = article_body.Find(".cn__column.carousel__content__item");
            temp.Remove();
            ViewBag.text = article_body.RenderSelection().ToString();

            return(View());
        }
예제 #14
0
        // GET: Cnbc
        public ActionResult Index()
        {
            ArrayList newsList    = new ArrayList();
            CQ        dom         = CQ.CreateFromUrl("http://www.cnbc.com/world/?region=world");
            CQ        mainArticle = dom.Find("ul.stories_assetlist").Eq(0);

            for (int i = 0; i < mainArticle.Children(".card,.last-card").Length; i++)
            {
                CQ       article = mainArticle.Children(".card").Eq(i);
                CQ       data    = article.Find("div.headline").Eq(0).Children("a").Eq(0);
                newsData nData   = new newsData();
                nData.text    = data.Text().ToString();
                nData.alt_url = data.Attr("href").ToString();
                nData.url     = "";
                CQ img = article.Find("img").Eq(0);
                nData.url = img.Attr("data-img-src");
                newsList.Add(nData);
            }
            CQ smallArticle = dom.Find("ul.stories_assetlist").Eq(1);

            for (int i = 0; i < smallArticle.Children("li").Length; i++)
            {
                CQ article = smallArticle.Children("li").Eq(i);
                CQ data    = article.Find("div.headline").Eq(0).Children("a").Eq(0);
                if (data.Length == 0)
                {
                    continue;
                }
                newsData nData = new newsData();
                nData.text    = data.Text().ToString();
                nData.alt_url = data.Attr("href").ToString();
                nData.url     = "";
                CQ img = article.Find("img").Eq(0);
                nData.url = img.Attr("data-img-src");
                newsList.Add(nData);
            }
            ViewBag.newsList = newsList;
            return(View());
        }
예제 #15
0
        // GET: Arabbit
        public ActionResult Index()
        {
            ArrayList newsList = new ArrayList();

            CQ dom         = CQ.CreateFromUrl("http://www.arabbit.net");
            CQ mainArticle = dom.Find("div.grid-wrapper").Eq(0);

            for (int i = 0; i < mainArticle.Children().Length; i++)
            {
                newsData nData = new newsData();

                CQ article = mainArticle.Children().Eq(i).Find("a").Eq(0);

                string aText = "";
                string aImg  = "";
                string aAlt  = "";

                if (article.Length != 0)
                {
                    aText = article.Attr("title").ToString();
                    aAlt  = article.Attr("href").ToString();
                }

                nData.text    = aText;
                nData.alt_url = aAlt;
                nData.url     = "";
                CQ img = article.Children("img").Eq(0);
                if (img.Length != 0)
                {
                    aAlt = img.Attr("src").ToString();
                }
                nData.url = aAlt;
                newsList.Add(nData);
            }
            ViewBag.newsList = newsList;
            return(View());
        }
예제 #16
0
        public ActionResult getDetail(string url)
        {
            CQ dom     = CQ.CreateFromUrl(url);
            CQ article = dom.Find("article.post").Eq(0);
            CQ aMain   = article.Children("div.entry-content").Eq(0);

            string hText = aMain.RenderSelection().ToString();

            CQ     img    = dom.Find("div.site-header-bg").Eq(0);
            string srcImg = img.Css("background-image").ToString();

            ViewBag.hText  = hText;
            ViewBag.srcImg = srcImg;
            return(View());
        }
예제 #17
0
        private VSGalleryQAThread TryParseThread(CQ element)
        {
            int threadId;

            if (!int.TryParse(element.Attr("threadid"), out threadId))
            {
                return(null);
            }

            var thread = new VSGalleryQAThread();

            thread.ThreadId = threadId;

            thread.Title = element.Children("div.threadHeader")
                           .Children("div.title").First().Text();

            thread.Posts = new List <VSGalleryQAPost>();

            foreach (var p in element.Find("li.post"))
            {
                var post = TryParsePost(p.Cq());
                if (post != null)
                {
                    thread.Posts.Add(post);
                }
            }

            if (thread.Posts.Count == 0)
            {
                return(null);
            }

            var firstPost = thread.Posts.First();

            thread.StartedByName   = firstPost.PostedByName;
            thread.StartedByUserId = firstPost.PostedByUserId;
            thread.StartedOn       = firstPost.PostedOn;
            thread.LastPostOn      = thread.Posts.Last().PostedOn;

            return(thread);
        }
예제 #18
0
        private static Influence?ExtractInfluence(CQ domObject)
        {
            var lastMod = domObject.Children().LastOrDefault();

            if (lastMod == null)
            {
                return(null);
            }

            if (lastMod.InnerHTML.Contains("Shaped"))
            {
                return(Influence.Shaper);
            }

            if (lastMod.InnerHTML.Contains("Elder"))
            {
                return(Influence.Elder);
            }

            return(null);
        }
        // GET: CnbcArabia
        public ActionResult Index()
        {
            ArrayList newsList    = new ArrayList();
            CQ        dom         = CQ.CreateFromUrl("http://www.cnbcarabia.com/news/latest");
            CQ        mainArticle = dom.Find("div.blog-news.clearfix");

            for (int i = 0; i < mainArticle.Length; i++)
            {
                CQ       article = mainArticle.Children().Eq(i);
                CQ       data    = article.Find(".blog-box-title").Eq(0).Children("a").Eq(0);
                newsData nData   = new newsData();
                nData.text    = data.Text().ToString();
                nData.alt_url = "http://www.cnbcarabia.com" + data.Attr("href").ToString();
                nData.url     = "";
                CQ img = article.Find("img").Eq(0);
                nData.url = "http://www.cnbcarabia.com" + img.Attr("src");
                newsList.Add(nData);
            }
            ViewBag.newsList = newsList;
            return(View());
        }
예제 #20
0
        static List <Tuple <string, string, string> > GetDownloads(string slug, int branchId, WebClient wc)
        {
            List <Tuple <string, string, string> > downloads = new List <Tuple <string, string, string> > ();
            // Get downloads
            string downloadsPage = wc.DownloadString(string.Format("http://www.desura.com/games/{0}/download/{1}", slug, branchId));
            CQ     csqDownload   = downloadsPage;
            CQ     dSearch       = csqDownload ["span.action:contains(Download)"];

            foreach (var dSpanE in dSearch)
            {
                CQ dSpan   = dSpanE.Cq();
                CQ parentA = dSpan.Closest("a");
                // Get download link
                string link = "http://www.desura.com" + parentA.Attr("href");

                // Get download name
                CQ infoBlock = parentA.Find(".buycontent .heading.clear");
                downloads.Add(new Tuple <string, string, string> (infoBlock.Children().Eq(0).Text(), infoBlock.Children().Eq(1).Text(), link));
            }

            return(downloads);
        }
예제 #21
0
        static void AddKeysToProduct(ProductInfo product, WebClient wc)
        {
            // Get keys
            string keysPage = wc.DownloadString(string.Format("http://www.desura.com/games/{0}/keys", product.Slug));
            CQ     csqKeys  = keysPage;
            CQ     kSearch  = csqKeys ["span.price:contains(Select),span.price:contains(Get)"];

            foreach (var kSpanE in kSearch)
            {
                CQ kSpan      = kSpanE.Cq();
                CQ parentSpan = kSpan.Closest("span.buy.clear");
                // Get key name
                string keyType   = kSpan.Parent().Find(".action").Text();
                CQ     infoBlock = parentSpan.Find(".buycontent .heading.clear");
                string keyName   = infoBlock.Children().Eq(0).Text();
                string name      = string.Format("{0} ({1})", keyName, keyType);
                // Get key
                string key = kSpan.Text() == "Select" ? parentSpan.Find(".summary [name=\"key\"]").Attr("value") : string.Format("Reveal key at http://www.desura.com/games/{0}/keys", product.Slug);

                product.Keys.Add(new NameKeyStringTuple(name, key));
            }
        }
예제 #22
0
        private static Socket[] ExtractSockets(CQ domObjects)
        {
            /*
             *  <div class="sockets-inner" style="position: relative; width:94px;">
             *      <div class="socket socketD "></div>
             *      <div class="socketLink socketLink0"></div>
             *      <div class="socket socketI "></div>
             *      <div class="socketLink socketLink1"></div>
             *      <div class="socket socketS socketRight"></div>
             *  </div>
             *
             *  or
             *
             *  <div class="sockets-inner" style="position: relative; width:94px;"></div>
             */

            var sockets = new List <Socket>();

            // Loop though sockets and links
            foreach (var domObject in domObjects.Children())
            {
                if (domObject.HasClass("socket"))
                {
                    var socket = new Socket {
                        Color = ExtractSocketColor(domObject)
                    };

                    sockets.Add(socket);
                }
                else if (domObject.HasClass("socketLink"))
                {
                    // Get previous socket and mark it as linked
                    sockets.Last().Linked = true;
                }
            }

            return(sockets.IsNullOrEmpty() ? null : sockets.ToArray());
        }
예제 #23
0
        public ActionResult getDetail(string url)
        {
            string str_url = "http://edition.cnn.com" + url;
            CQ     dom     = CQ.CreateFromUrl(str_url);

            dom = dom.Find("article.pg-rail-tall").Eq(0);
            CQ article = dom.Children("div.l-container").Eq(0);

            article = article.Remove("script");
            string aTitle = article.Children("h1").Eq(0).Text();
            string aText  = article.Find("div.pg-rail-tall__body").Eq(0).Children("section").Eq(0).Children("div").Eq(0).RenderSelection().ToString();
            CQ     mImg   = article.Find("div#large-media_0--thumbnail").Eq(0);
            string aImg   = "";

            if (mImg.Length != 0)
            {
                aImg = mImg.Children("img").Eq(0).Attr("src").ToString();
            }
            ViewBag.aTitle = aTitle;
            ViewBag.aText  = aText;
            ViewBag.aImg   = aImg;
            return(View());
        }
예제 #24
0
        public async Task <ReleaseInfo[]> PerformQuery(TorznabQuery query)
        {
            List <ReleaseInfo> releases = new List <ReleaseInfo>();


            foreach (var title in query.ShowTitles ?? new string[] { string.Empty })
            {
                var searchString     = title + " " + query.GetEpisodeSearchString();
                var episodeSearchUrl = string.Format("{0}?search={1}&cat=0", SearchUrl, HttpUtility.UrlEncode(searchString));
                var results          = await client.GetStringAsync(episodeSearchUrl);

                try
                {
                    CQ dom = results;

                    var table = dom["tbody > tr > .latest"].Parent().Parent();

                    foreach (var row in table.Children().Skip(1))
                    {
                        var release = new ReleaseInfo();

                        CQ qDetailsCol = row.ChildElements.ElementAt(1).Cq();
                        CQ qLink       = qDetailsCol.Children("a").First();

                        release.MinimumRatio    = 1;
                        release.MinimumSeedTime = 172800;
                        release.Comments        = new Uri(BaseUrl + "/" + qLink.Attr("href"));
                        release.Guid            = release.Comments;
                        release.Title           = qLink.Attr("title");
                        release.Description     = release.Title;

                        //"Tuesday, June 11th 2013 at 03:52:53 AM" to...
                        //"Tuesday June 11 2013 03:52:53 AM"
                        var timestamp = qDetailsCol.Children("font").Text().Trim() + " ";
                        var timeParts = new List <string>(timestamp.Replace(" at", "").Replace(",", "").Split(' '));
                        timeParts[2] = Regex.Replace(timeParts[2], "[^0-9.]", "");
                        var formattedTimeString = string.Join(" ", timeParts.ToArray()).Trim();
                        release.PublishDate = DateTime.ParseExact(formattedTimeString, "dddd MMMM d yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

                        release.Link = new Uri(BaseUrl + "/" + row.ChildElements.ElementAt(2).Cq().Children("a.index").Attr("href"));

                        var sizeCol  = row.ChildElements.ElementAt(6);
                        var sizeVal  = float.Parse(sizeCol.ChildNodes[0].NodeValue);
                        var sizeUnit = sizeCol.ChildNodes[2].NodeValue;
                        release.Size = ReleaseInfo.GetBytes(sizeUnit, sizeVal);

                        release.Seeders = int.Parse(row.ChildElements.ElementAt(8).Cq().Text(), NumberStyles.AllowThousands);
                        release.Peers   = int.Parse(row.ChildElements.ElementAt(9).Cq().Text(), NumberStyles.AllowThousands) + release.Seeders;

                        //if (!release.Title.ToLower().Contains(title.ToLower()))
                        //    continue;

                        releases.Add(release);
                    }
                }
                catch (Exception ex)
                {
                    OnResultParsingError(this, results, ex);
                    throw ex;
                }
            }

            return(releases.ToArray());
        }
예제 #25
0
        private static Stat[] ExtractStats(CQ domObject)
        {
            var stats = new List <Stat>();

            foreach (var domChild in domObject.Children())
            {
                foreach (var domChildChild in domChild.ChildElements)
                {
                    var cq = domChildChild.Cq();

                    if (!cq.HasAttr("data-name"))
                    {
                        continue;
                    }

                    var stat = new Stat {
                        Value = double.Parse(cq.Attr("data-value"), CultureInfo.InvariantCulture)
                    };

                    if (stat.Value <= 0)
                    {
                        continue;
                    }

                    switch (cq.Attr("data-name"))
                    {
                    case "q":
                        stat.Type = Stat.StatType.Quality;
                        break;

                    case "quality_pd":
                        stat.Type = Stat.StatType.Phys;
                        break;

                    case "ed":
                        stat.Type = Stat.StatType.Elem;
                        break;

                    case "aps":
                        stat.Type = Stat.StatType.Aps;
                        break;

                    case "quality_dps":
                        stat.Type = Stat.StatType.Dps;
                        break;

                    case "quality_pdps":
                        stat.Type = Stat.StatType.PDps;
                        break;

                    case "edps":
                        stat.Type = Stat.StatType.EDps;
                        break;

                    case "quality_armour":
                        stat.Type = Stat.StatType.Armour;
                        break;

                    case "quality_evasion":
                        stat.Type = Stat.StatType.Evasion;
                        break;

                    case "quality_shield":
                        stat.Type = Stat.StatType.Shield;
                        break;

                    case "block":
                        stat.Type = Stat.StatType.Block;
                        break;

                    case "crit":
                        stat.Type = Stat.StatType.Crit;
                        break;

                    case "level":
                        stat.Type = Stat.StatType.Level;
                        break;
                    }

                    stats.Add(stat);
                }
            }

            return(stats.IsNullOrEmpty() ? null : stats.ToArray());
        }
예제 #26
0
        private static Mod[] ExtractMods(CQ domObject)
        {
            /*
             *  <ul class="mods">
             *    <li class="sortable" data-name="#+#% to Cold Resistance" data-value="30.0" style="color:#3F6DB3">+<b>30</b>% to Cold Resistance
             *       <span class="item-affix item-affix-S">
             *       <span class="affix-info-short">S4</span>
             *       <span class="affix-info-full">Tier 4 suffix: of the Walrus, min=[30] max=[35]</span>
             *       </span>
             *    </li>
             *    <li class="sortable" data-name="#+#% to Lightning Resistance" data-value="13.0" style="color:#ADAA47">+<b>13</b>% to Lightning Resistance
             *       <span class="item-affix item-affix-S">
             *       <span class="affix-info-short">S7</span>
             *       <span class="affix-info-full">Tier 7 suffix: of the Squall, min=[12] max=[17]</span>
             *       </span>
             *    </li>
             *  </ul>
             *
             *  or
             *
             *  <ul class="mods">
             *      <li class="" data-name="#Enchants a rare item with a new random modifier" data-value="0" style="">Enchants a rare item with a new random modifier</li>
             *  </ul>
             */

            if (domObject.Children().IsNullOrEmpty())
            {
                return(null);
            }

            var mods = new List <Mod>();

            foreach (var domChild in domObject.Children())
            {
                var name = domChild.GetAttribute("data-name");
                if (name.IsNullOrEmpty())
                {
                    continue;
                }

                var mod = new Mod {
                    Name = name
                };

                var val = domChild.GetAttribute("data-value");
                if (!val.IsNullOrEmpty())
                {
                    mod.Value = double.Parse(val, CultureInfo.InvariantCulture);

                    if (mod.Value.Equals(0.0))
                    {
                        mod.Value = null;
                    }
                }

                var tiers = domChild.Cq().Find(".item-affix>span");
                mod.TierShort = tiers.FirstOrDefault(t => t.HasClass("affix-info-short"))?.InnerHTML;
                mod.TierLong  = tiers.FirstOrDefault(t => t.HasClass("affix-info-full"))?.InnerHTML;

                mods.Add(mod);
            }

            return(mods.ToArray());
        }
예제 #27
0
        private static Requirement[] ExtractRequirements(CQ domObject)
        {
            /*
             *  <ul class="requirements proplist">
             *     <li>Level:&nbsp;52</li>
             *     <li>Intelligence:&nbsp;17</li>
             *     <li><span class="sortable" data-name="ilvl">ilvl: 76</span></li>
             *  </ul>
             *
             *  or
             *
             *  <ul class="requirements proplist"></ul>
             */

            if (domObject.Children().IsNullOrEmpty())
            {
                return(null);
            }

            var requirements = new List <Requirement>();

            foreach (var domChild in domObject.Children())
            {
                var requirement = new Requirement();
                requirements.Add(requirement);

                if (domChild.InnerHTML.Contains("Level"))
                {
                    requirement.Type = Requirement.RequirementType.Level;
                }
                else if (domChild.InnerHTML.Contains("Intelligence"))
                {
                    requirement.Type = Requirement.RequirementType.Int;
                }
                else if (domChild.InnerHTML.Contains("Strength"))
                {
                    requirement.Type = Requirement.RequirementType.Str;
                }
                else if (domChild.InnerHTML.Contains("Dexterity"))
                {
                    requirement.Type = Requirement.RequirementType.Dex;
                }
                else if (domChild.InnerHTML.Contains("ilvl"))
                {
                    requirement.Type = Requirement.RequirementType.ItemLevel;
                }
                else if (domChild.InnerHTML.Contains("Max sockets"))
                {
                    requirement.Type = Requirement.RequirementType.MaxSocket;
                }

                var match = IntRegex.Match(domChild.InnerHTML);
                if (match.Success)
                {
                    requirement.Value = int.Parse(match.Groups[0].Value);
                }
            }


            return(requirements.ToArray());
        }
예제 #28
0
        public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query)
        {
            var releases   = new List <ReleaseInfo>();
            var searchurls = new List <string>();
            var searchUrl  = string.Format(SearchUrl, HttpUtility.UrlEncode(query.GetQueryString()));
            var results    = await RequestStringWithCookiesAndRetry(searchUrl);

            try
            {
                CQ          dom = results.Content;
                ReleaseInfo release;

                int rowCount = 0;
                var rows     = dom[".mainblockcontenttt > tbody > tr"];
                foreach (var row in rows)
                {
                    CQ qRow = row.Cq();
                    if (rowCount < 2 || qRow.Children().Count() != 12) //skip 2 rows because there's an empty row & a title/sort row
                    {
                        rowCount++;
                        continue;
                    }

                    release = new ReleaseInfo();

                    release.Title       = qRow.Find("td.mainblockcontent b a").Text();
                    release.Description = release.Title;

                    if (0 != qRow.Find("td.mainblockcontent u").Length)
                    {
                        var  imdbStr = qRow.Find("td.mainblockcontent u").Parent().First().Attr("href").Replace("http://www.imdb.com/title/tt", "").Replace("/", "");
                        long imdb;
                        if (ParseUtil.TryCoerceLong(imdbStr, out imdb))
                        {
                            release.Imdb = imdb;
                        }
                    }

                    release.MinimumRatio    = 1;
                    release.MinimumSeedTime = 172800;



                    int seeders, peers;
                    if (ParseUtil.TryCoerceInt(qRow.Find("td").Get(9).FirstChild.FirstChild.InnerText, out seeders))
                    {
                        release.Seeders = seeders;
                        if (ParseUtil.TryCoerceInt(qRow.Find("td").Get(10).FirstChild.FirstChild.InnerText, out peers))
                        {
                            release.Peers = peers + release.Seeders;
                        }
                    }

                    string fullSize = qRow.Find("td.mainblockcontent").Get(6).InnerText;
                    release.Size = ReleaseInfo.GetBytes(fullSize);

                    release.Guid     = new Uri(SiteLink + "/" + qRow.Find("td.mainblockcontent b a").Attr("href"));
                    release.Link     = new Uri(SiteLink + "/" + qRow.Find("td.mainblockcontent").Get(3).FirstChild.GetAttribute("href"));
                    release.Comments = new Uri(SiteLink + "/" + qRow.Find("td.mainblockcontent b a").Attr("href") + "#comments");

                    string[] dateSplit  = qRow.Find("td.mainblockcontent").Get(5).InnerHTML.Split(',');
                    string   dateString = dateSplit[1].Substring(0, dateSplit[1].IndexOf('>'));
                    release.PublishDate = DateTime.Parse(dateString, CultureInfo.InvariantCulture);

                    releases.Add(release);
                }
            }
            catch (Exception ex)
            {
                OnParseError(results.Content, ex);
            }

            return(releases);
        }
예제 #29
0
        protected override async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query)
        {
            var releases     = new List <ReleaseInfo>();
            var searchString = query.GetQueryString();

            // search in normal + gems view
            foreach (var view in new string[] { "0", "1" })
            {
                var queryCollection = new NameValueCollection();

                queryCollection.Add("view", view);
                queryCollection.Add("searchtype", "1");
                queryCollection.Add("incldead", "1");
                if (!string.IsNullOrWhiteSpace(searchString))
                {
                    queryCollection.Add("search", searchString);
                }

                foreach (var cat in MapTorznabCapsToTrackers(query))
                {
                    queryCollection.Add(string.Format("c{0}", cat), "1");
                }

                var searchUrl = SearchUrl + "?" + queryCollection.GetQueryString();

                var results = await RequestStringWithCookiesAndRetry(searchUrl);

                if (results.IsRedirect)
                {
                    // re-login
                    await ApplyConfiguration(null);

                    results = await RequestStringWithCookiesAndRetry(searchUrl);
                }

                try
                {
                    CQ  dom  = results.Content;
                    var rows = dom["#torrentBrowse > table > tbody > tr"];
                    foreach (var row in rows.Skip(1))
                    {
                        var release = new ReleaseInfo();
                        CQ  qRow    = row.Cq();

                        release.MinimumRatio    = 0;
                        release.MinimumSeedTime = 2 * 24 * 60 * 60;

                        var qLink = qRow.Find("a[title][href^=\"details.php?id=\"]");
                        release.Title    = qLink.Attr("title");
                        release.Guid     = new Uri(SiteLink + qLink.Attr("href").TrimStart('/'));
                        release.Comments = release.Guid;

                        qLink        = qRow.Children().ElementAt(3).Cq().Children("a").First();
                        release.Link = new Uri(string.Format("{0}{1}", SiteLink, qLink.Attr("href")));

                        var catUrl = qRow.Children().ElementAt(0).FirstElementChild.Cq().Attr("href");
                        var catNum = catUrl.Split(new char[] { '=', '&' })[2].Replace("c", "");
                        release.Category = MapTrackerCatToNewznab(catNum);

                        var dateString = qRow.Children().ElementAt(6).Cq().Text().Trim();
                        if (dateString.Contains("ago"))
                        {
                            release.PublishDate = DateTimeUtil.FromTimeAgo(dateString);
                        }
                        else
                        {
                            release.PublishDate = DateTime.ParseExact(dateString, "yyyy-MM-ddHH:mm:ss", CultureInfo.InvariantCulture);
                        }

                        var sizeStr = qRow.Children().ElementAt(7).Cq().Text().Split(new char[] { '/' })[0];
                        release.Size = ReleaseInfo.GetBytes(sizeStr);

                        release.Seeders = ParseUtil.CoerceInt(qRow.Children().ElementAt(8).Cq().Text().Split(new char[] { '/' })[0].Trim());
                        release.Peers   = ParseUtil.CoerceInt(qRow.Children().ElementAt(8).Cq().Text().Split(new char[] { '/' })[1].Trim()) + release.Seeders;
                        release.Files   = ParseUtil.CoerceLong(qRow.Find("td:nth-child(5)").Text());
                        release.Grabs   = ParseUtil.CoerceLong(qRow.Find("a[href^=\"snatches.php?id=\"]").Text().Split(' ')[0]);

                        release.DownloadVolumeFactor = 0;
                        release.UploadVolumeFactor   = 1;

                        var desc = qRow.Find("td:nth-child(2)");
                        desc.Find("a").Remove();
                        desc.Find("small").Remove(); // Remove release name (if enabled in the user cp)
                        release.Description = desc.Text().Trim(new char[] { '-', ' ' });

                        releases.Add(release);
                    }
                }
                catch (Exception ex)
                {
                    OnParseError(results.Content, ex);
                }
            }

            return(releases);
        }
예제 #30
0
        public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query)
        {
            var releases        = new List <ReleaseInfo>();
            var searchString    = query.GetQueryString();
            var queryCollection = new NameValueCollection();

            queryCollection.Add("view", "0");
            if (!string.IsNullOrWhiteSpace(searchString))
            {
                queryCollection.Add("search", searchString);
            }

            foreach (var cat in MapTorznabCapsToTrackers(query))
            {
                queryCollection.Add(string.Format("c{0}", cat), "1");
            }

            var searchUrl = SearchUrl + "?" + queryCollection.GetQueryString();

            var results = await RequestStringWithCookiesAndRetry(searchUrl, CookieHeader);

            try
            {
                CQ  dom  = results.Content;
                var rows = dom["#torrentBrowse > table > tbody > tr"];
                foreach (var row in rows.Skip(1))
                {
                    var release = new ReleaseInfo();
                    CQ  qRow    = row.Cq();

                    //CQ qLink = qRow.Children().ElementAt(1).Cq().Children("a").ElementAt(1).Cq();
                    CQ qLink;
                    CQ qTmp = qRow.Children().ElementAt(1).Cq().Find("a");
                    if (qTmp.Length < 2)
                    {
                        qLink = qRow.Children().ElementAt(1).Cq().Find("a").ElementAt(0).Cq();
                    }
                    else
                    {
                        qLink = qRow.Children().ElementAt(1).Cq().Find("a").ElementAt(1).Cq();
                    }

                    release.MinimumRatio    = 1;
                    release.MinimumSeedTime = 172800;
                    release.Title           = qLink.Attr("title");
                    release.Description     = release.Title;
                    release.Guid            = new Uri(SiteLink + qLink.Attr("href").TrimStart('/'));
                    release.Comments        = release.Guid;

                    qLink        = qRow.Children().ElementAt(3).Cq().Children("a").First();
                    release.Link = new Uri(string.Format("{0}{1}", SiteLink, qLink.Attr("href")));

                    var catUrl = qRow.Children().ElementAt(0).FirstElementChild.Cq().Attr("href");
                    var catNum = catUrl.Split(new char[] { '=', '&' })[2].Replace("c", "");
                    release.Category = MapTrackerCatToNewznab(catNum);

                    var dateString = qRow.Children().ElementAt(6).Cq().Text().Trim();
                    //var pubDate = DateTime.ParseExact(dateString, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
                    release.PublishDate = Jackett.Utils.DateTimeUtil.FromTimeAgo(dateString);

                    var sizeStr = qRow.Children().ElementAt(7).Cq().Text().Split(new char[] { '/' })[0];
                    release.Size = ReleaseInfo.GetBytes(sizeStr);

                    release.Seeders = ParseUtil.CoerceInt(qRow.Children().ElementAt(8).Cq().Text().Split(new char[] { '/' })[0].Trim());
                    release.Peers   = ParseUtil.CoerceInt(qRow.Children().ElementAt(8).Cq().Text().Split(new char[] { '/' })[1].Trim()) + release.Seeders;

                    releases.Add(release);
                }
            }
            catch (Exception ex)
            {
                OnParseError(results.Content, ex);
            }

            return(releases);
        }