Esempio n. 1
0
class Fitbit(object):

    authorization = None
    database = None

    def __init__(self, database):
        self.authorization = Authorization()
        self.database = database

    def getHeartIntradayRate(self, date, callback=None):
        data = self.getHeartRateIntradaytDb(date)
        if data == None:
            print("Data not found in database, reaching Fitbit.com")
            data = self.getHeartRateIntradayOnline(date)
        if callback != None:
            callback(data)
        else:
            return data

    def getHeartRateIntradaytDb(self, date):
        return self.database.getIntradayData(date)

    def getHeartRateIntradayOnline(self, date):
        uri = AppConfig().get("uri_heart")
        uri = uri.replace("[date]", date)
        uri = uri.replace("[end-date]", date)
        authorizationHeader = self.authorization.getAuthorizationHeader(
            self.authorization.getToken(self.database))
        response = requests.get(uri,
                                headers={"Authorization": authorizationHeader})
        data = self.formatJson(response.json())
        if data == None:
            return None
        self.database.saveIntraday(data[0])
        self.database.saveZones(data[1])
        return data[0]

    def formatJson(self, json):
        date = None
        intradayData = list()
        zonesData = list()
        for activity in json["activities-heart"]:
            date = activity["dateTime"]
            for zone in activity["value"]["heartRateZones"]:
                if "caloriesOut" not in zone:
                    return None
                zonesData.append((date, zone["name"], zone["max"], zone["min"],
                                  zone["caloriesOut"], zone["minutes"]))
        for intraday in json["activities-heart-intraday"]["dataset"]:
            intradayData.append((date, intraday["time"], intraday["value"]))
        return (intradayData, zonesData)