示例#1
0
        public IRuleObject[] Parse(CsQuery.IDomObject trNode)
        {
            var leftNode  = trNode.ChildNodes.First(node => node.NodeName == NodeTypes.Td).Cq();
            var rightNode = trNode.ChildNodes.Last(node => node.NodeName == NodeTypes.Td).Cq();

            var numberText = GetNumberText(leftNode);
            var numbers    = GetNumbers(numberText);

            var urls        = GetUrls(rightNode);
            var images      = GetImages(urls);
            var description = GetDescription(rightNode);

            var numbersStack = new Stack <String>(numbers);
            var imagesStack  = new Stack <byte[]>(images);
            List <IRuleObject> ruleObjects = new List <IRuleObject>();

            while (numbersStack.Any())
            {
                var number = numbersStack.Pop();
                var image  = imagesStack.Pop();

                var ruleObject = Create();
                ruleObject.Num         = number;
                ruleObject.Image       = image;
                ruleObject.Description = description;

                ruleObjects.Add(ruleObject);
            }
            return(ruleObjects.ToArray());
        }
示例#2
0
        public bool VisitTo(string addr)
        {
            bool result = true;

            HttpWebRequest clientVisit = CreateWebRequest(addr, Method.GET);

            clientVisit.CookieContainer.Add(Cookies); // add cookies to container

            WebResponse requestVisit = clientVisit.GetResponse();

            using (Stream streamGetData = requestVisit.GetResponseStream())
            {
                using (StreamReader reader = new StreamReader(streamGetData))
                {
                    CsQuery.CQ DOM = CsQuery.CQ.Create(reader);                                                                                        // parse html

                    CsQuery.IDomObject  profile     = DOM.Find("div").Where(e => e.ClassName == "logininfo").FirstOrDefault();                         // find profile block
                    CsQuery.IDomElement profileName = profile?.ChildElements.Where(e => e.Attributes["title"] == "Просмотр профиля").FirstOrDefault(); // find name

                    if (profileName != null)
                    {
                        Console.WriteLine($"User: { profileName.FirstChild }");
                        Console.WriteLine($"Visit: `{ DOM.Find("title").Text() }`"); // return title course
                    }
                    else
                    {
                        Console.WriteLine("ERROR LOGIN");
                    }
                }
            }

            requestVisit.Close();
            return(result);
        }
示例#3
0
        private string GetCommentFromBookmark(CsQuery.IDomObject element)
        {
            var sibling = element.NextSibling;
            var text    = sibling.InnerText.Trim();

            if (text.Length < 1)
            {
                return(string.Empty);
            }

            return(text);
        }
示例#4
0
        public static String ParseNode(CsQuery.IDomObject node, int level = 0)
        {
            var result = String.Empty;

            if (node.NodeName == NodeTypes.Text && (node.NodeValue ?? String.Empty).Trim() != String.Empty)
            {
                result = String.Format("<Run>{0}</Run>", node.NodeValue);
            }
            if (node.NodeName == NodeTypes.Header)
            {
                if (HeaderAppeared != null)
                {
                    HeaderAppeared(null, new HeaderEventArgs(node));
                }
            }
            if (node.NodeName == NodeTypes.Paragraph)
            {
                var pattern = @"<Paragraph xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">{0}</Paragraph>";
                if (node.ChildNodes.Any())
                {
                    var content = String.Join(GetIdent(level + 1), node.ChildNodes.Select(childNode => ParseNode(childNode, level + 1)));
                    result = String.Format(pattern, content);
                }
                else
                {
                    result = String.Format(pattern, node.NodeValue);
                }
            }
            if (new String[] { NodeTypes.Bold, NodeTypes.Italic }.Contains(node.NodeName))
            {
                var pattern = PatternFactory.Get(node.NodeName);
                if (node.ChildNodes.Any())
                {
                    var content = String.Join(GetIdent(level + 1), node.ChildNodes.Select(childNode => ParseNode(childNode, level + 1)));
                    result = String.Format(pattern, content);
                }
                else
                {
                    result = String.Format(pattern, node.NodeValue);
                }
            }
            if (new String[] { NodeTypes.Font, NodeTypes.Span }.Contains(node.NodeName))
            {
                if (node.Classes.Contains("pdd-inline-sign"))
                {
                    var type     = "sign";
                    var numRegex = new Regex(@"<span class=""pdd-inline-sign__text"">(?<num>[\w\.]+)</span>");
                    var num      = numRegex.Match(node.InnerHTML).Groups["num"].Value;

                    var match = new Regex(@"https://media.am.ru/pdd/(?<type>\w+)/(xs|l)/(?<num>[\w\.]+).png").Match(node.InnerHTML);
                    if (match != null && match.Groups["type"].Value != String.Empty)
                    {
                        type = match.Groups["type"].Value;
                        if (type == "marking")
                        {
                            type = "mark";
                        }
                    }

                    return(String.Format("<Run> @@{{{0}s}}{1}@@ </Run>", type, num));
                }
                else if (node.ChildNodes.Any())
                {
                    result = String.Join(GetIdent(level + 1), node.ChildNodes.Select(childNode => ParseNode(childNode, level + 1)));
                }
            }
            if (node.NodeName == NodeTypes.List)
            {
                result = String.Join(Environment.NewLine, node.ChildNodes.Select(childNode => ParseNode(childNode, level + 1)));
            }
            if (node.NodeName == NodeTypes.ListItem)
            {
                result = String.Join(GetIdent(level + 1), node.ChildNodes.Select(childNode => "<Run>-</Run>" + ParseNode(childNode, level + 1)));
            }
            if (level == 0 && result != String.Empty && !(new string[] { NodeTypes.Paragraph, NodeTypes.Header }).Contains(node.NodeName))
            {
                result = String.Format(@"<Paragraph xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">{0}</Paragraph>", result);
            }
            return(result);
        }
示例#5
0
 public HeaderEventArgs(CsQuery.IDomObject node)
 {
     this.Node = node;
 }