尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗미국 · 일본 · 홍콩 상장사의 실적발표 일정을 주(週) 단위로 보는 단일 HTML 페이지. 레이아웃은 EarningsHub 주간 캘린더를, 디자인은 taiwan-it-revenue를 따랐다.
https://cbturbomax.github.io/Earning-Samurai-Calendar/
| 파일 | 역할 |
|---|---|
scrape.py | 🇯🇵 닛케이 결산발표 스케줄 → data/earnings.json |
scrape_us.py | 🇺🇸 나스닥 실적발표 캘린더 → data/earnings_us.json |
scrape_hk.py | 🇭🇰 HKEXnews 실적 공시 → data/earnings_hk.json |
markets.py | 시장 레지스트리 — 라벨·색·휴장일·표기 대역표 |
companies.py / companies_us.py / companies_hk.py | 시장별 주목종목 사전 |
translit.py | 일본 회사명 → 한글 표기 변환기 |
build.py | data/*.json 셋을 합쳐 → index.html |
index.html | 산출물. 외부 의존 없는 단일 파일 (폰트 CDN만 사용) |
표준 라이브러리만 쓴다. pip install 필요 없음.
python scrape.py 2026-07-20 2026-09-30 # 일본
python scrape_us.py 2026-07-20 2026-09-30 # 미국
python scrape_hk.py 2026-07-20 2026-09-30 # 홍콩
python build.py
세 시장이 다 있어야 돌아가는 건 아니다. data/ 에 있는 것만 싣고, 없는 시장은
탭에 「미수집」으로 적는다. 한 시장만 받아서 돌려도 페이지는 나온다.
수집을 다시 할 필요가 없으면 build.py 만 돌리면 된다. 표기·레이아웃·기능 수정은
전부 이쪽이다.
| 출처 | 조회 단위 | 원본에 있는 것 | |
|---|---|---|---|
| 🇯🇵 일본 | 日本経済新聞「決算発表スケジュール」(QUICK 제공) | 하루 × 50건 페이징 | 업종·거래소·결산기 |
| 🇺🇸 미국 | Nasdaq Earnings Calendar (api.nasdaq.com) | 하루 1요청 | 발표 시각·시가총액·EPS 컨센서스 |
| 🇭🇰 홍콩 | HKEXnews 상장사 공시 (실적 공시) | 날짜 범위 | 공시 제목·분류 |
세 소스 다 성격이 조금씩 다르다.
세 스크래퍼 모두 "조용한 0건"을 만들지 않는 것을 제일 중요하게 다룬다. 발표가 없는 날과 못 받은 날이 구분되지 않으면 캘린더를 믿을 수 없기 때문이다.
fetch_valid() 가 건수 표시(N件目を表示)나 0件 문구 중 하나를 반드시 확인한다.status.rCode 가 200 인 JSON 이면 나스닥이 대답한 것으로 보고,
rows 가 비었으면 그 날은 진짜 0건이다. 막히면 403 이나 JSON 아닌 본문이 온다.
처음에는 message 필드가 채워져 있을 것까지 요구했는데, 나스닥은 발표가 없는
날 그 필드를 비워 보내기도 한다. 그 바람에 주말처럼 원래 0건인 날이 통째로
'수집 실패'로 기록됐다 — 발표가 없는 날을 못 받은 날로 적는 것도 거짓말이다.result 가 JSON 문자열로 한 번 더 싸여 온다. 그 봉투가 깨지면
0건으로 넘기지 않고 원문 앞부분을 찍는다. python scrape_hk.py --probe 로
응답만 떠볼 수 있다.GIVE_UP_AFTER).
백오프는 잠깐 막힌 것을 견디는 장치지 차단된 상대를 뚫는 장치가 아니다.
닛케이는 데이터센터 IP 를 막기 때문에 GitHub Actions 에서는
EARNINGS_GIVE_UP=1 로 더 빨리 접게 해두었다.셋 다 물러섰다 재시도하고(15/45/120초, 일본만 300초까지), 받은 만큼 증분 저장한다. 이미 받은 날은 다시 안 긁으므로 중간에 죽어도 같은 명령을 다시 돌리면 못 받은 날만 이어서 받는다.
시장마다 원본 언어가 달라서 방식도 다르다.
| 원본 | 한글 표기 방식 | |
|---|---|---|
| 🇯🇵 일본 | 일본어 | translit.py 로 기계 변환 (3등급) + 사전 |
| 🇺🇸 미국 | 영문 | 사전에 있으면 한글명, 없으면 영문명 그대로 |
| 🇭🇰 홍콩 | 영문 | 사전에 있으면 한글명, 없으면 영문명 그대로 |
미국·홍콩을 억지로 음차하지 않는 이유는 두 가지다.
엔비디아는 도움이 되지만 퍼스트 인더스트리얼 리얼티 트러스트는 도움이 안 되고,
한자 사명을 한국 한자음으로 읽으면 아예 틀린다 — 騰訊은 '등신'이 아니라 텐센트다.
중국어는 훈독이 아니라 음 자체가 다른 것이라 일본어식 접근이 통하지 않는다.
일본 회사명 변환은 세 등급으로 나뉜다.
| 등급 | 방식 | 비중 |
|---|---|---|
| 2 | companies.py 수기 한글명, 또는 원래 로마자 사명 | 13% |
| 1 | 단어 사전으로 전부 커버 | 13% |
| 0 | 기계 변환 (가타카나 음운 + 한자 한국음) | 75% |
변환기가 하는 일:
robot home → robot homeジーエヌアイ→GNI, アイ・アールジャパン→IR재팬.WORDS)을 긴 것부터 매칭.일본 한자 지명·인명은 훈독이라 한국 한자음으로 읽으면 틀린다.
小田原은 오다와라인데 '소전원'이 되는 식이다. 그래서
이름이 틀렸으면 해당 시장의 companies*.py 또는 translit.py의 WORDS에
한 줄 넣고 build.py를 다시 돌리면 된다.
localStorage에 저장. D-day로 표시.
시장이 섞이므로 시장:코드(us:NVDA)로 담는다. 예전에 담아둔 일본 코드는
페이지를 열 때 자동으로 jp: 를 붙여 옮긴다.VALARM)이 들어 있다. 시차 문제를 피하려고 종일 일정으로 넣는다.companies*.py의
수기 목록에 의존한다.markets.py). 홍콩의 음력 공휴일은
해가 바뀌면 HKEX 공식 휴장일표로 검산할 것.markets.py의 MARKETS에 항목을 하나 추가하고 MARKET_ORDER에 넣는다.data/<파일>.json을 같은 모양으로 만드는 scrape_<코드>.py를 쓴다.companies_<코드>.py에 GROUP_ORDER와 NOTABLE을 채운다.build.py의 DICTS에 모듈을 등록하고, 원본이 영문이면 pack_en을 그대로 쓴다.