Add list command
This commit is contained in:
parent
ba2cd87ec4
commit
05c114cca4
5 changed files with 40 additions and 10 deletions
7
TODO.md
7
TODO.md
|
@ -3,12 +3,13 @@
|
|||
* [x] Récupération prix darty avec [scraper](https://crates.io/crates/scraper) et [reqwest](https://crates.io/crates/reqwest)
|
||||
* [x] Ajout du support de la Fnac, …
|
||||
* [x] Récupération URL ligne de commande avec [clap](https://crates.io/crates/clap)
|
||||
* [ ] Ajout de SearchParser pour rechercher un article sur tous les parseurs
|
||||
* [ ] Commande de liste des différents parseurs
|
||||
* [ ] Ajout de SearchParser pour rechercher un article sur tous les parseurs - retour si pas trouvé - recherche sur un seul parser
|
||||
* [x] Commande de liste des différents parseurs
|
||||
* [ ] Ajout des pays avec [celes](https://crates.io/crates/celes) : recherche uniquement sur les parser du pays et parseur multi pays (amazon par exemple)
|
||||
* [ ] Lecture des URLs depuis un fichier avec [toml](https://crates.io/crates/toml)
|
||||
* [ ] Parallélisation des requêtes avce [rayon](rayon) ou reqwest asynchrone
|
||||
* [ ] Écriture dans un fichier ODS avec [calamine](https://crates.io/crates/calamine)
|
||||
* [ ] Notification si baisse de prix avec [notify-rust](https://crates.io/crates/notify-rust)
|
||||
* [ ] Mail si baisse de prix avec [lettre](https://crates.io/crates/lettre)
|
||||
* [ ] Lancement de la recherche régulière avec [Clokwerk](https://crates.io/crates/clokwerk)
|
||||
* [ ] Lancement de la recherche régulière avec [Clokwerk](https://crates.io/crates/clokwerk)
|
||||
* [ ] UI avec [Iced](https://crates.io/crates/iced)
|
14
TODO.md~
Normal file
14
TODO.md~
Normal file
|
@ -0,0 +1,14 @@
|
|||
# TODO
|
||||
|
||||
* [x] Récupération prix darty avec [scraper](https://crates.io/crates/scraper) et [reqwest](https://crates.io/crates/reqwest)
|
||||
* [x] Ajout du support de la Fnac, …
|
||||
* [x] Récupération URL ligne de commande avec [clap](https://crates.io/crates/clap)
|
||||
* [ ] Ajout de SearchParser pour rechercher un article sur tous les parseurs
|
||||
* [ ] Commande de liste des différents parseurs
|
||||
* [ ] Ajout des pays avec [celes](https://crates.io/crates/celes) : recherche uniquement sur les parser du pays et parseur multi pays (amazon par exemple)
|
||||
* [ ] Lecture des URLs depuis un fichier avec [toml](https://crates.io/crates/toml)
|
||||
* [ ] Parallélisation des requêtes avce [rayon](rayon) ou reqwest asynchrone
|
||||
* [ ] Écriture dans un fichier ODS avec [calamine](https://crates.io/crates/calamine)
|
||||
* [ ] Notification si baisse de prix avec [notify-rust](https://crates.io/crates/notify-rust)
|
||||
* [ ] Mail si baisse de prix avec [lettre](https://crates.io/crates/lettre)
|
||||
* [ ] Lancement de la recherche régulière avec [Clokwerk](https://crates.io/crates/clokwerk)
|
12
src/main.rs
12
src/main.rs
|
@ -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());
|
||||
},
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in a new issue