Collect a lot more data.
This commit is contained in:
@@ -1,6 +1,38 @@
|
||||
use log::debug;
|
||||
use unhtml::{self, FromHtml, VecFromHtml};
|
||||
use unhtml_derive::FromHtml;
|
||||
|
||||
use crate::context::Context;
|
||||
use crate::probe::Probe;
|
||||
|
||||
#[derive(Debug, FromHtml)]
|
||||
#[html(selector = "#content")]
|
||||
struct Page {
|
||||
#[html(selector = "#toporganisations > li")]
|
||||
owners: Vec<Owner>,
|
||||
|
||||
#[html(selector = "#calls > ol.table > li")]
|
||||
calls: Vec<Call>,
|
||||
}
|
||||
|
||||
#[derive(Debug, FromHtml)]
|
||||
struct Owner {
|
||||
#[html(selector = "a", attr = "inner")]
|
||||
title: String,
|
||||
|
||||
#[html(selector = "span", attr = "inner")]
|
||||
calls: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, FromHtml)]
|
||||
struct Call {
|
||||
#[html(selector = ".w40", attr = "inner")]
|
||||
who: String,
|
||||
|
||||
#[html(selector = ".w15", attr = "inner")]
|
||||
date: String,
|
||||
}
|
||||
|
||||
pub struct VemRingde;
|
||||
|
||||
impl Probe for VemRingde {
|
||||
@@ -9,7 +41,7 @@ impl Probe for VemRingde {
|
||||
}
|
||||
|
||||
fn search(&mut self, ctx: &mut Context, number: &str) -> Result<(), ()> {
|
||||
let _body = if let Some(cache) = ctx.cache_get("vem_ringde", &number) {
|
||||
let body = if let Some(cache) = ctx.cache_get("vem_ringde", &number) {
|
||||
String::from_utf8(cache.data).unwrap()
|
||||
} else {
|
||||
let body = reqwest::get(&self.uri(number)).unwrap().text().unwrap();
|
||||
@@ -20,6 +52,36 @@ impl Probe for VemRingde {
|
||||
body
|
||||
};
|
||||
|
||||
println!("vemringde.se:");
|
||||
|
||||
if let Ok(page) = Page::from_html(&body) {
|
||||
if !page.owners.is_empty() {
|
||||
println!(" ägare:");
|
||||
|
||||
for owner in &page.owners {
|
||||
println!(" * {} - {}", owner.title, owner.calls);
|
||||
}
|
||||
}
|
||||
|
||||
if !page.calls.is_empty() {
|
||||
if !page.owners.is_empty() {
|
||||
println!();
|
||||
}
|
||||
|
||||
println!(" samtal:");
|
||||
|
||||
for call in &page.calls {
|
||||
println!(" * {}: {}", call.date, call.who);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if let Err(error) = Page::from_html(&body) {
|
||||
debug!("vemringde: failed to parse page: {:#?}", error);
|
||||
}
|
||||
|
||||
println!(" Failed to find any data");
|
||||
}
|
||||
|
||||
Err(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user