コード例 #1
0
ファイル: Cn64AutoRu.cs プロジェクト: kuzminyv/ad-collector
        private List<Ad> GetAdsByUrl(string url)
        {
            string content = WebHelper.GetStringFromUrl(url);

            BoundExpression exp = new BoundExpression(
                new BoundExpressionGroup("Price", new BoundSelector("color:#ffffff; white-space:nowrap; padding:2px 5px 0px 5px'>", "</span>")),
                new BoundExpressionGroup("DetailUrl", new BoundSelector("<a href='", "'")),
                new BoundExpressionGroup("Header", new BoundSelector(">", "</a>")),
                new BoundExpressionGroup("Text", new BoundSelector("</h3>", "<small class='artdate'>")),
                new BoundExpressionGroup("Date",
                    new BoundSelector("<nobr><b>", "</b>"),
                    new BoundSelector("<nobr>", ", <a")));

            List<Ad> result = new List<Ad>();
            foreach (var match in exp.Matches(content))
            {
                result.Add(new Ad()
                {
                    Title     = match["Header"] + " " + match["Price"],
                    Description       = match["Text"],
                    Url = SourceUrl + match["DetailUrl"],
                    PublishDate       = ParseDate(match["Date"]),
                    ConnectorId  = this.SourceUrl
                });
            }

            return result;
        }
コード例 #2
0
        private List<Ad> GetAdsByUrl(string url)
        {
            string content = WebHelper.GetStringFromUrl(url);

            BoundExpression exp = new BoundExpression(
                new BoundExpressionGroup("DetailsUrl", new BoundSelector("<div class=\"field\">Марка:</div>", "href=\"", "\">")),
                new BoundExpressionGroup("CarModel", new BoundSelector("<b>", "</b>")),
                new BoundExpressionGroup("CarYear", new BoundSelector("<div class=\"field\">Год выпуска:</div>", "<div class=\"value\">", "</div>")),
                new BoundExpressionGroup("CarRun", new BoundSelector("<div class=\"field\">Пробег:</div>", "<div class=\"value\">", "</div>")),
                new BoundExpressionGroup("CarPrice", new BoundSelector("<div class=\"field\">Цена:</div>", "<div class=\"value\">", "</div>")),
                new BoundExpressionGroup("Date", new BoundSelector("<div class=\"field\">Размещено:</div>", "<div class=\"value\">", "</div>")));

            List<Ad> result = new List<Ad>();
            foreach (var match in exp.Matches(content))
            {
                result.Add(new Ad()
                {
                    Title = String.Format("Продаю {0} {1}", match["CarModel"], match["CarPrice"]),
                    Description = String.Format("{0} {1}, {2} года выпуска, пробег {3}", match["CarModel"], match["CarPrice"], match["CarYear"], match["CarRun"]),
                    Url = match["DetailsUrl"],
                    PublishDate = ParseDate(match["Date"]),
                    ConnectorId = this.SourceUrl
                });
            }

            return result;
        }
コード例 #3
0
        public void ExpressionTest_Match()
        {
            BoundExpressionGroup vendorGroup1 = new BoundExpressionGroup("Vendor", new BoundSelector("<div>", "автомобиль1</div> <div>", "</div>"));
            BoundExpressionGroup vendorGroup2 = new BoundExpressionGroup("Vendor", new BoundSelector("<div>", "автомобиль2</div> <div>", "</div>"));
            BoundExpressionGroup yearGroup = new BoundExpressionGroup("Year", new BoundSelector("выпуска <br>", "</br>"));

            string content = @"<div>Продается автомобиль1</div> <div>Opel</div>Год выпуска <br> 2000 </br>
                           Delimitters <div>Продается автомобиль2</div> <div>BMW</div> Год выпуска <br>1111 </br> Delimitters";

            var tokens = new List<BoundExpressionToken>();
            tokens.Add(new BoundExpressionCondition(
                vendorGroup1, new BoundExpressionGroup[]{vendorGroup1, yearGroup},
                vendorGroup2, new BoundExpressionGroup[]{vendorGroup2, yearGroup}));

            BoundExpression expr = new BoundExpression(tokens);

            var matches = expr.Matches(content);

            Assert.AreEqual(matches.Count, 2);

            Assert.AreEqual(matches[0]["Vendor"], "Opel");
            Assert.AreEqual(matches[0][yearGroup.Name], "2000");

            Assert.AreEqual(matches[1]["Vendor"], "BMW");
            Assert.AreEqual(matches[1][yearGroup.Name], "1111");
        }
コード例 #4
0
 public BoundExpressionSelector(string name, BoundExpression expression, params Selector[] selectors)
     : base(name, selectors)
 {
     _expression = expression;
 }