use crate::api::serp::SerpApi;
use crate::entity::{SerpApiNaverOrganicTaskAdvanced, SerpApiNaverOrganicTaskHtml};
use crate::{DataForSeoApiResponse, DataForSeoClient, SerpApiTaskReadyResult};
use serde::{Deserialize, Serialize};
use serde_json::Value;
impl SerpApi<'_> {
pub fn naver(&self) -> SerpApiNaver<'_> {
SerpApiNaver {
client: self.client,
}
}
}
pub struct SerpApiNaver<'a> {
client: &'a DataForSeoClient,
}
impl SerpApiNaver<'_> {
pub async fn organic_task_post(
&self,
data: Vec<SerpApiNaverOrganicTaskPostRequest>,
) -> DataForSeoApiResponse<Value> {
self.client
.http_post("/v3/serp/naver/organic/task_post", &data)
.await
}
pub async fn organic_tasks_ready(&self) -> DataForSeoApiResponse<SerpApiTaskReadyResult> {
self.client.serp().task_ready_se("naver").await
}
pub async fn organic_task_get_advanced(
&self,
id: &str,
) -> DataForSeoApiResponse<SerpApiNaverOrganicTaskAdvanced> {
self.client
.http_get(format!("/v3/serp/naver/organic/task_get/advanced/{id}").as_str())
.await
}
pub async fn organic_task_get_html(
&self,
id: &str,
) -> DataForSeoApiResponse<SerpApiNaverOrganicTaskHtml> {
self.client
.http_get(format!("/v3/serp/naver/organic/task_get/html/{id}").as_str())
.await
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct SerpApiNaverOrganicTaskPostRequest {
pub keyword: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub priority: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub depth: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_crawl_pages: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub device: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub os: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub se_domain: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub search_param: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub tag: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub postback_data: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pingback_url: Option<String>,
}
impl SerpApiNaverOrganicTaskPostRequest {
pub fn new<T: Into<String>>(keyword: T) -> Self {
SerpApiNaverOrganicTaskPostRequest {
keyword: keyword.into(),
..SerpApiNaverOrganicTaskPostRequest::default()
}
}
}