diff --git a/docs/superpowers/plans/2026-05-12-stock-screener-board.md b/docs/superpowers/plans/2026-05-12-stock-screener-board.md index 54e52e1..2db098f 100644 --- a/docs/superpowers/plans/2026-05-12-stock-screener-board.md +++ b/docs/superpowers/plans/2026-05-12-stock-screener-board.md @@ -34,8 +34,16 @@ python -m venv .venv .\.venv\Scripts\Activate.ps1 pip install -r requirements.txt pip install pytest httpx pandas -# (requirements.txt에 pykrx 추가는 Task 0.1에서 진행. 그 이후 다음으로 pykrx도 설치:) -# pip install pykrx +# (requirements.txt 변경은 Task 0.1에서. 추가 의존성 설치:) +# pip install finance-datareader beautifulsoup4 lxml + +# ⚠️ 데이터 소스 변경 노트 (2026-05-12 실측 후 결정): +# plan의 spec은 "pykrx 하이브리드"였으나, 실측 결과 pykrx의 시장 전체 함수 +# (get_market_ticker_list / get_market_cap / get_market_ohlcv_by_ticker)가 모두 KRX +# 인증 요구로 인해 비인증 호출 시 깨짐. 따라서 실제 구현은: +# - 종목 마스터 + 당일 일봉 + 5년치 일봉: FinanceDataReader (fdr) +# - 외국인/기관 수급: 네이버 금융 종목별 frgn 페이지 스크래핑 (시총 상위 500종목) +# Task 0.3 snapshot.py 코드는 implementer dispatch 시 새 방향으로 안내됨. ``` | 작업 | 어디서 실행 | @@ -60,9 +68,17 @@ pip install pytest httpx pandas - Create: `web-backend/stock-lab/app/screener/__init__.py` - Modify: `web-backend/stock-lab/app/db.py` (스크리너 스키마 함수 호출 1줄 추가) -- [ ] **Step 1: requirements.txt에 pykrx 추가** +- [ ] **Step 1: requirements.txt에 데이터 라이브러리 추가** -`web-backend/stock-lab/requirements.txt`에 `pykrx>=1.0.45` 한 줄 추가. (기존 줄 위 또는 아래 어느 곳이든.) +`web-backend/stock-lab/requirements.txt`에 다음 의존성 추가: + +``` +finance-datareader>=0.9.96 +beautifulsoup4>=4.12 +lxml>=5.0 +``` + +(`httpx`는 보통 이미 있으나 없으면 함께 추가.) 기존 pykrx 라인은 추가하지 않습니다 (실측 결과 시장 전체 함수가 KRX 인증 요구로 깨짐). - [ ] **Step 2: screener 패키지 생성** @@ -100,32 +116,33 @@ See docs/superpowers/specs/2026-05-12-stock-screener-board-design.md __all__ = [] ``` -- [ ] **Step 3: 로컬 venv에 pykrx 설치** +- [ ] **Step 3: 로컬 venv에 데이터 라이브러리 설치** ```powershell cd C:\Users\jaeoh\Desktop\workspace\web-backend\stock-lab .\.venv\Scripts\Activate.ps1 -pip install pykrx +pip install finance-datareader beautifulsoup4 lxml ``` -Expected: 설치 성공. 실패하면 numpy/pandas 호환성 점검(pykrx는 pandas≥1.5 요구). +Expected: 설치 성공. > NAS 운영 컨테이너 재빌드는 본 plan 마지막의 **최종 배포** 단계에서 `git push` → webhook으로 자동 수행. 지금은 로컬 venv 동작만 검증. -- [ ] **Step 4: pykrx 동작 smoke test (one-off, 로컬 venv)** +- [ ] **Step 4: FDR + 네이버 동작 smoke test (one-off, 로컬 venv)** ```powershell -python -c "from pykrx import stock; print(stock.get_market_ticker_list('20260512', market='KOSPI')[:5])" +python -c "import FinanceDataReader as fdr; df = fdr.StockListing('KRX'); print('rows:', df.shape[0]); print(df.head(3)[['Code','Name','Market','Marcap','Close']])" +python -c "import httpx; from bs4 import BeautifulSoup; r = httpx.get('https://finance.naver.com/item/frgn.naver?code=005930', headers={'User-Agent':'Mozilla/5.0'}); print('status:', r.status_code); soup = BeautifulSoup(r.text,'lxml'); print('rows:', len(soup.select('table.type2 tr')))" ``` -Expected: 5개 KOSPI 종목 코드 출력. 실패 시 IP 차단/네트워크 확인. +Expected: FDR rows ≥ 2,800. naver status 200, table rows > 5. - [ ] **Step 5: Commit** ```bash cd C:\Users\jaeoh\Desktop\workspace\web-backend git add stock-lab/requirements.txt stock-lab/app/screener/__init__.py -git commit -m "chore(stock-lab): pykrx 의존성 + screener 패키지 골격" +git commit -m "chore(stock-lab): FDR/네이버 데이터 의존성 + screener 패키지 골격" ``` ---