데이터 분석가

파이썬 쉬티(Sheety) & 운동 추적(Nutritionix) 프로그램 본문

파이썬(python) 프로젝트 모음

파이썬 쉬티(Sheety) & 운동 추적(Nutritionix) 프로그램

PlintAn 2023. 4. 7. 14:00

안녕하세요 !

 

 

이번 시간에는 구글 스프레트 시트운동 추적 플랫폼을 이용하여

 

운동을 기록하여 관리하는 프로그램을 만들어 보겠습니다 !

 

먼저 해당 프로그램을 만들기 앞서

 

1. Sheety, Google Sheet 연결하여 API 얻기(밑의 링크 참조)

2. Nutrition API 가입 후 APP API,PASS 확인

3. 코드 짜기

 

순으로 진행됩니다

 

 

 

Sheety 구글 시트(Google Sheets)를 데이터베이스로 활용할 수 있게 해주는

 

온라인 플랫폼으로 구글 시트에 저장된 데이터를 활용하여 간단한 API를 생성하는 역할을 한다

 

Sheety를 사용하면 개발자가 별도의 서버나 DB를 구축하지 않아도 된다

 

 

 

 

 

Sheety와 구글 시트를 연결시키는 방법은 밑의 링크에서 확인해주세요

https://an-ju-seong-coding.tistory.com/34

 

Sheety(쉬티)&구글 시트 사용

Sheety는 구글 시트(Google Sheets)를 데이터베이스로 활용할 수 있게 해주는 온라인 플랫폼으로 구글 시트에 저장된 데이터를 활용하여 간단한 API를 생성하는 역할을 한다 Sheety를 사용하면 개발자가

an-ju-seong-coding.tistory.com

 

 

 

Sheety와 구글 시트가 연결이 되었다면

 

Nutritionix API website

 

Nutrition API by Nutritionix

The Nutritionix API powers hundreds of health and fitness applications with a best-in-cass nutrition database solution.

www.nutritionix.com

1. 해당 사이트에서 "Get Your API Key" 를 찾아 FREE 버전 API 사용을 눌러 가입한다.

 

2. 가입 후 View your API key now 클릭

 

View your API key now 클릭

3. APP ID, APP Keys 생성 확인

 

 

 

자 이제 필요한

 

Sheety와 구글 시트의 API 정보

Nutritionix API 정보

에 대해 갖추어 졌으니

 

 

해당 링크는 사용 방법입니다

https://docs.google.com/document/d/1_q-K-ObMTZvO0qUEAxROrN3bwMujwAN25sLHwJzliK0/preview

 

Nutritionix API v2 - Documentation [PUBLIC]

Nutritionix API v2 Documentation [PUBLIC] Table of Contents Summary Live API Demos Important Resources Obtaining API Keys & Authenticating Food Lookup Endpoints /v2/natural/nutrients /v2/search/instant /v2/search/item Exercise Endpoints /v2/natural/exercis

docs.google.com

 

 

자 이제 코드를 알아보겠습니다

import requests
from datetime import datetime

# 성별, 체중, 키, 나이 정보를 변수에 저장합니다.
GENDER = 성별
WEIGHT_KG = 체중
HEIGHT_CM = 키
AGE = 나이

# Nutritionix API와 Sheety API에 접근하기 위한 앱 ID와 API 키를 변수에 저장합니다.
APP_ID = 뉴트리션 APP ID
API_KEY = 뉴트리션 APP KEYS

exercise_endpoint = 뉴트리션 API
sheet_endpoint = 쉬티 API

# Nutritionix API와 Sheety API의 엔드포인트 URL을 변수에 저장합니다.
exercise_endpoint = 뉴트리션 API
sheet_endpoint = 쉬티 API

1. 필요한 모듈을 import 한다requests 모듈은 API 요청을 위해, datetime 모듈은 현재 날짜와 시간을 위해 사용

 

2. 개인 정보와 API 키를 변수(GENDER, WEIGHT_KG 등) 에 저장

 

운동 데이터에 대한 인증 정보를 포함하는 개인 정보API에 액세스하기 위한 앱 ID, API 키가 필요하다

 

3. nutritionix API, Sheety API 앤드포인트(URL) 설정

 

 

 

# 사용자로부터 운동 내용을 입력받습니다.
exercise_text = input("Tell me which exercises you did: ")

# Nutritionix API에 전송할 데이터를 매개 변수로 설정합니다.
headers = {
    "x-app-id": APP_ID,
    "x-app-key": API_KEY,
}
parameters = {
    "query": exercise_text,
    "gender": GENDER,
    "weight_kg": WEIGHT_KG,
    "height_cm": HEIGHT_CM,
    "age": AGE
}

# Nutritionix API에 POST 요청을 보내고 결과를 JSON 형식으로 받아옵니다.
response = requests.post(exercise_endpoint, json=parameters, headers=headers)
result = response.json()
print(result)

# 현재 날짜와 시간을 가져와 변수에 저장합니다.
today_date = datetime.now().strftime("%d/%m/%Y")
now_time = datetime.now().strftime("%X")

4. 사용자로부터 운동 내역을 입력 받는다(input)

 

운동 내역을 입력 받은 후 , API 요청을 위해 매개 변수(parameters) 설정

 

5. Nutritionix API에 운동 정보 요청(호출)

 

API 요청을 보내기 위해 requests.post() 메소드 활용, 결과는 JSON 형식으로 반환된다

 

6. Sheety API 를 사용해 운동 기록 업데이트

 

운동 내역을 Sheety API로 불러와서 기록한다. >> 반복문을 사용해 API를 호출하고, 기록 업데이트

 

 

# Nutritionix API에서 반환된 운동 정보를 사용하여 Sheety API에 운동 기록을 추가합니다.
for exercise in result["exercises"]:
    sheet_inputs = {
        "workout": {
            "date": today_date,
            "time": now_time,
            "exercise": exercise["name"].title(),
            "duration": exercise["duration_min"],
            "calories": exercise["nf_calories"]
        }
    }

    # Sheety API에 POST 요청을 보내 운동 기록을 업데이트합니다.
    sheet_response = requests.post(sheet_endpoint, json=sheet_inputs)

    # 업데이트 결과를 출력합니다.
    print(sheet_response.text)

 

해당 API(URL)에서 활용할 매개변수(PARAMETER) 들을 확인하고 딕셔너리 형식으로

 

빼서 사용합니다 !

 

혹시 POST가 안된다면 Sheety api 설정에서 GET 밑에 POST도 ACTIVE 활성화 시켜주세요

 

 

i ran 3 miles and walked 10 miles.

ㅆㅅㅌㅊ !!!

 

잘 작동 되네요 !!

 

오른쪽 구글 Sheet에 자동으로 저장되는 것 보이시죠 ??

 

 

 

사실 코드 짜는 것보다 새로운 API, 권한설정 등 환경 세팅하는게 더 시간이 많이 걸렸던거 같습니다

 

그래도 이렇게 코드가 잘 작동을 하니 너무 뿌듯하네요 !

 

다들 화이팅합시다!

 

 

Comments