use std::env; use directories::ProjectDirs; use scraper::{Html, Selector}; trait Probe { fn search(&mut self, _: &str); } // https://www.hitta.se/vem-ringde/{} struct Hitta; impl Probe for Hitta { fn search(&mut self, number: &str) { let body = reqwest::get(&format!("https://www.hitta.se/vem-ringde/{}", number)) .unwrap() .text() .unwrap(); let document = Html::parse_document(&body); let selector = Selector::parse(r#"div[class^="Header__WhoCalledHeader"] > h1"#).unwrap(); print!("Hitta.se:"); for element in document.select(&selector) { println!(" {}", element.text().collect::()); } // Comments. let selector = Selector::parse(r#".topComment--comment"#).unwrap(); for element in document.select(&selector) { println!(" * {}", element.text().collect::()); } } } // https://gulasidorna.eniro.se/hitta:{} struct Eniro; impl Probe for Eniro { fn search(&mut self, _: &str) {} } // http://vemringde.se/?q={} struct VemRingde; impl Probe for VemRingde { fn search(&mut self, _: &str) {} } // http://www.telefonforsaljare.nu/telefonnummer/{}/ struct Telefonforsaljare; impl Probe for Telefonforsaljare { fn search(&mut self, _: &str) {} } // http://konsumentinfo.se/telefonnummer/sverige/{} struct KonsumentInfo; impl Probe for KonsumentInfo { fn search(&mut self, _: &str) {} } struct Context { dirs: ProjectDirs, } impl Context { fn new() -> Context { Context { dirs: ProjectDirs::from("com", "logaritmisk", "whoareyou").unwrap(), } } fn cache_get(&mut self, key: &str) -> Option> { None } fn cache_set(&mut self, key: &str) { } } fn main() { if let Some(proj_dirs) = ProjectDirs::from("com", "logaritmisk", "whoareyou") { println!("{:?}", proj_dirs.cache_dir()); } std::process::exit(0); let number = env::args() .nth(1) .expect("must specify a number to search for"); let mut probes: Vec> = vec![ Box::new(Hitta), Box::new(Eniro), Box::new(VemRingde), Box::new(Telefonforsaljare), Box::new(KonsumentInfo), ]; for probe in &mut probes { probe.search(&number); } }