#!/usr/bin/env python3 # -*- coding: utf-8 -*- from withings2 import WithingsAccount from garmin import GarminConnect from fit import FitEncoder_Weight from optparse import OptionParser from optparse import Option from optparse import OptionValueError from datetime import date from datetime import datetime import json import time import sys GARMIN_USERNAME = 'petr@majner.cz' GARMIN_PASSWORD = 'Mulen1978' class DateOption(Option): def check_date(option, opt, value): valid_formats = ['%Y-%m-%d', '%Y%m%d', '%Y/%m/%d'] for f in valid_formats: try: dt = datetime.strptime(value, f) return dt.date() except ValueError: pass raise OptionValueError('option %s: invalid date or format: %s. use following format: %s' % (opt, value, ','.join(valid_formats))) TYPES = Option.TYPES + ('date',) TYPE_CHECKER = Option.TYPE_CHECKER.copy() TYPE_CHECKER['date'] = check_date def main(): usage = 'usage: sync.py [options]' p = OptionParser(usage=usage, option_class=DateOption) p.add_option('--garmin-username', '--gu', default=GARMIN_USERNAME, type='string', metavar='', help='username to login Garmin Connect.') p.add_option('--garmin-password', '--gp', default=GARMIN_PASSWORD, type='string', metavar='', help='password to login Garmin Connect.') p.add_option('-f', '--fromdate', type='date', default=date.today(), metavar='') p.add_option('-t', '--todate', type='date', default=date.today(), metavar='') p.add_option('--no-upload', action='store_true', help="Won't upload to Garmin Connect and output binary-strings to stdout.") p.add_option('-v', '--verbose', action='store_true', help='Run verbosely') opts, args = p.parse_args() sync(**opts.__dict__) def sync(garmin_username, garmin_password, fromdate, todate, no_upload, verbose): def verbose_print(s): if verbose: if no_upload: sys.stderr.write(s) else: sys.stdout.write(s) if len(garmin_username) == 0 or len(garmin_password) == 0: print("Garmin username or password not set!") return #out_file = open('test.fit', 'wb') #out_file.write(fit.getvalue()) # verbose_print("Fit file: " + fit.getvalue()) # garmin connect garmin = GarminConnect() session = garmin.login(garmin_username, garmin_password) verbose_print('attempting to upload fit file...\n') r = garmin.upload_file('test.tcx', session) if r: print("Fit file uploaded to Garmin Connect") if __name__ == '__main__': main()