Beispiel #1
0
        public async Task <ScrapingResult> RunAsync()
        {
            Status = ScrapingStatus.Running;
            var result = new ScrapingResult(this);

            result.StartedAt = DateTime.UtcNow;
            result.Target    = Target?.ToString();
            result.Selector  = Selectors;

            try
            {
                // スクレイピング処理のコア(時間がかかります!)
                var(status, text) = IsDynamic
                    ? await RunDynamicAsync()
                    : await RunStaticAsync();

                result.Status = status;
                result.Text   = text;
                Status        = status == "success"
                    ? ScrapingStatus.Succeeded
                    : ScrapingStatus.Failed;
            }
            catch (Exception e)
            {
                result.Status = "exception";
                result.Text   = e.Message;
                Status        = ScrapingStatus.Failed;
            }

            result.CompletedAt = DateTime.UtcNow;

            return(result);
        }
Beispiel #2
0
        public string Diff(ScrapingResult result)
        {
            if (result?.Text == null)
            {
                return("Target is null");
            }

            if (result?.Text == Text)
            {
                return("Defference is not find.");
            }

            var diff = new HtmlDiff.HtmlDiff(result?.Text, Text);
            var html = diff.Build();

            return(html);
        }
Beispiel #3
0
        public void ShowResult(Models.ScrapingResult result)
        {
            var window = App.Current.Windows
                         .OfType <Views.ScrapingResultWindow>()
                         .FirstOrDefault(_ => _.ViewModel.Result.Id == result.Id);

            if (window != null)
            {
                window.Activate(); return;
            }

            window = new Views.ScrapingResultWindow(result)
            {
                Owner = MainWindow,
                WindowStartupLocation = WindowStartupLocation.CenterOwner,
            };

            window.Show();
        }
Beispiel #4
0
        public void NotifyErrorDetected(Models.ScrapingRule scraper, Models.ScrapingResult result)
        {
            Instance.ShowInformation($"{scraper.Name} is failed.");

            ErrorDetected?.Invoke(this, new DetectedEventArgs(scraper, result));
        }
Beispiel #5
0
 public DetectedEventArgs(Models.ScrapingRule scraper, Models.ScrapingResult result)
 {
     Scraper = scraper;
     Result  = result;
 }