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); }
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); }
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(); }
public void NotifyErrorDetected(Models.ScrapingRule scraper, Models.ScrapingResult result) { Instance.ShowInformation($"{scraper.Name} is failed."); ErrorDetected?.Invoke(this, new DetectedEventArgs(scraper, result)); }
public DetectedEventArgs(Models.ScrapingRule scraper, Models.ScrapingResult result) { Scraper = scraper; Result = result; }