use reqwest::Url;
use crate::{
enums::dispatchers::{RequesterDispatcher, SubscanModuleDispatcher},
extractors::html::HTMLExtractor,
modules::generics::engine::GenericSearchEngineModule,
requesters::chrome::ChromeBrowser,
types::core::SubscanModuleCoreComponents,
};
pub const DUCKDUCKGO_MODULE_NAME: &str = "duckduckgo";
pub const DUCKDUCKGO_SEARCH_URL: &str = "https://duckduckgo.com";
pub const DUCKDUCKGO_SEARCH_PARAM: &str = "q";
pub const DUCKDUCKGO_CITE_TAG: &str = "article > div:nth-child(2) > div > div > a span:first-child";
pub struct DuckDuckGo {}
impl DuckDuckGo {
pub fn dispatcher() -> SubscanModuleDispatcher {
let url = Url::parse(DUCKDUCKGO_SEARCH_URL);
let extractor: HTMLExtractor = HTMLExtractor::new(DUCKDUCKGO_CITE_TAG.into(), vec![]);
let requester: RequesterDispatcher = ChromeBrowser::default().into();
let generic = GenericSearchEngineModule {
name: DUCKDUCKGO_MODULE_NAME.into(),
param: DUCKDUCKGO_SEARCH_PARAM.into(),
url: url.unwrap(),
components: SubscanModuleCoreComponents {
requester: requester.into(),
extractor: extractor.into(),
},
};
generic.into()
}
}