git을 보니까 __main__
, __init__
이나 다양한 폴더들이 보였다.
그래서 이런 구조를 따라가는 것 부터 시작.
내 프로젝트는 현재
덩그러니.. 하다.
star_info_api/
│
├── venv/ # 가상 환경 폴더 (추적하지 않음)
│
├── app/ # 메인 애플리케이션 폴더
│ ├── __init__.py # Flask 앱 초기화
│ ├── routes.py # 모든 API 엔드포인트 정의
│ ├── models.py # 데이터 모델 정의 (필요 시)
│ └── utils.py # 공통 함수나 유틸리티 함수 정의
│
├── instance/ # 설정 파일 (예: config.py) 저장 (비공개 데이터)
│ └── config.py # 앱 설정 파일 (환경변수, API 키 등)
│
├── tests/ # 테스트 코드 폴더
│ └── test_api.py # 유닛 테스트, API 테스트
│
├── requirements.txt # 의존성 패키지 목록
├── .gitignore # Git에 추가하지 않을 파일 목록
├── config.py # 환경 설정 (환경 변수)
└── run.py # 애플리케이션 시작점
GPT한테 구조화를 시킨다면 어떻게 해야되냐고 물어봐서 이런 결과를 얻어냈다. 일단 이렇게 맞춰서 만들어보자.
mkdir app instance tests
touch app/__init__.py app/routes.py app/models.py app/utils.py instance/config.py tests/test_api.py run.py
해당 명령어로 다 처리할 수 있었네. 손으로 다 했다.
여튼 이렇게 만들었다.
정상 구동까지 확인 완료.
우선 유성우부터 처리해보도록 했다. 데이터 입력값은 정적으로 처리.
# 모든 API 엔드포인트 정의
from flask import Blueprint, jsonify
main = Blueprint('main', __name__)
# 유성우 데이터 (정적 데이터로 정의)
meteor_showers = {
"perseids": {
"peak_date": "2024-08-12",
"best_time": "02:00",
"location": {
"latitude": 34.0522,
"longitude": -118.2437
},
"expected_rate": "60 meteors per hour"
},
"geminids": {
"peak_date": "2024-12-14",
"best_time": "03:00",
"location": {
"latitude": 51.5074,
"longitude": -0.1278
},
"expected_rate": "120 meteors per hour"
}
}
# 기본 라우트
@main.route('/')
def index():
return "Welcome to the Star Info API!"
# 유성우 예보 API 라우트
@main.route('/api/meteors/<string:shower_name>', methods=['GET'])
def get_meteor_shower(shower_name):
# 입력받은 유성우 이름을 소문자로 변환해서 데이터에서 검색
shower = meteor_showers.get(shower_name.lower())
# 데이터가 없을 경우 404 에러 반환
if not shower:
return jsonify({"error": "Meteor shower not found"}), 404
# 유성우 데이터를 JSON으로 반환
return jsonify({
"meteor_shower": shower_name.capitalize(),
"peak_date": shower["peak_date"],
"best_time": shower["best_time"],
"location": {
"latitude": shower["location"]["latitude"],
"longitude": shower["location"]["longitude"]
},
"expected_rate": shower["expected_rate"]
})
코드는 이렇고 결과를 뽑는 방법은
http://127.0.0.1:5000/api/meteors/perseids
페르세우스 검색http://127.0.0.1:5000/api/meteors/geminids
쌍둥이자리 검색
와 진짜 좀 놀랍다. 코드 그렇게 많이 쓴 것도 아닌데 저거 계산 값을 내놓는게 신기하네.
이러면 일단 유성우 정보 기반은 다졌고,
다음목표:
- 나라별 변수나 위도/경도를 기반으로 유성우 관측 시간을 맞추기.
- 사용자가 서울이나 한국 등 특정 지역을 기준으로 언제 유성우를 관측할 수 있는지 제공.
지금은 고정 값이라. 저렇게 바꾸면 정보가 조금 더 가치가 있어질 것이다. 일단 시간이 너무 늦었다 자야겠다.
'Coding History > Team Project' 카테고리의 다른 글
팀플) REST API 일몰 일출 정보 데이터 (1) | 2024.10.10 |
---|---|
팀플) REST API 별자리 정보데이터 생성. (4) | 2024.10.10 |
팀플) Python 설치 및 Skyfield 설치 적용. REST API 설계 시작. (12) | 2024.10.09 |
팀플) AstronomyAPI 연결 시작 (폐기) (14) | 2024.10.09 |
팀플) 타임리프 폐기, React로 전환. (2) | 2024.10.08 |