コード例 #1
0
ファイル: WorkUnit1B.cs プロジェクト: AndreyOOP/SiteScrapper
        public IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult)
        {
            var inputModel = (In)input;

            siteParserResult.Prop1 = "WorkUnit_1_B set Prop1";
            return(new SiteBModelB());
        }
コード例 #2
0
ファイル: WorkUnit1A.cs プロジェクト: AndreyOOP/SiteScrapper
        public IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult)
        {
            var serviceA = serviceProvider.GetServiceA();

            siteParserResult.Prop1 = "WorkUnit_1_A set Prop1; " + serviceA.ExecuteServiceA();

            return(new SiteAModelA());
        }
コード例 #3
0
        public WorkUnitTree NextNode(IWorkUnitModel input, IWorkUnitModel output)
        {
            if (IsLastNode())
            {
                throw new InvalidOperationException("Last node reached");
            }

            var path = selectPath(input, output);

            return(treeNodePaths[path]);
        }
コード例 #4
0
        public override IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult)
        {
            var serviceB = serviceProvider.GetServiceB();

            var e = (ParserExecutorResult)siteParserResult;

            e.Zzz = 42;

            siteParserResult.Prop2 = "WorkUnit_2_A set Prop2; " + serviceB.ExecuteServiceB();

            return(new SiteAModelB());
        }
コード例 #5
0
        public IEnumerable <ParserExecutorResultBase> Parse(IWorkUnitModel id)
        {
            var result = new List <ParserExecutorResultBase>();

            foreach (var parser in factory.GetAll())
            {
                var siteResult = parser.Parse(id);
                result.Add(siteResult);
            }

            return(result);
        }
コード例 #6
0
        public IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult)
        {
            var inModel = (Input)input;

            var uri    = $"http://911auto.com.ua/search/{inModel.Id}";
            var result = httpClient.GetAsync(uri).Result;

            if (result.StatusCode == HttpStatusCode.OK)
            {
                var html = result.Content.ReadAsStringAsync().Result;
                return(new A0httpResponse {
                    Html = html
                });
            }
            siteParserResult.Exception = "Get Request Status is Not 200OK";
            return(null);
        }
コード例 #7
0
        public IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult)
        {
            var htmlDoc        = new HtmlDocument(); // use DI to inject new instance
            var a0httpResponse = (A0httpResponse)input;

            htmlDoc.LoadHtml(a0httpResponse.Html);

            var productHeader = htmlDoc.DocumentNode.SelectSingleNode("//div[@id='product_list']");
            var name          = productHeader.SelectSingleNode("//table/tr[@class='hl']/td/a")?.InnerText; // not found
            var site911Result = (Site911Result)siteParserResult;

            site911Result.ModelName = name;

            var script = htmlDoc.DocumentNode.SelectSingleNode("//script[@type='text/javascript']//text()[contains(., 'zakaz_blk_svc')]");

            return(new B0parseHtmlResult
            {
                QueryString = GetQuery(script.InnerText)
            });
        }
コード例 #8
0
        public TOut Parse(IWorkUnitModel input)
        {
            var node       = tree;
            var model      = input;
            var siteResult = (ParserExecutorResultBase) new TOut();

            for (;;)
            {
                if (siteResult.Exception != null)
                {
                    break;
                }

                var modelBeforeUpdate = model;

                try
                {
                    siteResult.ExecutionPath += $"{node.Unit.GetType().Name} > ";

                    model = node.Unit.Execute(model, ref siteResult);

                    if (node.IsLastNode())
                    {
                        break;
                    }

                    node = node.NextNode(modelBeforeUpdate, model);
                }
                catch (Exception ex)
                {
                    siteResult.Exception = JsonConvert.SerializeObject(new
                    {
                        UnitName = node.Unit.GetType().Name,
                        Message  = ex.Message,
                        Path     = siteResult.ExecutionPath
                    });
                }
            }

            return((TOut)siteResult);
        }
コード例 #9
0
        public IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult)
        {
            var b0parseHtmlResult = (B0parseHtmlResult)input;

            var body = new FormUrlEncodedContent(new[] {
                new KeyValuePair <string, string>("svc", "1"),
                new KeyValuePair <string, string>("q", b0parseHtmlResult.QueryString)
            });

            var result = httpClient.PostAsync("https://911auto.com.ua", body).Result;

            if (result.StatusCode == HttpStatusCode.OK)
            {
                var html = result.Content.ReadAsStringAsync().Result;
                return(new C0httpResponse {
                    Html = html
                });
            }
            siteParserResult.Exception = "Get Request Status is Not 200OK";
            return(null);
        }
コード例 #10
0
        public IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult)
        {
            var htmlDoc        = new HtmlDocument();
            var c0httpResponse = (C0httpResponse)input;

            htmlDoc.LoadHtml(c0httpResponse.Html);

            int i     = -1;
            var table = htmlDoc.DocumentNode.SelectNodes("//table/tr")
                        .Skip(1)
                        .Select(n => new TableRow {
                Price = n.SelectSingleNode($"//td[@id='zpuah{++i}']").InnerText,
                Days  = n.SelectSingleNode($"//td[@id='zdep{i}']").InnerText
            }).ToList();

            var x = (Site911Result)siteParserResult;

            x.Table = table;

            return(null);
        }
コード例 #11
0
 public IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult)
 {
     throw new Exception("Exception in work unit");
 }
コード例 #12
0
 public IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult)
 {
     return(workUnit);
 }
コード例 #13
0
 public abstract IWorkUnitModel Execute(IWorkUnitModel input, ref ParserExecutorResultBase siteParserResult);