Add list command

This commit is contained in:
Rémi BERTHO 2020-07-20 21:56:49 +02:00
parent ba2cd87ec4
commit 05c114cca4
Signed by: dalan
GPG key ID: EE3B917931C07B64
5 changed files with 40 additions and 10 deletions

View file

@ -30,6 +30,8 @@ fn main() -> Result<()> {
.required(true)
.multiple(true)
.help("The name of the object")))
.subcommand(SubCommand::with_name("list")
.about("List the parsers"))
.get_matches();
let price_checker = PriceChecker::new().unwrap();
match matches.subcommand() {
@ -54,6 +56,16 @@ fn main() -> Result<()> {
}
}
},
("list", _) => {
println!("Price parsers:");
for parser in price_checker.parser_list.get_price().iter() {
println!(" - {}", parser.name());
}
println!("Search parsers:");
for parser in price_checker.parser_list.get_search().iter() {
println!(" - {}", parser.name());
}
},
_ => {
println!("{}", matches.usage());
},

View file

@ -64,12 +64,15 @@ impl SearchParser for Amazon {
}
fn search(&self, html : &Html) -> Result<Option<Url>> {
let search_element_1 = html.select(&self.search_selector_1).next().ok_or(anyhow!("No search element 1"))?;
let search_element_2 = search_element_1.select(&self.search_selector_2).next().ok_or(anyhow!("No search element 2"))?;
let path_url = search_element_2.value().attr("href").ok_or(anyhow!("No link element"))?;
let mut url = Url::parse("https://www.amazon.fr").unwrap();
url.set_path(path_url.split("/ref").next().unwrap_or(path_url));
Ok(Option::Some(url))
if let Some(search_element_1) = html.select(&self.search_selector_1).next() {
let search_element_2 = search_element_1.select(&self.search_selector_2).next().ok_or(anyhow!("No search element 2"))?;
let path_url = search_element_2.value().attr("href").ok_or(anyhow!("No link element"))?;
let mut url = Url::parse("https://www.amazon.fr").unwrap();
url.set_path(path_url.split("/ref").next().unwrap_or(path_url));
Ok(Option::Some(url))
} else {
Ok(None)
}
}
}

View file

@ -13,7 +13,7 @@ const USER_AGENT: &str = "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/2010010
/// Struct used to get price from a website
pub struct PriceChecker {
client: Client,
parser_list: parser::List
pub parser_list: parser::List
}
impl PriceChecker {