Как мотиватор для поддержания здоровой диеты и попасть в рутину ежедневных тренировок, я начал отслеживать мои привышения и физические привычки, используя 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”