Withingsの体重データをGarmin Connectと連携する

オフィシャルでは不可能な
Withingsの体重データをGarmin Connectと連携させるお話。
有志によって公開されているプログラムを
Windows10環境に導入し実現しました。

※導入する方は自己責任でお願い致します。不具合が生じてもこちらでは責任取れません。

スポンサーリンク

1:Python(パイソン)の導入

そのプログラムは使用言語がPython(パイソン)。
まずはこれを動かせる環境作り。

1-1:ダウンロード

まずはPythonをダウンロード。

The official home of the Python Programming Language

バージョンが複数ありますが今回は2.7.12を使用。
僕は『Windows x86 MSI installer』を選んで
ダウンロードしました。

1-2:インストール

Python07
ダウンロードしたファイルをダブルクリックで起動。

Python01
『Install for all users』を選んで『Next >』をクリック

Python02
インストール先はそのままにして『Next >』をクリック
(Cドライブ直下になります)

Python03
カスタム項目は『Add python.exe to Path』から
『Entire feature will be installed on local hard drive』を選択。
これ重要
選択出来たら『Next >』をクリック

Python04
環境によってはユーザーアカウント制御の表示が出ますが許可。
Finishボタンを押してインストール終了。

1-3:pipのインストール

Pythonに追加のプログラムをインストール。

まずはコマンドプロンプトを起動。

Python05
キーボードの+Rキーを押して
『cmd』と入力しEnterキーを押しても起動可能です。
python23
コマンドプロンプトが起動したら

pip install requests

と入力してEnter

Python08
Collecting requestsと表示されて、しばし待機。

Python09
Successfully~と表示されたら成功。
ここまで出来ればPython導入編は完了。

スポンサーリンク

2:withings-garmin-v2の導入

Pythonのインストールが完了したら
今回の目的を叶えるプログラム『withings-garmin-v2』を
入れてみます。

2-1:ダウンロード

withings-garmin-v2 - Withings to Garmin Connec sync

上記サイトからプログラムをダウンロード。
Python10

緑色の『Clone or download』ボタンをクリック後
『DownLoad ZIP』ボタンをクリック。
僕はPythonをこのプログラム以外に使う用途が無さそうなので、
Pythonのインストールフォルダに解凍し展開しました。

『C:\Python27』の中身はこんな感じ。

Python11

2-2:設定

Python15

展開したファイル内から『sync.py』ファイルをテキストエディタで開いて設定します。
変更箇所は17行目あたりからはじまる5つ。

WITHINGS_USERNMAE = ''
WITHINGS_PASSWORD = ''
WITHINGS_SHORTNAME = ''

GARMIN_USERNAME = ''
GARMIN_PASSWORD = ''

各”内に自分のWithings、Garminの
IDやパスワードを半角英数字で入力。

Python12

Withingsのショートネームは初期設定のままだと
『AAA』の可能性が高い。
体重計に乗ったら左上に表示される3桁の英数字です。
入力できたら上書き保存して下さい。

2-3:withings-garmin-v2の実行

設定が出来れば基本的には『sync.py』を実行するだけで
OKです。
但し設定が正しく出来ていなくても終了してしまうので、
コマンドプロンプトをまた使い
正しく実行出来ているか確認。

Python13

sync.py

と入力してEnter

Python14
設定に不備があるとこんな感じでエラーが出て弾かれます。
その場合は先程の『sync.py』ファイル内の
IDやパスワードに誤りが無いか要チェック。

2-4:まさかの・・・

僕はここまでは順調に行きました。
まさかこのあと解決まで半日以上かかるとは
思いもよりませんでした。
Python16

先ほどの設定が上手く行っていれば↑みたいな感じになります。
しかしこれはWithingsのデーターが拾えないエラー。

user *** has not opened withings data

withingsのセキュリティ設定の問題かアクセスしても弾かれている様子。
withingsの共有設定などWEBサイトやスマホアプリで
変更出来そうな箇所は開放してsync.pyを実行するが

user *** has not opened withings data

やーまん(目がぐるぐる)

やーまん
またエラー!?

あれこれ試してみるがやっぱりエラー。
時間だけが過ぎていく・・・

最後に思いついたのが、

自分のアカウントは独立して1人で使ってるから
ショートネームで判断する必要なし?

WITHINGS_SHORTNAMEを空白にしてみるが、
Python17
新しいエラーcould not find user:の表示。

やーまん(目がぐるぐる口閉じる)

やーまん
ダメだー(´・ω・`)

ユーザーは判別している様だ。

2-5:withings-garmin-v2の改造

ではエラーメッセージを返している部分のコードを飛ばすとどうなるか?

『sync.py』ファイル内の83行目あたりからはじまるWithings API関連のコード。
そこから次のコードの先頭に半角の#シャープを追加、
もしくはまるごと削除。

#    if not user:
#        print 'could not find user: %s' % withings_shortname
#        return
#    if not user.ispublic:
#        print 'user %s has not opened withings data' % withings_shortname
#        return

Python18

ここでは#を入れて対応している。
この言語は先頭に#を入れるとコメントとみなしてコードを実行しない。

さて結果は
Python19

またuser *** has not opened withings dataが表示されると思っていたら

Garmin Connect User Name: *****

今まで見たこと無い表示。
これはつまり成功?

Garmin Connectにアクセスすると・・・

python21
反映されている!!!!!

やーまん(笑い顔)

やーまん
やったー\(^o^)/

2-6:過去の体重データを引っ張る

苦労しただけあっておもわずヤッホーな状態ですが、
上記のやり方だと当日の体重データのみ反映されます。

過去のデーターを引っ張ってくるには、
コマンドプロンプトで下記の様に入力します。

sync.py -f 2011-01-16 -t 2016-09-02

↑この例だと2011年の1月16日から2016年9月2日までのデータを
引っ張ってくる形になります。
Python20

スポンサーリンク

3:その後

Python15
毎日パソコンを立ち上げる方は
スタートアップに『sync.py』を登録すれば
自動でデータを同期してくれますね。

あとはタスクスケジューラに登録して
定時に『sync.py』起動する様にする等。

僕は毎日パソコン使わないので、
恐らく2-6:の方法でまとめて同期すると思います。

長文お疲れ様でした。

4:追記Garmin Connectの仕様変更

9月下旬あたりからデーターが反映されず???状態でした。
正確な日付はわかりませんが、Garmin Connectへログインする際
複雑なパスワードを求める仕様に変更となりました。
python22
それに伴いパスワードの変更を行い、『sync.py』も
新パスワードに書き換えると問題なく反映されました。

5:12月16日追記

Garmin Connectの仕様変更に対応してみました。
長くなったので別記事へアップ。

https://back2nature.jp/computer/web/withings-to-garmin-connect 以前紹介したWithingsの体重データをGarmin Connectと連携する方法ですが、 11月頃からGamin Connectの仕様変更なのか、使えなくなりました。 下記修正点になります。 大本のソースコードが変更されたので、 3月31日追記:日付のズレ対策まで記事をすっ飛ばしてください。 garmin.pyの修正1 基本このファイルのみ修正です。 s = requests.session() 上記コードを11行目の空白行に挿入してください。 garmin.pyの修正2 テキストエディタの置換機能を使って 下記の様に置換して下さい。 .(ドット)をお忘れなく。 ・検索ワード requests. ・置換後 s. garmin.pyの修正3 次は138行目辺りにある return (cookies) 上記コードを下記のように書き換えます。 return (s.cookies) garmin.pyの修正4 最後に81行目辺りにある # "gauthHost": "https://sso.garmin.com/sso", ここからコメントアウトするための#を取り外します。 注意点は一つ上の行頭とツラを合わせることです。 修正出来たら いつもの様にsync.pyを実行します。 僕の環境では問題なくアップ出来ました。 sync.py実行時に-vのオプション付けると 上記の画像のようにメッセージが付加されます。 馴染みのないPythonなので、苦労しましたが、 アップ出来てスッキリしました。 3月1日追記:403エラー対策 いつの間にやらGarmin Connectの仕様変更なのか、 アップ出来なくなってました。 早速対策です。 おなじみのgarmin.pyを修正します。 154行目あたりのコードに追記します。 req = urllib2.Request(self.UPLOAD_URL) ↑このコードを↓こんな感じに変更します。 req = urllib2.Request(self.UPLOAD_URL, headers={"nk": "NT"}) 以上で対策完了です。 "nk": "NT"って何でしょうね? tapiriikさんのコードを参考にしました。 ありがとうございます。 3月31日追記:日付のズレ対策 Garmin Connectに表示される体重のデータが、 微妙にズレている事を今更ですが気が付きました。 朝に計測しているデータが前日扱いになってました。 午後に計測するとその日になっていました。 恐らくWithingsのデータが何故か標準時刻でアップされてると思われます。 てな訳で、日本時間に合わせる為に『fit.py』に追記してみます。 76行目あたりのコードに追記します。 t = time.mktime(t.timetuple()) ↑このコードを↓こんな感じに変更します。 t = time.mktime(t.timetuple()) + 32400 標準時刻から日本は9時間進んでいるので、 32,400秒分を足した感じです。 とりあえず現状はこれでOKかな? 5月15日追記:大本のソースコードが変更 https://github.com/jaroslawhartman/withings-garmin-v2 またしてもGarmin Connectの仕様変更か、同期ができない状況になってました。 久々にソースの配布元をチェックすると、 『garmin.py』と『sync.py』のコードが大幅に変更されてました。 4月21日頃にアップデートされているので、 それ以前にダウンロードした方は再度ダウンロードして、 ソースのアップデートをおすすめします。 今まで色々改造していましたが、この2点のソースコードを 大本と同じ物にアップデートしました。 で、5月15日時点ではそのままではやっぱりエラーが出るので修正します。 https://back2nature.jp/computer/web/withings-to-garmin-connect#2-5withings-garmin-v2 『sync.py』はユーザーネームで弾かれるので、以前と同じ方法で、 コメントアウトかソースを消して対処します。 次は『garmin.py』の修正です。 77行目あたりのコードをコメントアウトか消します。 data["lt"] = re.search("name=\"lt\"\s+value=\"([^\"]+)\"", preResp.text).groups(1)[0] ↑このコードを↓こんな感じに変更します。 これはコメントアウトした場合です。 #data["lt"] = re.search("name=\"lt\"\s+value=\"([^\"]+)\"", preResp.text).groups(1)[0] 次は104行目あたりのコード『params={"ticket": ticket},』を消します。 gcRedeemResp = session.get("https://connect.garmin.com/post-auth/login", params={"ticket": ticket}, allow_redirects=False) ↑このコードを↓こんな感じに変更します。 gcRedeemResp = session.get("https://connect.garmin.com/post-auth/login", allow_redirects=False) 以上の変更で5月15日時点では同期可能となります。 いずれGarmin Connectの仕様変更で同期が出来ない事になると思いますが^^; Withings Bluetooth対応 活動量計 Go 睡眠/走行距離/防水 ブルー 【日本正規代理店品】 WAM02-BLUE-ASIAposted with カエレバ Withings 2016-09-02 Amazon楽天市場Yahooショッピング

是非フォローしてください

最新の情報をお伝えします

やーまん

山奥に移住し、のんびり暮らしています。
日々の事で感じた事や考え方などを備忘録として残しています。

4 コメント

  • はじめまして。
    最近withingsの体重計を購入し、garmin connectとの連携を模索していてたどり着きました。
    2-4.の同じ箇所にて躓いていましたが、同じようにコメントにすることで連携ができるようになりました。
    ありがとうございました!

    • コメントありがとうございます。
      お役に立てて何よりです(^^)

  • ご無沙汰しております。
    昨日からスクリプト経由のwithings2garminの連携にて下記のようなエラーが出るようになりました。
    NameError:global name ‘APIException’ is not defined
    同じような症状でておりますでしょうか?

    PCのgarmin expressアプリからgarmin connectボタンを押すと以前はID、passの入力なしに個人ページに飛んでいたのですが現在ID、passを求められるようになりました。
    garmin側の仕様がかわったのかなと推測しております。

    • 先程確認しました。
      こちらもエラーが出てます。

      仕様変更なのか、サーバーがダウンしているのか
      私も原因はわかりません・・・
      困りましたね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA