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)