use unhtml::FromHtml; use unhtml_derive::FromHtml; use crate::context::Context; use crate::probe::Probe; #[derive(Debug, FromHtml)] #[html(selector = "[itemtype='//data-vocabulary.org/Review-aggregate']")] struct Info { #[html(selector = "p", attr = "inner")] message: String, } // http://www.telefonforsaljare.nu/telefonnummer/{}/ pub struct Telefonforsaljare; impl Probe for Telefonforsaljare { fn search(&mut self, ctx: &mut Context, number: &str) -> Result<(), ()> { let body = if let Some(cache) = ctx.cache_get("telefonforsaljare", &number) { String::from_utf8(cache.data).unwrap() } else { reqwest::get(&format!( "http://www.telefonforsaljare.nu/telefonnummer/{}/", number )) .unwrap() .text() .unwrap() }; ctx.cache_set("telefonforsaljare", &number, body.as_bytes()) .expect("wut?! why not?!"); println!("telefonforsaljare.nu:"); if let Ok(info) = Info::from_html(&body) { println!(" {}", info.message); } else { println!(" Failed to find any data"); } Ok(()) } }