class FitBitClient(object): CLIENT_UUID = "2ea32002-a079-48f4-8020-0badd22939e3" FITBIT_HOST = "client.fitbit.com" START_PATH = "/device/tracker/uploadData" def __init__(self, debug=False): self.info_dict = {} self.log_info = {} self.time = time.time() self.data = [] conn = getConn() if conn is None: print "No base found!" exit(1) base = ANT(conn) self.fitbit = FitBit(base) if not self.fitbit: print "No devices connected!" exit(1) def __del__(self): self.close() self.fitbit = None def form_base_info(self, remote_info=None): self.info_dict.clear() self.info_dict["beaconType"] = "standard" self.info_dict["clientMode"] = "standard" self.info_dict["clientVersion"] = "1.0" self.info_dict["os"] = "libfitbit" self.info_dict["clientId"] = self.CLIENT_UUID if remote_info: self.info_dict.update(remote_info) for f in ['deviceInfo.serialNumber','userPublicId']: if f in self.info_dict: self.log_info[f] = self.info_dict[f] def dump_connection(self, directory='~/.fitbit'): directory = os.path.expanduser(directory) data = yaml.dump(self.data) if 'userPublicId' in self.log_info: directory = os.path.join(directory, self.log_info['userPublicId']) if not os.path.isdir(directory): os.makedirs(directory) f = open(os.path.join(directory,'connection-%d.txt' % int(self.time)), 'w') f.write(data) f.close() print data def close(self): self.dump_connection() print 'Closing USB device' try: self.fitbit.base.connection.close() except AttributeError: pass self.fitbit.base = None def run_upload_requests(self): self.fitbit.init_tracker_for_transfer() conn = FitBitRequest(self.FITBIT_HOST, self.START_PATH, https=True) # Start the request Chain self.form_base_info() while conn is not None: self.form_base_info(conn.response) self.info_dict.update(conn.run_opcodes(self.fitbit)) conn.upload(self.info_dict) self.data.append(conn.dump()) conn = conn.getNext() self.fitbit.command_sleep()