Day 038 - 구글 시트에 운동 기록◎ Python/Udemy Python2024. 3. 8. 20:23
Table of Contents
반응형
시작하며
오늘도 초미니 프로젝트를 하나 만듭니다! 운동에 관한 자연어 처리를 해주는 뉴트리셔닉스 (Nutritionix)을 이용해 자연어 처리로 오늘 무슨 운동을 했는지 대충 입력하면, 알아서 분류해 엑셀 시트에 넣어주는 프로그램입니다.
코드 전문
# main.py
from exercise import Exercise
from sheety import Sheety
query = input('Tell me which exercises you did : ')
p1 = Exercise(query=query)
p1.post_exercise()
put = Sheety(p1.get_exercise())
put.post_sheety()
# exercise.py
"""뉴트리셔닉스 핵심 코드"""
from dotenv import load_dotenv
import os
import requests
load_dotenv()
class Exercise:
def __init__(self, query) -> None:
self.ID = os.getenv('NUTRITION_ID')
self.KEY = os.getenv('NUTRITION_KEY')
self.GENDER = 'Male'
self.AGE = '23'
self.WEIGHT_KG = 75
self.HEIGHT_CM = 170
self.endpoint = 'https://trackapi.nutritionix.com/v2/natural/exercise'
self.params = {
'query': query,
'gender': self.GENDER,
'age': self.AGE,
'weight_kg': self.WEIGHT_KG,
'height_cm': self.HEIGHT_CM,
}
self.headers = {
"x-app-id": self.ID,
"x-app-key": self.KEY,
}
def post_exercise(self):
r = requests.post(self.endpoint, json=self.params, headers=self.headers)
self.res = r.json()
# print(self.res)
# 막힌 곳 : 운동이 여러 개 입력받았을 때, 어떻게 대처해야 할지
def get_exercise(self):
ex_raw = self.res['exercises']
ex_list = []
for i in ex_raw:
exercise = i['name']
duration = i['duration_min']
calories = i['nf_calories']
ex_list.append([exercise, duration, calories])
return ex_list
# sheety.py
"""sheety API 핵심 코드 (구글 스프레트시드 업로드)"""
from dotenv import load_dotenv
from datetime import datetime
import os
import requests
load_dotenv()
date = datetime.now().strftime('%d/%m/%Y')
time = datetime.now().strftime('%H:%M:%S')
class Sheety:
def __init__(self, ex_list) -> None:
self.date = datetime.now().strftime('%d/%m/%Y')
self.time = datetime.now().strftime('%H:%M:%S')
self.ex_list = ex_list
self.endpoint = os.getenv('SHEETY_API_EXERCISE')
"""파라미터에서 대문자를 쓰면 안된다 ㅎㅎㅎㅎㅎ"""
def make_params(self, exercise, duration, calories):
params = {
'workout': {
'date': self.date,
'time': self.time,
'exercise': exercise.title(),
'duration': duration,
'calories': calories,
}
}
return params
def post_sheety(self):
for i in self.ex_list:
params = self.make_params(i[0], i[1], i[2])
r = requests.post(url=self.endpoint, json=params)
print(r.text)
코드 해석, 그리고 알게된 점
큰 줄기는 간단합니다. main.py
에서 Exercise
객체를 하나 만들어 뉴트리셔닉스에 POST
요청을 해 받아온 데이터(운동 종류, 총 칼로리 소모, 소모한 시간 등)를 다시 Sheety
객체에 넣어 이를 구글 스프레드시트로 업로드합니다.
가장 중요한 알게 된 점은, JSON
에서 Key
값을 대문자로 쓰면 안된다는 것을 깨달았습니다. 시트 첫 번째 행에 대문자로 쓰여있는 것이 디폴트값인 것 같아 date
가 아닌 Date
등으로, title()
화를 해주었는데 자꾸 오류가 나서 긴 시간을 헤맸습니다.
반응형
'◎ Python > Udemy Python' 카테고리의 다른 글
Day 040 - 항공권 가격 추적 프로젝트 (심화) (0) | 2024.03.08 |
---|---|
Day 039 - 항공권 가격 추적 프로젝트 (0) | 2024.03.08 |
Day 037 - 습관 추적기 프로젝트 (0) | 2024.03.08 |
Day 036 - 주식시장 알림 프로젝트 (1) | 2024.03.08 |
Day 033 - API 활용 (1) | 2024.03.08 |
@Reo :: 코드 아카이브
자기계발 블로그