gwelle 0.1.0

Lightweight Rust client for the Google Trends API
Documentation
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(())
}