use crate::DataForSeoApiResponse;
use crate::DataForSeoClient;
use crate::api::keywords_data::{KeywordsDataApi, KeywordsDataApiLocation};
use crate::entity::KeywordsDataApiDataforseoTrendsResult;
use serde::{Deserialize, Serialize};
impl KeywordsDataApi<'_> {
pub fn dataforseo_trends(&self) -> KeywordsDataApiDataforseoTrends<'_> {
KeywordsDataApiDataforseoTrends {
client: self.client,
}
}
}
pub struct KeywordsDataApiDataforseoTrends<'a> {
pub(crate) client: &'a DataForSeoClient,
}
impl KeywordsDataApiDataforseoTrends<'_> {
pub async fn locations(&self) -> DataForSeoApiResponse<KeywordsDataApiLocation> {
self.client
.http_get("/v3/keywords_data/dataforseo_trends/locations")
.await
}
pub async fn explore_live(
&self,
data: Vec<KeywordsDataApiDataforseoTrendsRequest>,
) -> DataForSeoApiResponse<KeywordsDataApiDataforseoTrendsResult> {
self.client
.http_post("/v3/keywords_data/dataforseo_trends/explore/live", &data)
.await
}
pub async fn subregion_interests_live(
&self,
data: Vec<KeywordsDataApiDataforseoTrendsRequest>,
) -> DataForSeoApiResponse<KeywordsDataApiDataforseoTrendsResult> {
self.client
.http_post(
"/v3/keywords_data/dataforseo_trends/subregion_interests/live",
&data,
)
.await
}
pub async fn demography_live(
&self,
data: Vec<KeywordsDataApiDataforseoTrendsRequest>,
) -> DataForSeoApiResponse<KeywordsDataApiDataforseoTrendsResult> {
self.client
.http_post("/v3/keywords_data/dataforseo_trends/demography/live", &data)
.await
}
pub async fn merged_data_live(
&self,
data: Vec<KeywordsDataApiDataforseoTrendsRequest>,
) -> DataForSeoApiResponse<KeywordsDataApiDataforseoTrendsResult> {
self.client
.http_post(
"/v3/keywords_data/dataforseo_trends/merged_data/live",
&data,
)
.await
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct KeywordsDataApiDataforseoTrendsRequest {
pub keywords: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub location_code: Option<i32>,
#[serde(rename = "type", skip_serializing_if = "Option::is_none")]
pub trends_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date_from: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub date_to: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub time_range: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub item_types: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl KeywordsDataApiDataforseoTrendsRequest {
pub fn new(keywords: Vec<String>) -> Self {
KeywordsDataApiDataforseoTrendsRequest {
keywords,
..KeywordsDataApiDataforseoTrendsRequest::default()
}
}
}