-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfitbite.py
More file actions
92 lines (72 loc) · 2.8 KB
/
fitbite.py
File metadata and controls
92 lines (72 loc) · 2.8 KB
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import fitbit
from selenium import webdriver
import os, time, random, re, yaml
from optparse import OptionParser
def load_config():
parser = OptionParser()
parser.add_option("-c", "--config", dest="config", default='fitbite.yaml',
help="yaml-formatted config file")
(options, args) = parser.parse_args()
return yaml.safe_load(open(options.config).read())
def authorize_with_fitbit():
consumer_key = os.getenv('FITBIT_CONSUMER_KEY')
consumer_secret = os.getenv('FITBIT_CONSUMER_SECRET')
user_key = os.getenv('FITBIT_USER_KEY')
user_secret = os.getenv('FITBIT_USER_SECRET')
return fitbit.Fitbit(consumer_key, consumer_secret, user_key=user_key, user_secret=user_secret)
def determine_calorie_level(fb, config):
steps = fb.activity_stats()['lifetime']['tracker']['steps']
print "You've taken %d steps today" % steps
# find possible levels
levels = config['levels']
the_calorie_level = levels[0].keys()[0]
for l in levels:
calorie_level, step_level = l.keys()[0], l.values()[0]
if step_level <= steps:
the_calorie_level = calorie_level
return the_calorie_level
def order_seamless(calorie_level):
# seamless info
SEAMLESS_URL = "http://www.seamless.com/"
SEAMLESS_EMAIL = os.getenv("SEAMLESS_EMAIL")
SEAMLESS_PASSWORD = os.getenv("SEAMLESS_PASSWORD")
# setup browser
browser = webdriver.Chrome()
# open seamless and login
browser.get(SEAMLESS_URL)
browser.find_element_by_id('memberLogin').click()
time.sleep(5)
browser.find_element_by_id('username').send_keys(SEAMLESS_EMAIL)
browser.find_element_by_id('password').send_keys(SEAMLESS_PASSWORD)
time.sleep(2)
browser.find_element_by_id('submitLogin').click()
time.sleep(5)
# navigate to favorite meals
browser.find_element_by_link_text('Favorite Meals').click()
time.sleep(5)
orders = browser.find_elements_by_class_name('action')
#filter by order:
orders = [o for o in orders if o.text == 'Order now']
# filter by caloric content
possible_orders = [o for o in orders if re.search(".*"+calorie_level+".*", o.find_element_by_tag_name('a').get_attribute('title'))]
n = len(possible_orders)
if n == 0:
print "No suitable orders available at this time. It's probably too late to eat anyways!"
return ""
elif n == 1:
the_order = possible_orders[0]
elif n > 1:
the_order = possible_orders[random.sample(range(0,(len(possible_orders)-1)))]
# select the order
the_order.click()
time.sleep(10)
# proceed to checkout
browser.find_element_by_id('FormAction').click()
time.sleep(5)
# browser.find_element_by_id('FormAction').click()
return "Check %s to see what you ordered!" % SEAMLESS_EMAIL
if __name__ == '__main__':
config = load_config()
fb = authorize_with_fitbit()
calorie_level = determine_calorie_level(fb, config)
print order_seamless(calorie_level)