1 unstable release

0.1.4 Jun 21, 2024
0.1.3 Oct 6, 2023
0.1.2 Oct 6, 2023
0.1.1 Oct 6, 2023
0.1.0 Oct 6, 2023

#551 in Date and time

32 downloads per month

MIT license

25KB
513 lines

open-meteo-rust

a simple wrapper for open-meteo api written in rust

use std::error::Error;
use open_meteo_api::query::OpenMeteo;
use open_meteo_api::models::TimeZone;

// how to use

async fn example() -> Result<(), Box<dyn Error>> {

    // parsed json with (almost) all data you may need
    // for more info see open-meteo.com/en/docs
    // sign up to get a free api key here https://geocode.maps.co/

    let data1 = OpenMeteo::new() 
            .location("London", "your api key").await? // add location
            .forecast_days(10)?  // add forecast data
            .current_weather()?  // add current weather data
            .past_days(10)? // add past days data
            .time_zone(TimeZone::EuropeLondon)? // set time zone for using .daily()
            .hourly()? // add hourly weather data
            .daily()? // add daily weather data
            .query()
            .await?;

    // using start date and end date

    let data2 = OpenMeteo::new()
            .coordinates(51.0, 0.0)? // you can also use .coordinates(lat, lon) to set location
            .start_date("2023-09-01")?
            .end_date("2023-09-10")?
            .time_zone(TimeZone::EuropeLondon)?
            .hourly()?
            .daily()?
            .query()
            .await?;

    // accessing data fields
    // current_weather, hourly_units, hourly, daily_units, daily have Option type
    // fields of ".hourly" and ".daily" have Vec<Option<T>> type
    
    let temperature = data1.current_weather.unwrap().temperature;
    let temperature_2m = data2.hourly.unwrap().temperature_2m;

    println!("{}", temperature );
    println!("{:?}", temperature_2m);
        
    Ok(())
}

Dependencies

~6–17MB
~236K SLoC