Skip to content

Commit 02d3715

Browse files
author
Brian Abelson
committed
initial commit
0 parents  commit 02d3715

File tree

4 files changed

+114
-0
lines changed

4 files changed

+114
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
*.pyc
2+
chromedriver.log
3+
.DS_Store

fitbite.py

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
import fitbit
2+
from selenium import webdriver
3+
import os, time, random, re, yaml
4+
from optparse import OptionParser
5+
6+
def load_config():
7+
parser = OptionParser()
8+
parser.add_option("-c", "--config", dest="config", default='fitbite.yaml',
9+
help="yaml-formatted config file")
10+
(options, args) = parser.parse_args()
11+
12+
return yaml.safe_load(open(options.config).read())
13+
14+
def authorize_with_fitbit():
15+
16+
consumer_key = os.getenv('FITBIT_CONSUMER_KEY')
17+
consumer_secret = os.getenv('FITBIT_CONSUMER_SECRET')
18+
user_key = os.getenv('FITBIT_USER_KEY')
19+
user_secret = os.getenv('FITBIT_USER_SECRET')
20+
21+
return fitbit.Fitbit(consumer_key, consumer_secret, user_key=user_key, user_secret=user_secret)
22+
23+
def determine_calorie_level(fb, config):
24+
25+
steps = fb.activity_stats()['lifetime']['tracker']['steps']
26+
steps = 6000
27+
print "You've taken %d steps today" % steps
28+
# find possible levels
29+
levels = config['levels']
30+
the_calorie_level = levels[0].keys()[0]
31+
for l in levels:
32+
calorie_level, step_level = l.keys()[0], l.values()[0]
33+
if step_level < steps:
34+
the_calorie_level = calorie_level
35+
36+
return the_calorie_level
37+
38+
def order_seamless(calorie_level):
39+
# seamless info
40+
SEAMLESS_URL = "http://www.seamless.com/"
41+
SEAMLESS_EMAIL = os.getenv("SEAMLESS_EMAIL")
42+
SEAMLESS_PASSWORD = os.getenv("SEAMLESS_PASSWORD")
43+
44+
# setup browser
45+
browser = webdriver.Chrome()
46+
47+
# open seamless and login
48+
browser.get(SEAMLESS_URL)
49+
browser.find_element_by_id('memberLogin').click()
50+
time.sleep(5)
51+
browser.find_element_by_id('username').send_keys(SEAMLESS_EMAIL)
52+
browser.find_element_by_id('password').send_keys(SEAMLESS_PASSWORD)
53+
browser.find_element_by_id('corporate_member_submit').click()
54+
time.sleep(5)
55+
# navigate to favorite meals
56+
browser.find_element_by_link_text('Favorite Meals').click()
57+
time.sleep(5)
58+
orders = browser.find_elements_by_class_name('action')
59+
60+
#filter by order:
61+
orders = [o for o in orders if o.text == 'Order now']
62+
63+
# filter by caloric content
64+
possible_orders = [o for o in orders if re.search(".*"+calorie_level+".*", o.find_element_by_tag_name('a').get_attribute('title'))]
65+
66+
n = len(possible_orders)
67+
if n==0:
68+
print "No suitable orders available at this time. It's probably too late to eat anyways!"
69+
return ""
70+
elif n==1:
71+
the_order = possible_orders[0]
72+
elif n>1:
73+
the_order = possible_orders[random.sample(range(0,(len(possible_orders)-1)))]
74+
75+
# select the order
76+
the_order.click()
77+
time.sleep(5)
78+
79+
# proceed to checkout
80+
browser.find_element_by_id('FormAction').click()
81+
time.sleep(5)
82+
# browser.find_element_by_id('FormAction').click()
83+
84+
return "Check %s to see what you ordered!" % SEAMLESS_PASSWORD
85+
86+
if __name__ == '__main__':
87+
88+
config = load_config()
89+
fb = authorize_with_fitbit()
90+
calorie_level = determine_calorie_level(fb, config)
91+
print order_seamless(re.sub("_", " ", calorie_level))

fitbite.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
levels:
2+
- LOW_CALORIES: 5000
3+
- MEDIUM_CALORIES: 10000
4+
- HIGH_CALORIES: 15000

readme.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
```
2+
.-""""-.
3+
/' . '. \
4+
(`-..:...-')
5+
; FITBITE ;
6+
'-------'
7+
___/( /(
8+
/--/ \\//
9+
__ )/ /\/ \/
10+
`-.\ //\\
11+
\\// \\
12+
\/ \\
13+
\\
14+
'--`
15+
```
16+
Order food from Seamless based on your Fitbit activity for the day.

0 commit comments

Comments
 (0)