use std::error::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
tracing_subscriber::fmt::init();
println!("Bootstrapping session natively from Google Trends...");
let session_cookies = gwelle::session::bootstrap_session().await?;
println!("Session bootstrapped successfully! {:?}", session_cookies);
let client = gwelle::TrendsClient::new(&session_cookies, "en-US", -60)?;
let req = gwelle::ExploreRequest {
keywords: vec!["benzinpreis".to_string()],
geo: "DE".to_string(),
timeframe: "today 12-m".to_string(),
category: 0,
property: "".to_string(),
};
println!("Testing Explore endpoint...");
let explore = client.explore(&req).await?;
println!(
"Explore widgets ready: timeline={}, region={}, related_queries={}",
explore.interest_over_time.is_some(),
explore.interest_by_region.is_some(),
explore.related_queries.is_some()
);
if let Some(token) = explore.interest_over_time {
println!("Fetching interest over time data...");
let data = client.interest_over_time(&token).await?;
println!("Received {} curve points!", data.timeline_data.len());
for (i, v) in data.timeline_data.iter().take(3).enumerate() {
println!(" Time[{}]: {} {:?}", i, v.formatted_time, v.values);
}
}
if let Some(token) = explore.interest_by_region {
println!("\nFetching interest by region (Sub-regions)...");
let geo_data = client
.interest_by_region(&token, gwelle::models::GeoResolution::Region)
.await?;
println!(
"Received {} regional heatmaps!",
geo_data.geo_map_data.len()
);
for (i, region) in geo_data.geo_map_data.iter().take(3).enumerate() {
println!(
" Region[{}]: {} ({}) - {:?}",
i, region.geo_name, region.geo_code, region.values
);
}
}
if let Some(token) = explore.related_queries {
println!("\nFetching related queries...");
let related_data = client.related_queries(&token).await?;
println!(
"Received {} top, {} rising queries!",
related_data.top.len(),
related_data.rising.len()
);
for (i, query) in related_data.top.iter().take(2).enumerate() {
println!(" Top[{}]: {} (Score {})", i, query.query, query.value);
}
for (i, query) in related_data.rising.iter().take(2).enumerate() {
println!(" Rising[{}]: {} (Score {})", i, query.query, query.value);
}
}
Ok(())
}