refactor: implement Extractor

This commit is contained in:
Dr. Matthias Ratajczak
2022-12-15 15:34:47 +01:00
parent 5d2bb48a52
commit ed8adc027d
2 changed files with 37 additions and 19 deletions
+8 -19
View File
@@ -1,7 +1,10 @@
use anyhow::{anyhow, Result};
mod extractor;
use anyhow::{anyhow, Result};
use scraper::{Html, Selector};
use extractor::Extractor;
const SIEDLUNG: &str =
"https://www.vvo-online.de/de/fahrplan/aktuelle-abfahrten-ankuenfte/abfahrten?stopid=33006764";
@@ -9,17 +12,15 @@ fn main() -> Result<()> {
let message = query_server()?;
let html = Html::parse_document(&message);
let departure_selector = get_departure_selector();
let time_selector = get_time_selector();
let late_selector = get_late_selector();
let extractor = Extractor::new();
for departure_block in html.select(&departure_selector) {
for departure_block in html.select(&extractor.departure) {
let val = departure_block.value();
println!("{}", val.attr("data-filter").unwrap().trim());
let late = extract_delay(departure_block, &late_selector);
let late = extract_delay(departure_block, &extractor.delay);
for time_block in departure_block
.select(&time_selector)
.select(&extractor.time)
.next()
.unwrap()
.children()
@@ -42,10 +43,6 @@ fn main() -> Result<()> {
Ok(())
}
fn get_late_selector() -> Selector {
Selector::parse("span.late").unwrap()
}
fn query_server() -> Result<String> {
match ureq::get(SIEDLUNG).call() {
Ok(response) => Ok(response.into_string().map_err(|e| anyhow!(e))?),
@@ -59,11 +56,3 @@ fn extract_delay(departure_block: scraper::ElementRef, late_selector: &Selector)
.next()
.map(|content| content.inner_html())
}
fn get_time_selector() -> Selector {
Selector::parse("div.col.c2of12.tour p").unwrap()
}
fn get_departure_selector() -> Selector {
Selector::parse("li[data-filter][data-departure-id][data-departure-time]").unwrap()
}