忘備録として書く。
背景
私はスマートフォンに毎日体重を記録しており、それをgoogle fitへと連携しようと考えた。
体重記録アプリから直接google fitへ出力する機能があればよいのだが、そのような機能はアプリにはなかった。
なので、アプリから体重を記録したcsvを出力させ、google fit のAPIを経由して、保存することにした。
手法
1:githubにエクスポートのためのスクリプトがあるので、それをクローンする。
git clone https://github.com/okainov/weight-csv-to-gfit
2:api keyとfitness apiのOAuth 2.0 クライアント IDの2つを作成し、ダウンロードする。
- 両者ともgoogle cloudのアカウントが必要なので、作成しておく。
- api key
- google cloudの「APIとサービス」の「認証情報」の「APIキー」から、「+認証情報を作成」ボタンがあるのでそこから作成し、記録する。
- OAuth 2.0 クライアント ID
- Fitness APIページの「管理」の「認証情報」タブから、「+認証情報を作成」ボタンがあるのでそこから作成。jsonを
client_secret.json
として保存。
- Fitness APIページの「管理」の「認証情報」タブから、「+認証情報を作成」ボタンがあるのでそこから作成。jsonを
3:csvを加工。アプリからcsvをエクスポートし、以下のような形式に直す。
datetime,weight
2024-01-01 08:00:00,70.5kg
2024-01-02 08:00:00,71.2kg
2024-01-03 08:00:00,69.8kg
4:スクリプトから仮想環境構築する。venvコマンドがあるので、それを実行。また、コードのタイムゾーンを変更する。
# read_weight_csv.py
# TIME_ZONE = zoneinfo.gettz("Europe/Berlin")
TIME_ZONE = zoneinfo.gettz("Asia/Tokyo")
5:weight-csv-to-gfit/weight
に以下のファイルを置く。
- client_secret.json
- これは先ほどのOAuth 2.0 クライアント IDで作成したファイル。
- secrets.yml
- project_idはclient_secret.jsonにある
client_id
から取得する。ただし、123456-何らかの文字列
という形式なので、123456
だけを書く。
- project_idはclient_secret.jsonにある
fitness_api_key: "ここに先ほど作成したapi keyを置く。"
project_id: "上を参照。"
6:python import_weight_to_gfit.py
を実行。ブラウザでログイン画面が出るので全部OKを押す。
7:インポートに成功すれば、ターミナルでは以下のような出力が出る。google fitに反映されるまで1時間程度かかる。
その他
私は5年分のデータを一度に入れようとしたら、途中までのデータしか反映されていなかった。5カ月を単位にデータを分割して、インポートした。