use crate::entity::{
AiOptimizationLanguage, AiOptimizationLlmScraper, AiOptimizationLlmScraperHtml,
AiOptimizationScraperLocation, AiOptimizationTaskReady,
};
use crate::{DataForSeoApiResponse, DataForSeoClient};
use serde::{Deserialize, Serialize};
pub struct AiOptimizationApiLlmScraper<'a> {
pub(crate) client: &'a DataForSeoClient,
pub(crate) provider: &'static str,
}
impl AiOptimizationApiLlmScraper<'_> {
pub async fn locations(&self) -> DataForSeoApiResponse<AiOptimizationScraperLocation> {
self.client
.http_get(&format!(
"/v3/ai_optimization/{}/llm_scraper/locations",
self.provider
))
.await
}
pub async fn languages(&self) -> DataForSeoApiResponse<AiOptimizationLanguage> {
self.client
.http_get(&format!(
"/v3/ai_optimization/{}/llm_scraper/languages",
self.provider
))
.await
}
pub async fn task_post(
&self,
data: Vec<AiOptimizationLlmScraperPost>,
) -> DataForSeoApiResponse<AiOptimizationLlmScraper> {
self.client
.http_post(
&format!(
"/v3/ai_optimization/{}/llm_scraper/task_post",
self.provider
),
&data,
)
.await
}
pub async fn tasks_ready(&self) -> DataForSeoApiResponse<AiOptimizationTaskReady> {
self.client
.http_get(&format!(
"/v3/ai_optimization/{}/llm_scraper/tasks_ready",
self.provider
))
.await
}
pub async fn task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<AiOptimizationLlmScraper> {
self.client
.http_get(&format!(
"/v3/ai_optimization/{}/llm_scraper/task_get/advanced/{}",
self.provider, id
))
.await
}
pub async fn task_get_html(
&self,
id: &str,
) -> DataForSeoApiResponse<AiOptimizationLlmScraperHtml> {
self.client
.http_get(&format!(
"/v3/ai_optimization/{}/llm_scraper/task_get/html/{}",
self.provider, id
))
.await
}
pub async fn live_advanced(
&self,
data: Vec<AiOptimizationLlmScraperPost>,
) -> DataForSeoApiResponse<AiOptimizationLlmScraper> {
self.client
.http_post(
&format!(
"/v3/ai_optimization/{}/llm_scraper/live/advanced",
self.provider
),
&data,
)
.await
}
pub async fn live_html(
&self,
data: Vec<AiOptimizationLlmScraperPost>,
) -> DataForSeoApiResponse<AiOptimizationLlmScraperHtml> {
self.client
.http_post(
&format!(
"/v3/ai_optimization/{}/llm_scraper/live/html",
self.provider
),
&data,
)
.await
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct AiOptimizationLlmScraperPost {
pub keyword: 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(skip_serializing_if = "Option::is_none")]
pub language_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub language_code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub force_web_search: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pingback_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
}
impl AiOptimizationLlmScraperPost {
pub fn new(keyword: &str) -> AiOptimizationLlmScraperPost {
AiOptimizationLlmScraperPost {
keyword: keyword.to_string(),
..Default::default()
}
}
}