Open Net Worth
Open Net Worth is an open-source personal AI wealth assistant you run yourself: one ledger for your whole financial life, worked by an AI agent you control.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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을 그대로 쓴다.