add google?

This commit is contained in:
2025-11-24 08:56:53 -07:00
parent b454e08b3c
commit 0067f81f04

View File

@@ -24,7 +24,52 @@ struct Query {
}
async fn google(client: &Client, search: &str) -> Vec<SearchResult> {
todo!()
let mut headers = HeaderMap::new();
headers.insert("content-type", "application/x-www-form-urlencoded".parse().unwrap());
headers.insert("Accept-Language", "en-US,en;q=0.9".parse().unwrap());
headers.insert("Referer", "https://google.com/".parse().unwrap());
let request = client
.request(Method::GET, "https://google.com/search")
.headers(headers)
.query(&[("q", search)])
.build()
.unwrap();
let dom = client.execute(request)
.await
.unwrap()
.text()
.await
.unwrap();
#[cfg(debug_assertions)]
fs::write("google-debug.html", &dom).unwrap();
let html = Html::parse_document(&dom);
let search_result = Selector::parse("#search > #rso > div").unwrap();
let mut buf = Vec::new();
for result in html.select(&search_result) {
let title_selector = Selector::parse("h3").unwrap();
let title = result.select(&title_selector).next().expect("Failed to get title");
let preview_selector = Selector::parse("span").unwrap();
let preview = result.select(&preview_selector).next().expect("Failed to get title");
let a = title.attr("href").unwrap().to_string();
let title = title.inner_html();
let desc = preview.inner_html();
let sr = SearchResult {
a,
title,
desc
};
buf.push(sr);
}
buf
}
async fn ddg(client: &Client, search: &str) -> Vec<SearchResult> {
@@ -47,6 +92,7 @@ async fn ddg(client: &Client, search: &str) -> Vec<SearchResult> {
.await
.unwrap();
#[cfg(debug_assertions)]
fs::write("ddg-debug.html", &ddg_dom).unwrap();
let html = Html::parse_document(&ddg_dom);
@@ -94,6 +140,7 @@ async fn search(input: Form<Query>) -> Template {
Template::render("results", context! {
ddg: ddg(&client, clean).await,
google: google(&client, clean).await,
last_search: clean
})
}