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; }
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; }
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"); }
public BoundExpressionSelector(string name, BoundExpression expression, params Selector[] selectors) : base(name, selectors) { _expression = expression; }