-
Notifications
You must be signed in to change notification settings - Fork 0
/
myFitnessPalApi.py
36 lines (33 loc) · 1.34 KB
/
myFitnessPalApi.py
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
import datetime
import myfitnesspal
from models import Food, FoodHistory, Nutrient, FoodNutrient
days = dict()
def apiCall(request, start, end, attribute, timeout):
client = myfitnesspal.Client(request['username'], request['password'])
dayCount = (end - start).days + 1
date = start.date()
emptyDays = 0
for i in reversed(range(dayCount)):
timestamp = date + datetime.timedelta(days=i)
if timestamp in days:
day = days[timestamp]
else:
day = client.get_date(timestamp)
items = getattr(day, attribute)
if all(len(item) == 0 for item in items):
emptyDays += 1
if emptyDays == timeout:
return
continue
else:
emptyDays = 0
for item in items:
yield (timestamp, item)
def call(request, start, end):
for timestamp, meal in apiCall(request, start, end, "meals", 7):
for i, entry in enumerate(meal.entries):
food = Food(name=entry.short_name, unit=entry.unit)
food_quantity=float(entry.quantity)
for name, quantity in entry.totals.items():
yield FoodNutrient(food=food, nutrient=Nutrient(name=name), quantity=quantity/food_quantity)
yield FoodHistory(timestamp=timestamp, food=food, meal=meal.name, servings=food_quantity)