Add support for search suggestions.

This commit is contained in:
FireMasterK 2021-04-30 11:56:27 +05:30
parent d81633205f
commit dacbdab7d6
No known key found for this signature in database
GPG key ID: 8DFF5DD33E93DB58
3 changed files with 41 additions and 14 deletions

View file

@ -24,3 +24,7 @@ path = "trending.rs"
[[example]] [[example]]
name = "video" name = "video"
path = "video.rs" path = "video.rs"
[[example]]
name = "search_suggestions"
path = "search_suggestions.rs"

View file

@ -0,0 +1,21 @@
use piped::piped::PipedClient;
use reqwest::ClientBuilder;
#[tokio::main]
async fn main() {
let httpclient = ClientBuilder::new()
.user_agent("Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0")
.build()
.unwrap();
let instance = "https://pipedapi.kavin.rocks".to_string();
let client = PipedClient::new(httpclient, instance);
let suggestions = client
.get_search_suggestions("techlore".to_string())
.await
.unwrap();
println!("{:?}", suggestions);
}

View file

@ -58,13 +58,7 @@ pub mod piped {
.append_pair("url", nexturl.as_str()) .append_pair("url", nexturl.as_str())
.append_pair("id", nextbody.as_str()); .append_pair("id", nextbody.as_str());
let resp = &self let resp = &self.httpclient.get(url).send().await?.text().await?;
.httpclient
.get(url.as_str())
.send()
.await?
.text()
.await?;
let streams: StreamsPage = serde_json::from_str(resp.as_str())?; let streams: StreamsPage = serde_json::from_str(resp.as_str())?;
@ -100,13 +94,7 @@ pub mod piped {
.append_pair("url", nexturl.as_str()) .append_pair("url", nexturl.as_str())
.append_pair("id", nextbody.as_str()); .append_pair("id", nextbody.as_str());
let resp = &self let resp = &self.httpclient.get(url).send().await?.text().await?;
.httpclient
.get(url.as_str())
.send()
.await?
.text()
.await?;
let streams: StreamsPage = serde_json::from_str(resp.as_str())?; let streams: StreamsPage = serde_json::from_str(resp.as_str())?;
@ -129,6 +117,20 @@ pub mod piped {
Ok(video) Ok(video)
} }
pub async fn get_search_suggestions(
&self,
q: String,
) -> Result<Vec<String>, Box<dyn std::error::Error>> {
let mut url = Url::parse(format!("{}/suggestions", &self.instance).as_str())?;
url.query_pairs_mut().append_pair("query", q.as_str());
let resp = &self.httpclient.get(url).send().await?.text().await?;
let suggestions: Vec<String> = serde_json::from_str(resp.as_str())?;
Ok(suggestions)
}
} }
#[derive(Deserialize, Debug)] #[derive(Deserialize, Debug)]