0
0
mirror of https://github.com/neon-mmd/websurfx.git synced 2024-11-21 21:48:21 -05:00

engines/qwant: Parse url instead of using format

This makes sure that if a user uses & or any other symbol with
special meaning their query won't get broken
This commit is contained in:
Nikodem Rabuliński 2024-09-07 17:09:45 +02:00
parent 709425f60d
commit afefd023e9
No known key found for this signature in database

View File

@ -2,10 +2,11 @@
//! by querying the upstream qwant search engine with user provided query and with a page //! by querying the upstream qwant search engine with user provided query and with a page
//! number if provided. //! number if provided.
use std::borrow::Cow;
use std::collections::HashMap; use std::collections::HashMap;
use reqwest::header::HeaderMap; use reqwest::header::HeaderMap;
use reqwest::Client; use reqwest::{Client, Url};
use serde::Deserialize; use serde::Deserialize;
use crate::models::aggregation_models::SearchResult; use crate::models::aggregation_models::SearchResult;
@ -118,7 +119,20 @@ impl SearchEngine for Qwant {
let results_per_page = 10; let results_per_page = 10;
let start_result = results_per_page * page; let start_result = results_per_page * page;
let url: String = format!("https://api.qwant.com/v3/search/web?q={query}&count={results_per_page}&locale=en_US&offset={start_result}&safesearch={safe_search}&device=desktop&tgp=2&displayed=true"); let url = Url::parse_with_params(
"https://api.qwant.com/v3/search/web",
&[
("q", Cow::from(query)),
("count", results_per_page.to_string().into()),
("locale", "en_US".into()),
("offset", start_result.to_string().into()),
("safesearch", safe_search.to_string().into()),
("device", "desktop".into()),
("tgb", "2".into()),
("displayed", "true".into()),
],
)
.change_context(EngineError::UnexpectedError)?;
let header_map = HeaderMap::try_from(&HashMap::from([ let header_map = HeaderMap::try_from(&HashMap::from([
("User-Agent".to_string(), user_agent.to_string()), ("User-Agent".to_string(), user_agent.to_string()),