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> {
|
||||
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
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user