Skip to content

About

A Cloudflare Worker that fetches top-rated stories from HackerNews's curated "best" list. Build with Claude Code/Codebuddy/OpenCode

Resources

Stars

2 stars

Watchers

0 watching

Forks

Latest commit

 

History

119 Commits

Folders and files

Repository files navigation

HackerNews Daily

每日自动获取 HackerNews 热门文章和评论,使用 DeepSeek 读取外链、翻译和摘要,发布到 GitHub 和 Telegram。

技术栈

  • 数据源: Hacker News Algolia API(热门文章和评论)
  • LLM: DeepSeek deepseek-v4-flash(外链读取、翻译和摘要)
  • 发布: GitHub + Telegram

快速开始

1. 安装依赖

npm install

2. 配置环境变量

创建 .env 文件:

# DeepSeek API Key(必填)
LLM_DEEPSEEK_API_KEY=your-deepseek-api-key

# Tinyfish 补偿(可选,留空禁用)
TINYFISH_API_KEY=

# GitHub 配置(必填)
GITHUB_TOKEN=your-github-token
TARGET_REPO=your-username/your-repo
TARGET_BRANCH=main

# Telegram 配置(可选)
TELEGRAM_ENABLED=false
TELEGRAM_BOT_TOKEN=your-bot-token
TELEGRAM_CHANNEL_ID=@your-channel

# 可选配置
HN_STORY_LIMIT=30
SUMMARY_MAX_LENGTH=300
# HN_TARGET_DATE=2026-08-01

3. 本地运行

npm run dev

发布前查看完整的结构化数据和最终 Markdown(不会调用 GitHub 或 Telegram):

HN_STORY_LIMIT=1 npm run preview

去掉 HN_STORY_LIMIT=1 即按 .env 中的配置数量生成完整预览。

补跑指定日期(UTC)时,可临时设置 HN_TARGET_DATE:

HN_TARGET_DATE=2026-08-01 HN_STORY_LIMIT=1 npm run preview
HN_TARGET_DATE=2026-08-01 npm start

指定日期会同时用于 HN 数据范围和 Markdown/发布文件日期。日常定时任务不要在 .env 中长期设置该变量,否则每天都会重复处理同一天的数据。

4. 编译

npm run build
npm start

部署

详见 deploy/README.md

支持两种方式:

  • 原生 Node.js + cron:不需要 Docker。
  • Docker + cron:适合隔离运行环境。

原生 Node.js

cp deploy/.env.example .env
npm ci
npm run build
npm start

Docker

cp deploy/.env.example .env
npm run build
docker build -f deploy/Dockerfile -t hackernews-daily .
docker run --rm \
  --env-file .env \
  hackernews-daily

项目结构

src/
├── api/
│   └── hackernews/     # Algolia HN API
├── services/
│   ├── llm/           # DeepSeek Responses API
│   ├── translator/    # 外链读取、翻译和摘要
│   └── markdownExporter.ts
├── scripts/
│   └── daily-export-simple.ts  # 主脚本
├── utils/
│   ├── date.ts
│   └── fetch.ts
└── types/
    └── index.ts

获取 API Key

外链读取与备选来源

外链内容优先通过 DeepSeek Responses API 的 Web Search 读取原始 URL。原始网页无法访问时,DeepSeek 可以根据已成功打开的相关公开报道生成备选摘要;生成结果会保留备选来源链接,并在日报页面中标注“原文不可用”,来源可按需展开查看。

配置 TINYFISH_API_KEY 后,如果现有 DeepSeek 流程返回空结果、无可用摘要或抛错,会继续尝试 Tinyfish Fetch 原文;正文不足时按文章标题搜索,过滤首页和重复链接,最多 Fetch 3 个备选页面,再由 DeepSeek 根据正文核实相关性并生成摘要。只保留实际采用的来源链接,重定向后的不同地址也按备选来源标注。未配置 Key 时不会请求 Tinyfish。

Fetch 每次请求超时 60 秒,不自动重试;每篇正文最多传入前 20,000 字符,因此长文可能丢失后半部分。搜索片段不会传给摘要模型,正文是否对应同一事件仍依赖模型判断。HTTP 200 中的逐页错误会被过滤,原文 Fetch 超时、5xx 等异常时继续搜索备选;认证失败或限流时直接保留不可用状态。接口格式参见 Tinyfish Fetch 文档,部署和历史重跑见 部署指南。

帖子没有外链、原始与备选网页都没有可读正文,或 API 请求失败时,任务不会中断;对应文章会保留完整标题和链接,并在描述中显示无法获取内容的原因。搜索片段、未成功打开的网页以及没有来源标记的模型文本不会作为摘要发布。

License

MIT

About

A Cloudflare Worker that fetches top-rated stories from HackerNews's curated "best" list. Build with Claude Code/Codebuddy/OpenCode

Resources

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages