#api-client #api #client #withings

withings-rs

Withings API 客户端库

2 个版本

0.1.1 2024 年 2 月 14 日
0.1.0 2024 年 1 月 30 日

#452 in #api-client

MITGPL-3.0-only

32KB
412

Withings-rs

Rust 的 Withings API 客户端

关于

这是一个 Rust 项目的初次尝试。这将使用 OAuth 访问 Withings API 并拉取您的数据。

使用

您首先需要在 Withings 上创建一个开发账户以获取 client_idclient_secret Withings 开发门户。将重定向 URL 设置为 https://127.0.0.1:8888,此客户端将在运行的机器上绑定到该地址。要存储令牌到不是默认的 config.json 的配置文件,设置一个环境变量 WITHINGS_CONFIG_FILE,目录路径必须存在,因为代码目前不会尝试创建目录结构

示例使用

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(
        &params
    ).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())
    }
}

免责声明

此库与 Withings 无关。自行承担风险。这是一个正在进行中的工作。目前它只执行认证和拉取测量 API。

依赖关系

~4–19MB
~254K SLoC