#garmin #download #activities #metrics

garmin_download

提供了一个可以直接从 Garmin 下载数据的 DownloadManager 结构体。

10 个版本

0.2.0 2024年2月13日
0.1.9 2024年1月26日

#3#activities

Download history 30/week @ 2024-03-28 30/week @ 2024-04-04

112 每月下载次数

GPL-3.0 许可证

65KB
1K SLoC

基本用法


use std::{env, path::Path};
use config::{Config, File, FileFormat};
use getopts::Matches;

fn main() {
    let args: Vec<String> = env::args().collect();

    // see https://github.com/poster515/Rust-Garmin/blob/main/garmin/src/main.rs for options building
    let options = Options::new();
    let matches: Matches = match options.parse(&args[1..]).unwrap();

    let config = Config::builder().add_source(File::new(cwd.join("config").join("garmin_config.json").to_str().unwrap(), FileFormat::Json)).build().unwrap();

    let mut download_manager = DownloadManager::new(config, Some(matches));
    download_manager.login();
    download_manager.download_all();
}

注意,配置文件中的 'download_data_today' 是一种通用的覆盖设置 - 它将只下载今天的所有数据。即使你在命令行上指定了日期覆盖,如果 download_today_data 设置为 true,则会被忽略。话虽如此,以下是一些 CLI 覆盖设置,其中 download_today_data 设置为 false

    -u, --summary_date use YYY-MM-DD format
                        download date for summary data
    -w, --weight_date use YYY-MM-DD format
                        download date for weight data
    -s, --sleep_date use YYY-MM-DD format
                        download date for sleep data
    -r, --resting_heart_date use YYY-MM-DD format
                        download date for resting heart rate data
    -m, --monitor_date use YYY-MM-DD format
                        download date for monitoring data
    -o, --hydration_date use YYY-MM-DD format
                        download date for hydration data
    -a, --activity_date use YYY-MM-DD format
                        download date for activity data

通过从 getopts crate 中传递 Some(matches) 对象,您可以指定这些覆盖设置。请参阅 ../garmin/src/main.rs 以获取示例。

活动注意事项

有一个配置 'num_activities_to_download',它请求下载最后 N 个活动的摘要,包括开始时间和活动 ID。从这里,另一个 API 被调用以检索每个活动的详细摘要。

使用以下流程来了解活动详细信息实际上是如何保存的

  • 如果 'download_today_data' 为 true,则只会保存今天午夜(使用本地时区)到明天午夜之间开始的活动。
  • 如果 'save_regardless_of_date' 为 false,则只会保存活动开始日期午夜到次日午夜之间的活动。
  • 否则,活动默认保存到文件中。

基于日期保存活动很困难,因为没有(据我所知)一个端点可以按日期搜索活动。您可以下载从 activity_start_date 开始的 N 个活动。一个选项是下载大量活动的摘要,这些活动的日期可以检查其正确性。另一个未来的选项可能是将活动摘要保存到 influx,然后直接暴露 garmin_client 以按 ID 保存活动,但这目前尚未实现。

每日使用(例如,cron 作业)

我建议选择一个合理的值(例如,10)来获取活动的信息,除非您认为您将在一天内保存的活动超过这个数量,否则您可能有些疯狂。以下是每天下载昨天数据的示例配置

  • 'download_today_data': false
  • 'save_regardless_of_date': false
  • 启用您想要的统计信息

历史下载(例如,批量下载)

如果您想下载大量历史活动,请设置配置文件中的日期和适当的天数。比如说,您想下载 2023 年的 监控 数据(心率、呼吸率等)。请设置以下内容

  • 'download_today_data': false
  • 'monitor_start_date': '2023-01-01'
  • 禁用所有统计信息,除了 'monitoring'
  • 'num_days_from_start_date': 365

会话管理的一个已知限制是,您只能在每个会话令牌中请求一次活动摘要,如果通过不断请求新令牌滥用 Garmin 的 OAuth2.0 架构,Garmin 会在几个小时后将您锁定。这就是为什么添加了 'num_days_from_start_date' 配置的原因。如果您需要下载更多监控数据,很可能您需要首先删除 .garmin_session.json 文件。

依赖项

~17–31MB
~492K SLoC