add google?
This commit is contained in:
49
src/main.rs
49
src/main.rs
@@ -24,7 +24,52 @@ struct Query {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn google(client: &Client, search: &str) -> Vec<SearchResult> {
|
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> {
|
async fn ddg(client: &Client, search: &str) -> Vec<SearchResult> {
|
||||||
@@ -47,6 +92,7 @@ async fn ddg(client: &Client, search: &str) -> Vec<SearchResult> {
|
|||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
fs::write("ddg-debug.html", &ddg_dom).unwrap();
|
fs::write("ddg-debug.html", &ddg_dom).unwrap();
|
||||||
|
|
||||||
let html = Html::parse_document(&ddg_dom);
|
let html = Html::parse_document(&ddg_dom);
|
||||||
@@ -94,6 +140,7 @@ async fn search(input: Form<Query>) -> Template {
|
|||||||
|
|
||||||
Template::render("results", context! {
|
Template::render("results", context! {
|
||||||
ddg: ddg(&client, clean).await,
|
ddg: ddg(&client, clean).await,
|
||||||
|
google: google(&client, clean).await,
|
||||||
last_search: clean
|
last_search: clean
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user