从零搭建 Crypto 日报:每天 07:00 的市场早报自动推送
相比前面那篇 AI 日报,Crypto 日报有一个优势和一个劣势。优势是数据源标准化——所有加密货币的价格、链上数据、市场指标,都可以通过公开 API 拿到。劣势是噪音大——加密圈一天的信息量几乎等于传统金融一周的量,而且真假难辨。
所以我给这套系统的定位是"速览"而不是"深度研报":每天 07:00 推送一条微信消息,核心就四块:价格、情绪、链上、新闻头条。读完不超过两分钟,但你对过去 24 小时的市场全貌心里有数。
一、数据流
价格/市场数据(crypto-daily-report skill)
→ BTC/ETH/SOL/HYPE/DOGE 当前价 + 24h 涨跌
→ 市场总市值、BTC 市占率、24h 成交量
→ 恐惧与贪婪指数
→ 永续费率、稳定币市值、全网爆仓、BTC 现货 ETF 净流入
新闻搜索
→ web_search "crypto news today 2026"
→ web_search "bitcoin ethereum regulation"
→ 每条含标题 + 描述 + 来源链接
↓ 以上两路串行(先价格后新闻)
LLM 提炼 (deepseek-v4-pro) → 结构化 Markdown
↓ 提供微信推送到用户
和 AI 日报的结构相同:先用 skill 拿硬数据、再搜新闻补背景、最后 LLM 统一归纳。区别是 Crypto 日报不需要三路并行——价格数据和新闻搜索之间存在微弱的依赖(看了价格才知道今天重点该搜什么方向的新闻),所以用了串行。
二、两个核心 Skill
crypto-price 的 get_token_price 函数能按 token 代码即时查价。把你要跟的代币放一个列表,一次查完:
from crypto_price import get_token_price
tokens = ["BTC", "ETH", "SOL", "DOGE"]
for t in tokens:
data = get_token_price(t)
print(f"{t}: ${data['price']:,.2f} (24h {data['change_24h']:+.1f}%)")
# BTC: $87,543.12 (24h +2.3%)
# ETH: $3,241.88 (24h -0.7%)
crypto-daily-report 则把情绪指标一次性打包——恐惧贪婪指数、永续费率、稳定币市值、全网爆仓、ETF 净流入,都在一个调用里返回。cron 里不需要逐个 API 去拼,skill 已经帮你串好了。
这两个 skill 的底层分别走 CoinGecko / Alternative.me / Coinglass 的公开接口。对于每天跑一次的 cron 来说,免费层的调用额度远用不完。
三、市场情绪指标
价格本身只是一个维度。Crypto 日报里最独特的几个数据点都和交易情绪有关:
| 指标 | 含义 | 数据来源 |
|---|---|---|
| 恐惧与贪婪指数(0-100) | <30 极度恐惧 / >70 极度贪婪 | Alternative.me API |
| BTC 永续费率 | 正数=多头付钱给空头(看多过热) | 交易所公开数据 |
| 稳定币市值 | 场内资金量(市值涨=资金流入,跌=资金流出) | 链上数据 |
| 24h 全网爆仓 | 多头/空头各爆了多少(极端波动指标) | Coinglass API |
| BTC 现货 ETF 净流入 | 机构资金方向 | ETF 汇总数据 |
把这些数据放进一条早报里的逻辑:价格告诉你"现在什么位置",情绪指标告诉你"市场在想什么",爆仓数据告诉你"刚才发生了什么"。三组数据放在一起,比单独看价格有用得多。
crypto-daily-report skill 把这些指标的获取都封装好了。调用时只需要指定 Token 列表和一个时间窗:
crypto-daily-report
# 返回结构化数据,含价格/情绪/链上全部字段
四、新闻搜索:补定性部分
价格和指标是定量部分。新闻是定性部分。Cron 在拿到数据后,用内置的 web_search 搜索过去 24 小时的加密圈新闻:
web_search("crypto news today 2026", limit=10)
web_search("bitcoin ethereum regulation", limit=5)
每条新闻拿标题 + 一句话描述 + 来源链接。LLM 提炼那步做三件事: - 挑出最重要的 5-8 条(按"对市场影响"排序,不按时间线) - 删掉重复覆盖的(同一条新闻被多家媒体转载) - 写一段"今日要闻速览"(三句以内,概括今日主线)
五、cron 调度
Crypto 市场 24/7 无休市,没有周末空白。所以调度是全周:
cronjob(action='create',
name='Crypto新闻日报',
schedule='0 7 * * *', # 每天 07:00
model={'provider':'custom:api.deepseek.com','model':'deepseek-v4-pro'},
skills=['crypto-price','crypto-daily-report'],
prompt='生成每日 Crypto 市场早报...')
为什么是 07:00 而不是 00:00:加密圈的重磅消息经常在美东时间下午发(对应北京时间凌晨 3-5 点)。00:00 采会漏掉这些。07:00 覆盖了美东前一天的完整交易时段 + 隔夜突发。
六、前端:/cryptonews/ 数据日历
Crypto 日报的页面结构是所有内容页面里最轻的。路由是 /cryptonews/<date_str>,每个 date_str 对应一个 cron 输出目录下的子目录,里面存的是日报的 HTML 片段(Cron 直接生成 HTML 格式)。
Template 用的是 cryptonews.html,从 utils.py 导入 get_cryptonews_dates() + load_cryptonews() 两个函数来处理数据。页面带日期导航条,用户可以在日报之间切换。
整个页面的设计哲学就一条:极简。没有复杂的图表和交互,就是标题 + 数据栏 + 新闻速览。Crypto 信息本身已经够复杂了,展示层需要把它压平。
七、和 AI 日报骨架的关系
和前面两篇(AI 日报 + 华尔街日报)的对比:
| AI 日报 | 华尔街日报 | Crypto 日报 | |
|---|---|---|---|
| 信息源 | 3 个 SKILL(百源 RSS + AI HOT + 翻译) | Sina API + MoltStreet | 2 个 SKILL(价格 + 市场报告) |
| 采集策略 | 三路并行 | 指数/信号/估值三路 | 串行:先价格后新闻 |
| 输出格式 | JSON → Flask 渲染 | JSON → 卡片渲染 | HTML 片段直出 |
| 失败容错 | 任一子代理超时可 fallback | API 超时门 + 假日跳过 | 价格优先:API 挂了当天推送无新闻版 |
搞清楚了:同一副骨架(cron + LLM + 数据存档 + 网页渲染),每篇只是换了数据源和输出模板。
但 Crypto 有一点和另外三篇都不一样:它是这四个日报里唯一 24/7 不休市的。没有节假日、没有"今天不更新"的静默日。这意味着噪音过滤不是锦上添花——它是核心能力。一份好的 Crypto 早报不是"把今天的事都告诉你",而是"在 200 条噪音里挑出 3 条真正影响价格的"。这套系统的难度不在于采集,在于判断。