41 lines
1.7 KiB
Python
41 lines
1.7 KiB
Python
# 운영체제 관련 기능 (예: 환경변수 읽기, 경로 등)을 위한 모듈
|
|
import os
|
|
|
|
# HTTP 요청을 보내기 위한 외부 라이브러리 (API 호출용)
|
|
import requests
|
|
|
|
# .env 파일에 저장된 환경변수를 불러오기 위한 도구
|
|
from dotenv import load_dotenv
|
|
|
|
# .env 파일에서 환경변수들을 로드합니다 (예: API 키)
|
|
load_dotenv()
|
|
|
|
# 환경변수에서 Polygon API 키를 읽어옵니다
|
|
API_KEY = os.getenv("POLYGON_API_KEY")
|
|
|
|
|
|
# 주어진 종목(symbol)에 대해 Polygon API를 사용하여 OHLCV 데이터를 수집하는 함수
|
|
# 예: fetch_ohlcv("AAPL", "2024-01-01", "2024-03-01")
|
|
def fetch_ohlcv(symbol: str, start_date: str, end_date: str, interval: str = "day") -> list:
|
|
# Polygon API의 엔드포인트 URL 구성
|
|
url = f"https://api.polygon.io/v2/aggs/ticker/{symbol}/range/1/{interval}/{start_date}/{end_date}"
|
|
|
|
# API 호출에 필요한 파라미터 정의
|
|
params = {
|
|
"adjusted": "true", # 분할, 배당 등을 반영한 데이터 사용 여부
|
|
"sort": "asc", # 날짜 기준 오름차순 정렬
|
|
"limit": 50000, # 한 번에 최대 수집 가능한 데이터 수
|
|
"apiKey": API_KEY # 인증을 위한 API 키
|
|
}
|
|
|
|
# GET 방식으로 API 호출을 수행
|
|
res = requests.get(url, params=params)
|
|
|
|
# 응답 상태 코드가 200이 아니면 예외를 발생시킴 (에러 메시지도 함께 출력)
|
|
if res.status_code != 200:
|
|
raise Exception(f"Polygon API error: {res.status_code} - {res.text}")
|
|
|
|
# JSON 응답 중 'results' 키에 들어있는 실제 데이터를 추출하여 반환
|
|
data = res.json()
|
|
return data.get("results", [])
|