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

以前紹介したWithingsの体重データをGarmin Connectと連携する方法ですが、
11月頃からGamin Connectの仕様変更なのか、使えなくなりました。
下記修正点になります。
3月31日追記:日付のズレ対策まで記事をすっ飛ばしてください。
garmin.pyの修正1
基本このファイルのみ修正です。
s = requests.session()
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日追記:大本のソースコードが変更

またしてもGarmin Connectの仕様変更か、同期ができない状況になってました。
久々にソースの配布元をチェックすると、
『garmin.py』と『sync.py』のコードが大幅に変更されてました。
4月21日頃にアップデートされているので、
それ以前にダウンロードした方は再度ダウンロードして、
ソースのアップデートをおすすめします。
今まで色々改造していましたが、この2点のソースコードを
大本と同じ物にアップデートしました。
で、5月15日時点ではそのままではやっぱりエラーが出るので修正します。

『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の仕様変更で同期が出来ない事になると思いますが^^;

是非フォローしてください
最新の情報をお伝えします
1件のピンバック
Withings Body Cardioを購入 | 三日坊主の軌跡
コメントは停止中です。