at backyard

Color my life with the chaos of trouble.

Fitbit APIを使って、本日のActivityを取得するかんたんなサンプルを書いてみた(Node.jsとGoとPython)

以前から気になっていたFitbit APIを試してみた。

セットアップなどについては下記の記事がとても参考になった。

qiita.com

目次

Node.jsを用いて本日のActivityを取得するサンプル

ひとまずはtokenを取得して、APIを叩けるところまで準備し、下記のコードで本日のactivityが取得できることを確認した。

const fetch = require('node-fetch');
const config = require('config');
const moment = require('moment');

(async() => {
    const today = moment().format('YYYY-MM-DD');
    const url = `https://api.fitbit.com/1/user/-/activities/date/${today}.json`;
    const option = {
        method: "GET",
        headers: {'Authorization': `Bearer ${config.token}`}
    };

    const response = await fetch(url, option).then(r => r.json());
    console.log({response});
})();

上のコードを実行するには、下記コマンドでライブラリを導入の上、 config/default.jsonに下記の記述を追加する必要がある。

yarn add config node-fetch moment
{
    "token": "取得した自身のtokenを設定"
}

ちなみにactivity取得APIに関するドキュメントは下記にあった

dev.fitbit.com

Node.js(.mjs)を用いて本日のActivityを取得するサンプル、その2

久しぶりにFitbit APIを使った際に、この記事を読み返したのだが、自身のJSサンプルが冗長な気がしたので、書き直してみた。
なお、mjs で書いているので、top level awaitを利用している。

あと、上のサンプルでは ライブラリをいくつか利用しているが、今回は node-fetch のみとしている。

import fetch from 'node-fetch';

// 取得したtokenをセット
const TOKEN = "";

// 本日の日付
const date = new Date();
const today = date.getFullYear() + 
  "-" +
  String(date.getMonth() + 1).padStart(2, '0') +
  "-" +
  String(date.getDate()).padStart(2, "0");

// 本日のactivityを取得
const url = `https://api.fitbit.com/1/user/-/activities/date/${today}.json`;
const option = {
  method: "GET",
  headers: {'Authorization': `Bearer ${TOKEN}`}
};

const response = await fetch(url, option).then(r => r.json());
console.log(response);

Goを用いて本日のActivityを取得するサンプル

Goで同様の内容のサンプルを書いてみたので、こちらもサンプルとして残しておく。

package main

import (
    "io/ioutil"
    "log"
    "net/http"
    "time"
)

func main() {
    today := time.Now().Format("2006-01-02")
    url := "https://api.fitbit.com/1/user/-/activities/date/" + today + ".json"

    // 取得したtokenをセット
    token := ""
    bearer := "Bearer " + token

    req, err := http.NewRequest(http.MethodGet, url, nil)
    if err != nil {
        log.Println("Error new requst: ", err)
    }

    req.Header.Add("Authorization", bearer)

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        log.Println("Error response: ", err)
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        log.Println("Error while reading: ", err)
    }

    log.Println(string([]byte(body)))
}

Pythonを用いて本日のActivityを取得するサンプル

Pythonで同様の内容のサンプルを書いてみたので、こちらもサンプルとして残しておく。
ライブラリとして requests を利用している。

from datetime import datetime
import requests


def main():
    # 本日の日付
    today = datetime.now().strftime('%Y-%m-%d')

    url = "https://api.fitbit.com/1/user/-/activities/date/" + today + ".json"

    # 取得したtokenをセット
    token  = ""

    headers = {
        "Authorization": "Bearer {}".format(token)
    }

    r = requests.get(url, headers=headers)
    print(r.json())



if __name__ == "__main__":
    main()