This repository has been archived on 2025-06-07. You can view files and clone it, but cannot push or open issues or pull requests.
SightRay_Legacy/utils/ticker_downloader.py
2025-05-06 21:23:04 +09:00

56 lines
1.8 KiB
Python

import requests
import os
import pandas as pd
from dotenv import load_dotenv
from datetime import datetime
import time
# .env 파일에서 API 키 로드
load_dotenv()
API_KEY = os.getenv("POLYGON_API_KEY")
def fetch_all_us_stock_tickers(save_path="all_polygon_tickers.csv", delay_sec=13):
"""
Polygon.io에서 모든 US 주식 티커를 가져와 CSV로 저장
사용자의 요금제에 따라 요청 간 대기 시간 조절 가능
"""
base_url = "https://api.polygon.io/v3/reference/tickers"
params = {
"market": "stocks",
"active": "true",
"limit": 1000,
"apiKey": API_KEY
}
all_tickers = []
next_url = base_url
page = 1
while next_url:
print(f"🔄 요청 중 ({page} 페이지): {next_url}")
response = requests.get(next_url, params=params if next_url == base_url else {})
if response.status_code != 200:
raise Exception(f"요청 실패: {response.status_code} - {response.text}")
data = response.json()
results = data.get("results", [])
all_tickers.extend(results)
next_url = data.get("next_url")
if next_url and "apiKey" not in next_url:
next_url += f"&apiKey={API_KEY}"
page += 1
time.sleep(delay_sec) # 요청 간 간격 조정
# DataFrame으로 정리 후 저장
df = pd.DataFrame(all_tickers)
df.to_csv(save_path, index=False)
print(f"✅ 총 {len(df)}개 종목 저장 완료 → {save_path}")
if __name__ == "__main__":
print("전체 US 주식 티커를 가져옵니다. 요금제에 따라 요청 간 대기 시간을 조정하세요.")
delay = input("요청 간 대기 시간 (초) [기본: 13]: ").strip()
delay_sec = int(delay) if delay else 13
fetch_all_us_stock_tickers(delay_sec=delay_sec)