自动化爬取 Hacker News 热门内容,调用 CNB AI 生成汇总,并自动创建 Issue。
. ├── auto_crawl_and_issue.py # 主脚本:爬取 HN 内容并创建 Issue ├── hn_crawler.py # Hacker News 爬虫模块 ├── ai_summary.py # CNB AI 汇总模块 ├── cnb_api.py # CNB API 封装模块 ├── requirements.txt # Python 依赖 ├── .cnb.yml # CNB 流水线配置 └── .cnb/web_trigger.yml # CNB Web Trigger 配置
pip install -r requirements.txt
依赖列表:
requests>=2.31.0 - HTTP 请求库python-dotenv>=1.0.0 - 环境变量管理| 变量名 | 必需 | 说明 |
|---|---|---|
CNB_TOKEN | 是 | CNB API 访问令牌(在 CNB 流水线环境中自动注入) |
CNB HTTP API 封装模块,提供 Issue 创建和管理功能。
主要类:
CNBAPI: CNB API 客户端主要方法:
create_issue(title, body, labels): 创建 Issueupdate_issue(issue_id, ...): 更新 Issueget_issue(issue_id): 获取 Issue 详情list_issues(state, page, ...): 列出 Issuecreate_issue_comment(issue_id, body): 创建 Issue 评论close_issue(issue_id): 关闭 Issue错误处理:
使用示例:
from cnb_api import CNBAPI
api = CNBAPI(repo="group/repo")
result = api.create_issue(
title="Issue 标题",
body="Issue 内容",
labels=["automated", "hacker-news"]
)
print(f"Issue ID: {result['iid']}")
print(f"Issue URL: {result['web_url']}")
主脚本,整合爬虫、AI 汇总和 Issue 创建功能。
执行流程:
output/hn_issue_YYYYMMDD_HHMMSS.md)使用方式:
# 直接运行(需要 CNB_TOKEN 环境变量)
python3 auto_crawl_and_issue.py
# 或通过 CNB 流水线触发
每天早上 8:00 自动执行:
main:
"crontab: 0 8 * * *":
- name: hacker-news-daily-crawler
stages:
- name: run-crawler-and-save
image: python:3.11-slim
script:
- pip install requests python-dotenv -q
- python3 auto_crawl_and_issue.py
artifacts:
paths:
- output/
expire_in: 7 days
在 CNB 仓库详情页点击"手动爬取 HN"按钮触发。
配置文件:.cnb/web_trigger.yml
branch:
- buttons:
- name: 手动爬取 HN
description: 手动触发 Hacker News 内容爬取和总结
event: web_trigger_hn_crawler
isDefault: true
https://api.cnb.coolCNB_TOKEN 环境变量)创建的 Issue 包含以下内容:
# Hacker News 每日汇总 - YYYY-MM-DD
> 🤖 本内容由自动化爬虫生成,每日早上 8:00 更新
---
## 📊 今日热点概要
[AI 生成的汇总]
---
## 📋 热门内容列表
[原始内容列表]
---
## 📝 元信息
- 生成时间: YYYY-MM-DD HH:MM:SS
- 数据来源: Hacker News
- 自动化任务: CNB 定时爬取服务
pip install -r requirements.txtCNB_TOKEN 环境变量python3 auto_crawl_and_issue.pyrequirements.txt(如需新依赖).cnb.yml 流水线配置可能原因:
解决方案:
pip install 再运行脚本.cnb.yml 配置示例可能原因:
CNB_TOKEN 未设置或无效解决方案:
可能原因:
解决方案:
MIT License