price_checker/src/price_checker.rs

33 lines
862 B
Rust

extern crate reqwest;
extern crate scraper;
use reqwest::blocking::Client;
use scraper::Html;
use crate::parser;
use crate::price_result::PriceResult;
use url::Url;
const USER_AGENT: &str = "Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0";
pub struct PriceChecker {
client: Client,
parser_list: parser::List
}
impl PriceChecker {
pub fn new() -> Self {
let client = reqwest::blocking::Client::builder().user_agent(USER_AGENT).build().unwrap();
PriceChecker {
client,
parser_list: parser::List::new()
}
}
pub fn get_price(&self, url : Url) -> PriceResult {
let response = self.client.get(url.clone()).send().unwrap();
let text = response.text().unwrap();
let document = Html::parse_document(&text);
let parser = *self.parser_list.get().iter().find(|p| p.can_parse(&url)).unwrap();
parser.parse(&document)
}
}