Rename parser
This commit is contained in:
parent
38afb86753
commit
bddd41dde8
4 changed files with 9 additions and 7 deletions
4
TODO.md
4
TODO.md
|
@ -3,8 +3,10 @@
|
||||||
* [ ] Récupération prix darty avec [scraper](https://crates.io/crates/scraper) et [reqwest](https://crates.io/crates/reqwest)
|
* [ ] Récupération prix darty avec [scraper](https://crates.io/crates/scraper) et [reqwest](https://crates.io/crates/reqwest)
|
||||||
* [ ] Ajout du support de la Fnac, …
|
* [ ] Ajout du support de la Fnac, …
|
||||||
* [ ] Récupération URL ligne de commande avec [clap](https://crates.io/crates/clap)
|
* [ ] Récupération URL ligne de commande avec [clap](https://crates.io/crates/clap)
|
||||||
|
* [ ] Ajout de SearchParser pour recherché un article sur tous les parseurs
|
||||||
|
* [ ] Ajout des pays avec [celes](https://crates.io/crates/celes) : recherche uniquement sur les parser du pays et parseur multi pays (amazon)
|
||||||
* [ ] Lecture des URLs depuis un fichier avec [toml](https://crates.io/crates/toml)
|
* [ ] Lecture des URLs depuis un fichier avec [toml](https://crates.io/crates/toml)
|
||||||
* [ ] Parallélisation des requêtes avce [rayon](rayon)
|
* [ ] Parallélisation des requêtes avce [rayon](rayon) ou reqwest asynchrone
|
||||||
* [ ] Écriture dans un fichier ODS avec [calamine](https://crates.io/crates/calamine)
|
* [ ] É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)
|
* [ ] 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)
|
* [ ] Mail si baisse de prix avec [lettre](https://crates.io/crates/lettre)
|
||||||
|
|
|
@ -8,16 +8,16 @@ use crate::price_result::PriceResult;
|
||||||
use arraygen::Arraygen;
|
use arraygen::Arraygen;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
|
||||||
pub trait Parser{
|
pub trait PriceParser{
|
||||||
fn new() -> Self where Self :Sized;
|
fn new() -> Self where Self :Sized;
|
||||||
fn can_parse(&self, url : &Url) -> bool;
|
fn can_parse(&self, url : &Url) -> bool;
|
||||||
fn parse(&self, html : &Html) -> PriceResult;
|
fn parse(&self, html : &Html) -> PriceResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Arraygen, Debug)]
|
#[derive(Arraygen, Debug)]
|
||||||
#[gen_array(pub fn get: & dyn Parser)]
|
#[gen_array(pub fn get_price: & dyn PriceParser)]
|
||||||
pub struct List {
|
pub struct List {
|
||||||
#[in_array(get)]
|
#[in_array(get_price)]
|
||||||
darty: darty::Darty
|
darty: darty::Darty
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
use super::Parser;
|
use super::PriceParser;
|
||||||
use crate::PriceResult;
|
use crate::PriceResult;
|
||||||
use scraper::{Selector, Html};
|
use scraper::{Selector, Html};
|
||||||
use url::Url;
|
use url::Url;
|
||||||
|
@ -10,7 +10,7 @@ pub struct Darty {
|
||||||
product_selector: Selector
|
product_selector: Selector
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Parser for Darty {
|
impl PriceParser for Darty {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
Darty {
|
Darty {
|
||||||
price_selector: Selector::parse(r#".darty_prix"#).unwrap(),
|
price_selector: Selector::parse(r#".darty_prix"#).unwrap(),
|
||||||
|
|
|
@ -27,7 +27,7 @@ impl PriceChecker {
|
||||||
let response = self.client.get(url.clone()).send().unwrap();
|
let response = self.client.get(url.clone()).send().unwrap();
|
||||||
let text = response.text().unwrap();
|
let text = response.text().unwrap();
|
||||||
let document = Html::parse_document(&text);
|
let document = Html::parse_document(&text);
|
||||||
let parser = *self.parser_list.get().iter().find(|p| p.can_parse(&url)).unwrap();
|
let parser = *self.parser_list.get_price().iter().find(|p| p.can_parse(&url)).unwrap();
|
||||||
parser.parse(&document)
|
parser.parse(&document)
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue