use data_for_seo::entity::TaskStatus;
use data_for_seo::{DataForSeoClient, SerpApiGoogleOrganicTaskPostRequest};
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = DataForSeoClient::from_env()?;
let mut request = SerpApiGoogleOrganicTaskPostRequest::new("ja".to_string(), 2392);
request.keyword = "rust seo".to_string();
let posted = client
.serp()
.google()
.organic_task_post(vec![request])
.await?;
let task_id = posted.tasks().first().ok_or("no task posted")?.id.clone();
println!("posted task {task_id}");
'wait: loop {
tokio::time::sleep(Duration::from_secs(10)).await;
let ready = client.serp().task_ready().await?;
for task in ready.tasks() {
for result in task.results() {
if result.id.as_deref() == Some(task_id.as_str()) {
break 'wait;
}
}
}
println!("not ready yet...");
}
let result = client
.serp()
.google()
.organic_task_get_advanced(&task_id)
.await?;
for task in result.tasks() {
if let TaskStatus::RequestSuccess(_) = task.task_status() {
for page in task.results() {
println!("'{}': {} items", page.keyword, page.items().len());
}
}
}
Ok(())
}