refactor main

This commit is contained in:
Dr. Matthias Ratajczak
2022-12-15 15:52:05 +01:00
parent 7f11abdbd4
commit 98c1d266b1
+17 -6
View File
@@ -1,6 +1,6 @@
mod extractor; mod extractor;
use anyhow::{anyhow, bail, Result}; use anyhow::{anyhow, bail, Context, Result};
use scraper::{Html, Selector}; use scraper::{Html, Selector};
use extractor::Extractor; use extractor::Extractor;
@@ -15,7 +15,7 @@ fn main() -> Result<()> {
let extractor = Extractor::new(); let extractor = Extractor::new();
for departure in get_departures(&html, &extractor) { for departure in get_departures(&html, &extractor) {
println!("{}", get_transport_line(departure)); println!("{}", get_transport_line(departure)?);
println!("{}", get_times(departure, &extractor)?); println!("{}", get_times(departure, &extractor)?);
println!(); println!();
} }
@@ -24,11 +24,19 @@ fn main() -> Result<()> {
fn get_times(departure: scraper::ElementRef, extractor: &Extractor) -> Result<String> { fn get_times(departure: scraper::ElementRef, extractor: &Extractor) -> Result<String> {
let delay = extract_delay(departure, &extractor.delay); let delay = extract_delay(departure, &extractor.delay);
for time_block in departure.select(&extractor.time).next().unwrap().children() { for time_block in departure
.select(&extractor.time)
.next()
.context("extracting time block")?
.children()
{
let value = time_block.value(); let value = time_block.value();
if value.is_text() { if value.is_text() {
let scheduled_time = value.as_text().unwrap().trim(); let scheduled_time = value
.as_text()
.context("extracting text of scheduled time")?
.trim();
if !scheduled_time.is_empty() { if !scheduled_time.is_empty() {
let mut result = "Abfahrt: ".to_owned(); let mut result = "Abfahrt: ".to_owned();
result.push_str(scheduled_time); result.push_str(scheduled_time);
@@ -48,9 +56,12 @@ fn get_departures<'a>(html: &'a Html, extractor: &'a Extractor) -> scraper::html
html.select(&extractor.departure) html.select(&extractor.departure)
} }
fn get_transport_line(departure_block: scraper::ElementRef) -> &str { fn get_transport_line(departure_block: scraper::ElementRef) -> Result<&str> {
let val = departure_block.value(); let val = departure_block.value();
val.attr("data-filter").unwrap().trim() Ok(val
.attr("data-filter")
.context("accessing 'data-filter'")?
.trim())
} }
fn query_server() -> Result<String> { fn query_server() -> Result<String> {