feat(openinsider): 新增 OpenInsider 內部人交易爬蟲,支援多標的與每日排程

- 新增 app/crawlers/openinsider.py,來源 http://openinsider.com/search?q={symbol}

- 支援多標的:以 SYMBOLS=PLTR,NVDA,... 同時追多檔(或使用 SYMBOL 單一)

- runner: 多實例排程與啟動;/check 會依序觸發全部爬蟲

- API: /info、/stats、/check、/notify_test 支援多爬蟲回應

- config/base: 新增 RUN_DAILY_AT 每日固定時間;未設定則用 CHECK_INTERVAL

- notifications: 新增 send_custom_email、send_text_webhook、send_text_discord

- README 與 .env.template 更新;.env 改為 CRAWLER_TYPE=openinsider

- 移除 quiver_insiders 爬蟲與相關設定

BREAKING CHANGE: 不再支援 CRAWLER_TYPE=quiver_insiders;請改用 openinsider。
This commit is contained in:
2025-09-04 22:32:29 +08:00
parent 58cc979b5b
commit e89567643b
8 changed files with 368 additions and 40 deletions

View File

@@ -24,6 +24,7 @@ class AppConfig:
data_dir: str
log_dir: str
email: EmailConfig | None
run_daily_at: str | None
def _resolve_dir(env_key: str, default_subdir: str) -> str:
@@ -82,6 +83,7 @@ def load_config() -> AppConfig:
discord_webhook = os.getenv('DISCORD_WEBHOOK')
data_dir = _resolve_dir('DATA_DIR', 'data')
log_dir = _resolve_dir('LOG_DIR', 'logs')
run_daily_at = os.getenv('RUN_DAILY_AT') # e.g., "12:00"
return AppConfig(
check_interval=check_interval,
@@ -92,5 +94,5 @@ def load_config() -> AppConfig:
data_dir=data_dir,
log_dir=log_dir,
email=load_email_config(),
run_daily_at=run_daily_at,
)