Рубрики
Без рубрики

Строительство пригодности фитнеса

Введение в качестве мотиватора для поддержания здорового питания и попасть в рутину ежедневных … Помечено с Python, NewRelic, Fitness, панель инструментов.

Как мотиватор для поддержания здоровой диеты и попасть в рутину ежедневных тренировок, я начал отслеживать мои привышения и физические привычки, используя MyFitnessPal и другие мобильные приложения. Потягивание данных из этих источников и создание пользовательских событий в новых реликтовых Insights позволяет мне отслеживать мой прогресс и предоставляет мне возможность запросить мои данные, используя NRQL и создавать визуализации.

Два основных приложения, которые я использую для отслеживания, это MyFitnessPal и Mapmywalk. . MyFitnessPal позволяет отслеживать вашу диету и упражнение для определения оптимального потребления калорий и питательных веществ для вашей общей цели. MapMywalk позволяет вам отслеживать сердечно-сосудистые мероприятия, такие как бега, ходьба и даже стационарные упражнения на велосипеде.

Хотя MyFitnessPal имеет API, только для частного доступа. Чтобы обойти это, я нашел библиотеку Python под названием Python-myfitnesspal Что позволяет вам скреплять данные от MyFitnessPal. Смотрите пример ниже:

import myfitnesspal

client = myfitnesspal.Client('my_username')
day = client.get_date(2013, 3, 2)
day
# >> <03/02/13 {'sodium': 3326, 'carbohydrates': 369, 'calories': 2001, 'fat': 22, 'sugar': 103, 'protein': 110}>

Для ежедневного резюме информации о вашем питании вы можете использовать имущество имущества в день объекта:

day.totals
# >> {'calories': 2001,
#     'carbohydrates': 369,
#     'fat': 22,
#     'protein': 110,
#     'sodium': 3326,
#     'sugar': 103}

Если вы хотите увидеть количество воды, которую вы записали:

day.water
# >> 1

Идеально. Это именно точки данных, которые меня интересуют. Итак, один раз в день, я называю API, чтобы получить эти значения и записывать пользовательское событие, используя API Python Agent:

def send_intake_data():
    client = myfitnesspal.Client(USERNAME, PASSWORD)
    day = client.get_date(datetime.datetime.now())
    totals = day.totals
    totals.update({'water': day.water})
    newrelic.agent.record_custom_event('Meal', totals, application)

Точно так же MyFitnessPal, Mapmywalk имеет API Но это только частный доступ. Чтобы решить эту проблему, я написал простой скрипт, использующий Selenium, который входит в веб-сайт mapmywalk, а затем переходит на ресурс JSON, который содержит мои данные тренировки. Один раз каждый день я называю этот скрипт, чтобы получить данные тренировки в течение этого дня, а затем записать пользовательское событие в Insights:

def login():
    logger.info("Logging into MapMyWalk")
    driver = webdriver.Chrome(options=chrome_options)
    driver.get(LOGIN_URL)
    driver.find_element_by_id('email').send_keys(USERNAME)
    driver.find_element_by_id('password').send_keys(PASSWORD)
    driver.find_element_by_id('password').send_keys(Keys.ENTER)
    return driver

def get_workout_data():
    d = login()
    time.sleep(3)
    today = datetime.date.today()
    d.get(WORKOUTS % (today.month, today.year))
    time.sleep(3)
    pre = d.find_element_by_tag_name("pre").text
    data = json.loads(pre)
    logger.info("JSON response: %s" % data)
    wd = data['workout_data']['workouts']
    d.close()
    d.quit()
    today = str(today)
    if today not in wd:
        logger.info("No workouts found for today.")
        return None
    else:
        return wd[today]

def send_workout_data():
    workout_data = get_workout_data()
    if workout_data is not None:
        for w in workout_data:
            logger.info(w)
            newrelic.agent.record_custom_event('Workout', w, application)

Вы можете найти полный исходный код на моем Github Отказ Документация охватывает инструкции по настройке и развертыванию проекта.

Установка

Этот проект использует Python-myfitnesspal Программно взаимодействовать и проанализировать информацию, которую я ввел в MyFitnessPal. Для аутентификации вам нужно будет экспортировать ваше имя пользователя и пароль в качестве переменных среды:

export FITNESS_PAL_USERNAME='YOUR_USERNAME'
export FITNESS_PAL_PASSWORD='YOUR_PASSWORD'

Я использую Selenium и Chromedriver для автоматизации поиска данных с веб-сайта MapMywalk. Вам нужно будет иметь Google Chrome и Chromedriver установлены. Если вы используете MacOS, вы можете установить Chromedriver с помощью домогота:

brew cask install chromedriver

Чтобы отправить метрики на новые реликтовые Insights, вам также нужно будет экспортировать имя вашего приложения и лицензионный ключ:

export NEW_RELIC_LICENSE_KEY='YOUR_LICENSE_KEY'
export NEW_RELIC_APP_NAME='YOUR_APP_NAME'

Затем создайте новую виртуальную среду и установите требования к проекту:

virtualenv env
source env/bin/activate
pip install -r requirements.txt

Наконец, запустите работник:

python fitnesspal.py

Программа использует Расписание Чтобы отправить метрики один раз в день в 23:30.

Развертывание Героку

Поскольку я использую Selenium для автоматизации поиска данных из MapMywalk, вам нужно будет установить следующие сборки Buildpack:

Вам также необходимо настроить переменные среды, изложенные в установке выше, например:

heroku config:set NEW_RELIC_LICENSE_KEY=YOUR_LICENSE_KEY

Запрос представлений данных

Этот инструмент создает два пользовательских события, Еда и Тренировка , который вы можете запросить использование NRQL в Insights.

Примеры

Получите ваше среднее потребление калорий с 1 недели назад:

SELECT average(calories) FROM Meal SINCE 1 week AGO TIMESERIES 1 day 

Получите общее количество шагов, прогуливающихся с 1 недели назад:

SELECT sum(steps) FROM Workout SINCE 1 week AGO TIMESERIES 1 day 

Получить общую сумму потребленной воды:

SELECT sum(water) FROM Meal SINCE 1 week AGO TIMESERIES 1 day 

Оригинал: “https://dev.to/anthonybloomer/building-a-fitness-insights-dashboard-2h74”