2 releases
0.1.1 | Feb 14, 2024 |
---|---|
0.1.0 | Jan 30, 2024 |
#943 in #client
32KB
412 lines
Withings-rs
Withings API Client in Rust
About
First attempt at a rust project. This will Oauth to the Withings API and pull in your data.
Use
You first need to create an Dev account on Withings to get a client_id
and client_secret
Withings Dev Portal. Set the redirect URL to http://localhost:8888
this client will bind to that on the machine it is ran on. To store the tokens in a config file that isn't the default of config.json
set an env var of WITHINGS_CONFIG_FILE
the directory path needs to exist for the code does not currnetly attempt to create the directory structure
Example use
use withings_rs::{api::{auth, measure}, models::meas::CategoryType};
use std::env;
use simple_logger::SimpleLogger;
use std::path::Path;
use withings_rs::models::MeasureType;
fn main () {
println!("testing withings-rs\n");
// Initialize the logger to see the output
SimpleLogger::new().init().unwrap();
// Get the client id from the environment variable
let client_id = env::var("WITHINGS_CLIENT_ID").unwrap();
// Get the config file if it exists or create a new one
let config_file = auth::get_config_file();
// Get the access token from the config file or get a new one
let access_token = get_access_token(config_file);
// Get the CategoryType and MeasureType
let category = CategoryType::Measures.to_string();
let weight = MeasureType::Weight.to_string();
// set up the measure api arguments
let params = measure::MeasurementParams{
access_token: access_token.unwrap().to_string(),
client_id,
category,
meastype: weight,
start: None,
end: None,
offset: None,
lastupdate: Some("1706108118".to_string())
};
// Get the measurements
let measurements = measure::get_measurements(
¶ms
).unwrap();
println!("weight: {:?}", measurements.body.measuregrps[0].measures[0].value);
}
// Get the access token from the config file or get a new one
fn get_access_token(config_file: String) -> Result<String, String>{
let client_id = env::var("WITHINGS_CLIENT_ID").unwrap();
let client_secret = env::var("WITHINGS_CLIENT_SECRET").unwrap();
// Check if the config file exists and get the access token or get a new one
if Path::new(&config_file).exists() {
let access_token = auth::refresh_token(client_id, client_secret);
Ok(access_token.unwrap().to_string())
} else {
let access_token = auth::get_access_code(client_id, client_secret);
Ok(access_token.unwrap().to_string())
}
}
Disclaimer
This library is not affiliated with Withings. Use at your own risk. This is very much a work in progress. Right now all it does is auth and pull the measure API.
Dependencies
~5–16MB
~225K SLoC