MCPcopy Index your code
hub / github.com/chenyuan200356-droid/crypto-news-bot

github.com/chenyuan200356-droid/crypto-news-bot @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
69 symbols 219 edges 7 files 61 documented · 88%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

🚨 Telegram 全球金融/加密/政策快讯机器人

Python Claude License

📋 项目简介

一个高频、权威、极简的监控系统,专注于加密货币、RWA(现实世界资产)、宏观经济及全球监管政策的实时监控。

✨ 核心特性

  • 🎯 分级数据源管理 - Tier1核心源(SEC/Fed/币安)优先处理
  • 🤖 AI智能筛选 - Claude 4驱动的重要性判定和结构化提取
  • 🔄 双重去重机制 - 逻辑去重 + 语义去重
  • 📱 极简快讯风格 - 对标WatcherGuru,100-180字精炼表达
  • 🌐 中英双语输出 - 同时生成中英文版本
  • 高频监控 - Tier1源5分钟,全源15分钟

🎨 输出示例

🚨 SEC批准首个比特币现货ETF,规模$2.1亿,11家机构获批,贝莱德iShares Bitcoin Trust领衔

SEC approves first spot Bitcoin ETF, $2.1B scale, 11 institutions approved, led by BlackRock iShares Bitcoin Trust

#Policy #SEC #Bitcoin #ETF
🔗 来源

🚀 快速开始

前置要求

  • Python 3.11+
  • 必需API(3个)
  • ✅ Telegram Bot Token(免费)
  • ✅ Telegram Chat ID(免费)
  • ✅ Anthropic Claude API Key(付费,~$10/天)
  • 可选API
  • ⚪ Twitter API(完全可选,不配置也能正常运行)
  • ⚪ CoinMarketCap API(可选,免费版可用)
  • 4GB+ RAM
  • 稳定网络连接

1️⃣ 获取API密钥

Telegram Bot Token

  1. 打开Telegram,搜索 @BotFather
  2. 发送 /newbot 创建机器人
  3. 按提示设置名称,获取Token
  4. 创建频道,将机器人添加为管理员
  5. 发送消息到频道,访问 https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates 获取 chat_id

Claude API Key

  1. 访问 https://console.anthropic.com/
  2. 注册/登录账号
  3. 进入 API Keys 页面
  4. 创建新密钥并复制

⚠️ 关于Twitter API(完全可选)

不需要配置Twitter API,机器人就能完全正常工作!

  • RSS源(CoinDesk、SEC等)已覆盖90%+重要新闻
  • Twitter API申请复杂(需审核)且贵(付费版$100/月起)
  • 可以先运行,确实需要再添加

详见:Twitter集成指南

2️⃣ 安装部署

方式A: 自动安装(推荐)

# 克隆项目
git clone <your-repo-url>
cd crypto-news-bot

# 运行启动脚本
chmod +x start.sh
./start.sh

方式B: 手动安装

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# 安装依赖
pip install -r requirements.txt

# 配置环境变量
cp .env.example .env
# 编辑 .env 填入你的API密钥

# 配置数据源(可选)
# 编辑 config/config.yaml

# 创建必要目录
mkdir -p data logs

# 测试运行
python src/main.py --once

# 正式运行
python src/main.py

方式C: Docker部署

# 配置环境变量
cp .env.example .env
# 编辑 .env

# 启动容器
docker-compose up -d

# 查看日志
docker-compose logs -f

⚙️ 配置说明

config/config.yaml 核心配置

# Telegram配置
telegram:
  bot_token: "YOUR_TOKEN"        # Bot令牌
  chat_id: "@your_channel"       # 频道ID

# Claude配置
anthropic:
  api_key: "YOUR_KEY"            # API密钥
  model: "claude-sonnet-4-20250514"  # 模型版本

# 调度配置
scheduler:
  default_interval: 15           # 全源扫描间隔(分钟)
  tier1_interval: 5              # Tier1高频间隔(分钟)

数据源配置

项目预配置了主流数据源,支持: - RSS源: CoinDesk, Cointelegraph, Bloomberg等 - 网页爬取: Binance公告等 - API: DeFiLlama, CoinMarketCap等 - Twitter: 关键人物推文(需API密钥)

可在 config/config.yaml 中添加/修改数据源。

关键词配置

  • 白名单: BTC, ETH, RWA, Fed, SEC等,命中即处理
  • 黑名单: Airdrop, Meme, NFT等,自动过滤

📊 系统架构

┌──────────────┐
│  数据源层    │  RSS / 网页 / API / Twitter
└──────┬───────┘
       │
       ▼
┌──────────────┐
│  抓取模块    │  SourceFetcher
└──────┬───────┘
       │
       ▼
┌──────────────┐
│  关键词过滤  │  KeywordFilter
└──────┬───────┘
       │
       ▼
┌──────────────┐
│  AI处理      │  ClaudeProcessor
│  - 重要性    │   ├─ 重要性判定
│  - 结构化    │   ├─ 结构化提取
│  - 快讯生成  │   └─ 中英文生成
└──────┬───────┘
       │
       ▼
┌──────────────┐
│  去重模块    │  Deduplicator
│  - 逻辑去重  │   ├─ subject+action+object
│  - 语义去重  │   └─ 向量相似度
└──────┬───────┘
       │
       ▼
┌──────────────┐
│  Telegram    │  TelegramPublisher
│  推送        │
└──────────────┘

🔍 处理流程详解

1. 数据抓取(SourceFetcher)

  • 分级抓取:Tier1优先,Tier2/3按需
  • 时间过滤:只取最近1小时新闻
  • 格式统一:标准化为统一数据结构

2. 关键词筛选(KeywordFilter)

  • Tier1跳过白名单检查(只看黑名单)
  • 其他tier需同时满足:含白名单 + 不含黑名单
  • 快速过滤90%+无关内容

3. AI重要性判定(Claude)

判定标准: - ✅ 权威性:官方机构/核心角色发布 - ✅ 事件性:明确动作(批准/发行/调整) - ✅ 数据性:超预期波动(>5%) - ❌ 分析评论/预测/观点/科普

4. 结构化提取(Claude)

提取为JSON:

{
  "subject": "SEC",
  "action": "批准",
  "object": "比特币现货ETF",
  "key_detail": "$2.1亿规模",
  "tag": "Policy"
}

5. 快讯生成(Claude)

  • 中文:100-180字,突出核心数据
  • 英文:对应翻译版本
  • 风格:极简、冷峻、零情绪
  • 禁用:可能/或许/分析师认为等模糊表达

6. 双重去重

逻辑去重: - 提取 subject + action + object 签名 - 1小时内相同签名视为重复

语义去重: - 使用sentence-transformers生成向量 - 相似度>0.9视为重复 - 与最近1小时已发送快讯对比

7. Telegram推送

格式:[Emoji] 中文快讯 + 英文版本 + 标签 + 来源链接


🛠️ 命令行选项

# 测试模式(只运行一次)
python src/main.py --once

# 只处理Tier1源
python src/main.py --tier tier1

# 指定配置文件
python src/main.py --config /path/to/config.yaml

# 生产模式(持续运行)
python src/main.py

📈 监控与维护

日志查看

# 实时日志
tail -f logs/bot.log

# 查看错误
grep "ERROR" logs/bot.log

数据库管理

# 查看数据库
sqlite3 data/news_cache.db

# 清理旧数据(保留7天)
DELETE FROM news_items WHERE fetched_time < datetime('now', '-7 days');

性能优化

  • Claude API调用:每周期最多15条
  • Telegram推送间隔:1秒/条
  • 语义模型:可选,占用~500MB内存

🔧 在Cursor中开发

与Claude协作的技巧

  1. 迭代开发
你: "帮我优化AI判定的prompt,让它对市场波动更敏感"
你: "添加一个功能:如果BTC价格变动>10%立即推送"
你: "优化去重逻辑,避免同一事件的不同来源被当作重复"
  1. 调试助手
你: "为什么这条新闻没有被判定为重要?"
你: "数据库连接报错,帮我看看"
你: "Telegram推送失败,怎么处理限流?"
  1. 代码生成
你: "帮我添加一个新数据源:Financial Times RSS"
你: "创建一个web界面查看历史快讯"
你: "写一个脚本导出今天的快讯为PDF"

项目结构

crypto-news-bot/
├── src/
│   ├── main.py              # 主程序入口
│   ├── database.py          # 数据库模型
│   ├── fetcher.py           # 数据源爬取
│   ├── filter.py            # 关键词过滤
│   ├── ai_processor.py      # Claude处理
│   ├── deduplicator.py      # 去重模块
│   └── telegram_publisher.py # Telegram推送
├── config/
│   └── config.yaml          # 主配置文件
├── data/
│   └── news_cache.db        # SQLite数据库
├── logs/
│   └── bot.log              # 运行日志
├── requirements.txt         # Python依赖
├── Dockerfile               # Docker配置
├── docker-compose.yml       # Docker Compose
└── README.md                # 本文档

🎓 进阶功能

添加新数据源

编辑 config/config.yaml

sources:
  tier2:
    - name: "Financial Times"
      type: "rss"
      url: "https://www.ft.com/rss/markets"

自定义快讯模板

修改 src/ai_processor.py 中的prompt模板。

集成其他LLM

替换 ClaudeProcessor 类,实现相同接口。

Web界面

可使用Flask/FastAPI构建管理界面: - 查看历史快讯 - 手动触发扫描 - 实时监控面板 - 数据统计图表


❓ 常见问题

Q: Telegram推送失败?

A: 检查: 1. Bot Token是否正确 2. Chat ID格式(频道用@开头,群组用负数) 3. 机器人是否是频道/群组管理员 4. 网络连接是否正常

Q: Claude API调用失败?

A: 检查: 1. API Key是否有效 2. 是否有足够的Credits 3. 请求是否超过速率限制 4. 网络能否访问Anthropic API

Q: 为什么没有新闻?

A: 可能原因: 1. RSS源失效(检查日志) 2. 关键词过滤太严(调整白名单) 3. AI判定所有新闻不重要(检查prompt) 4. 都是重复新闻(正常现象)

Q: 如何调整推送频率?

A: 修改 config/config.yaml 中的 scheduler 配置。

Q: 内存占用过高?

A: 禁用语义去重(删除sentence-transformers依赖),或减少batch_size。


📝 待办事项

  • [ ] Twitter API集成
  • [ ] Web管理界面
  • [ ] 用户反馈机制(重要度评分)
  • [ ] 多频道推送
  • [ ] 数据可视化面板
  • [ ] 移动端APP

📄 许可证

MIT License


🤝 贡献

欢迎提交Issue和Pull Request!


📧 联系方式

有问题?在GitHub上提Issue或发邮件到 [chenyuan200356@gmail.com]


免责声明: 本项目仅供学习研究使用,不构成任何投资建议。请遵守各数据源的使用条款。

Core symbols most depended-on inside this repo

get_session
called by 7
database.py
send_message
called by 4
telegram_publisher.py
run_cycle
called by 4
main.py
_call_api
called by 3
ai_processor.py
_extract_json
called by 3
ai_processor.py
format_message
called by 2
telegram_publisher.py
send_batch
called by 2
telegram_publisher.py
_contains_blacklist
called by 2
filter.py

Shape

Method 57
Class 11
Function 1

Languages

Python100%

Modules by API surface

telegram_publisher.py14 symbols
fetcher.py13 symbols
database.py12 symbols
ai_processor.py10 symbols
filter.py7 symbols
deduplicator.py7 symbols
main.py6 symbols

For agents

$ claude mcp add crypto-news-bot \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact