
Withingsの体重計のデータを、FitbitのAPIから取得することができました。今回は、取得した体重データをスプレッドシートに記録します。
デバイスと環境
体重計・・・Withings「Body +」
活動量計・・・Fitbit「Alta HR」
Windows10
Node.js 14.15.4
スプレッドシートをサーバー化
まずは記録用のスプレッドシートを簡易サーバーとして設定ます。
「Google Spreadsheet を簡易 Webサーバーとして動かして、手軽にWebHookを受け取る方法」を参考にしながら、下記のコードを用意しました。
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						function doPost(e) {   let ss = SpreadsheetApp.getActive(),       sheet = ss.getActiveSheet(),       data = [],       contents = e.postData.contents.split("&");   for(let i=0;contents[i];i++) {     let kv = contents[i].split('=');     data[i]=kv[1];   }   sheet.appendRow(data); }  | 
					
デプロイ時にWebアプリケーションURLが発行されます。
Node.jsでFitbitのAPIを取得
Fitbitの体重データAPIの取得は、Node.jsを利用しました。
Fitbitのトークンと、先ほどスプレッドシートで発行したWebアプリケーションURLを使って、下記のJavaScriptを用意します。
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28  | 
						const axios = require('axios'); const FITBIT_TOKEN = "[Fitbitのトークン]"; const GAS_URL = "[スプレッドシートWebアプリケーションURL]"; const getFitbit = (url) => {   let config = {     baseURL: 'https://api.fitbit.com/1',     url: `/user/[user-id]/${url}`,     method: 'get',     headers: {'Authorization': `Bearer ${FITBIT_TOKEN}`}   };   axios.request(config).then((res) => {     let data = res.data.weight.slice(-1)[0];//最新のデータ     if(!data.fat){       data = res.data.weight.slice(-2)[0];//体脂肪率がなければ1つ前のデータ     }     postData(GAS_URL, `dt=${data.date} ${data.time}&weight=${data.weight}&fat=${data.fat.toFixed(1)}&bmi=${data.bmi}`);   }); }; const postData = (url, data) => {   axios.post(url, data)   .then(function (response) {     console.log("書き込み完了");   }) }; getFitbit("body/log/weight/date/today.json");  | 
					
これをapp.jsなどの名前で保存して、コマンドプロントで「node app.js」を実行すれば、スプレッドシートに体重・体脂肪などが記入されていきます。
体重データ取得の注意
Fitbitの体重取得APIで、不思議な結果が返ってくることがあります。
なぜか今日23時59分59秒の体重が返ってきます。まだ朝です。
取得しているデータをNode.jsのログで見てみます。

23時59分59秒に、fat(体脂肪率)がないデータが存在します。fatが記録できないのも問題なので、このデータは除外しましょう。前述のコードでは、fatがない時に1つ前のデータを取得するようにしています。
なぜこのデータが存在するのかは分かっていません。
スプレッドシートの確認

問題なく動作していれば、スプレッドシートに今日の体重が追記されます。
今回作ったNode.jsアプリを1日1回、体重を測った後に実行させると、体重推移を確認できます。
日付と体重の列を指定してグラフを作成すれば、データと連動してグラフも更新されていきます。
