# cls **Repository Path**: qxw/cls ## Basic Information - **Project Name**: cls - **Description**: 财联社电报采集 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-01 - **Last Updated**: 2026-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 财联社电报采集脚本 ## 功能说明 本脚本用于采集财联社电报数据,主要功能包括: 1. **实时数据采集**:从财联社API实时采集电报数据 2. **红色内容筛选**:只采集有标题的"加红"电报 3. **数据存储**:将采集的数据保存到MySQL数据库 4. **飞书通知**:将新采集的加红电报发送到飞书群(含发布时间) 5. **自动重连机制**:MySQL连接断开时自动重连,确保长期稳定运行 6. **历史数据补充**:支持补充采集缺失时段的数据 ## 文件说明 | 文件 | 说明 | |------|------| | `cls_telegraph.sql` | MySQL数据库表结构 | | `cls_telegraph_crawler.py` | 主采集脚本(推荐使用) | | `cls_history_fetch.py` | 历史数据收集工具 | | `cls_gap_filler.py` | 数据间隙填充脚本 | | `test_setup.py` | 系统测试脚本 | | `test_feishu_format.py` | 飞书通知格式测试 | | `requirements.txt` | Python依赖包 | | `README.md` | 使用说明 | ## 快速开始 ### 1. 安装Python依赖 ```bash pip install -r requirements.txt ``` 或手动安装: ```bash pip install requests pymysql ``` ### 2. 创建数据库和表 ```bash mysql -h 10.16.241.101 -P 3306 -u root -p123456 < cls_telegraph.sql ``` ### 3. 运行测试(可选) ```bash python3 test_setup.py ``` ### 4. 启动采集脚本 ```bash # 前台运行(用于调试) python3 cls_telegraph_crawler.py # 后台运行(推荐) nohup python3 cls_telegraph_crawler.py > output.log 2>&1 & ``` ## 配置说明 脚本配置在 `cls_telegraph_crawler.py` 的 `Config` 类中: ```python class Config: # 财联社API配置 CLS_API_URL = "https://www.cls.cn/nodeapi/telegraphList" # MySQL配置 MYSQL_HOST = "10.16.241.101" MYSQL_PORT = 3306 MYSQL_USER = "root" MYSQL_PASSWORD = "123456" MYSQL_DATABASE = "iwencai_db" # 数据库名 MYSQL_TABLE = "cls_telegraph" # 飞书Webhook配置 FEISHU_WEBHOOK_URL = "https://open.feishu.cn/open-apis/bot/v2/hook/56962c8e-126b-4514-854d-3725fdd45425" # 采集配置 FETCH_INTERVAL = 60 # 采集间隔(秒) MAX_RETRY = 3 # 最大重试次数 ``` ## 使用systemd服务(推荐) 创建服务文件 `/etc/systemd/system/cls-telegraph.service`: ```ini [Unit] Description=CLS Telegraph Crawler After=network.target mysql.service [Service] Type=simple User=your_user WorkingDirectory=/path/to/cls ExecStart=/usr/bin/python3 /path/to/cls/cls_telegraph_crawler.py Restart=always RestartSec=10 [Install] WantedBy=multi-user.target ``` 启动服务: ```bash sudo systemctl daemon-reload sudo systemctl enable cls-telegraph sudo systemctl start cls-telegraph sudo systemctl status cls-telegraph ``` ## 数据库表结构 ```sql CREATE TABLE `cls_telegraph` ( `id` bigint(20) NOT NULL COMMENT '电报ID', `title` varchar(500) DEFAULT NULL COMMENT '标题', `content` text COMMENT '内容', `brief` text COMMENT '简介', `reading_num` int(11) DEFAULT '0' COMMENT '阅读数', `comment_num` int(11) DEFAULT '0' COMMENT '评论数', `share_num` int(11) DEFAULT '0' COMMENT '分享数', `level` varchar(10) DEFAULT NULL COMMENT '级别', `ctime` bigint(20) DEFAULT NULL COMMENT '创建时间戳', `ctime_formatted` datetime DEFAULT NULL COMMENT '格式化的创建时间', `is_red` tinyint(1) DEFAULT '0' COMMENT '是否加红:1-是,0-否', `share_url` varchar(500) DEFAULT NULL COMMENT '分享链接', `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '记录创建时间', `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '记录更新时间', PRIMARY KEY (`id`), KEY `idx_ctime` (`ctime`), KEY `idx_is_red` (`is_red`), KEY `idx_created_at` (`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='财联社电报表'; ``` ## 常用SQL查询 ### 查看最新的加红电报 ```sql SELECT id, title, reading_num, comment_num, share_num, ctime_formatted FROM cls_telegraph WHERE is_red = 1 ORDER BY ctime DESC LIMIT 20; ``` ### 查看数据分布情况 ```sql SELECT DATE_FORMAT(ctime_formatted, '%Y-%m-%d %H:00') as hour, COUNT(*) as count, SUM(is_red) as red_count FROM cls_telegraph GROUP BY DATE_FORMAT(ctime_formatted, '%Y-%m-%d %H:00') ORDER BY hour DESC; ``` ### 查找数据间隙 ```sql SELECT ctime_formatted, lead_time, TIMESTAMPDIFF(MINUTE, ctime_formatted, lead_time) as gap_minutes FROM ( SELECT ctime_formatted, LEAD(ctime_formatted) OVER (ORDER BY ctime) as lead_time FROM cls_telegraph ) t WHERE lead_time IS NOT NULL HAVING gap_minutes > 60 ORDER BY ctime_formatted DESC; ``` ### 统计今日采集数据 ```sql SELECT COUNT(*) as total, SUM(is_red) as red_count FROM cls_telegraph WHERE DATE(created_at) = CURDATE(); ``` ### 查看阅读数最高的电报 ```sql SELECT id, title, reading_num, ctime_formatted FROM cls_telegraph WHERE is_red = 1 ORDER BY reading_num DESC LIMIT 10; ``` ## 飞书通知格式 飞书群会收到卡片消息,包含: ``` 🔴 财联社电报(加红) 【电报标题】 电报内容摘要... ─────────────────── ⏰ 发布时间: 2026-04-02 09:00:00 👁 阅读: 1.23万 | 💬 评论: 5 | 🔄 分享: 10 [查看详情] ``` ## 历史数据补充 ### 补充较新的数据 ```bash # 运行30分钟,补充最近的数据 python3 cls_gap_filler.py 30 ``` ### 收集指定时间范围 ```bash # 收集指定时间段的历史数据 python3 cls_history_fetch.py '2026-04-01 16:00:00' '2026-04-02 09:00:00' ``` ⚠️ **注意**:由于财联社API限制(仅返回最新20条数据),无法直接获取太久远的历史数据。建议: 1. 保持主脚本持续运行,避免数据丢失 2. 定期检查数据库,发现间隙时及时补充 3. 需要早期历史数据时,可访问财联社官网查看 ## 日志说明 | 日志文件 | 说明 | |----------|------| | `cls_telegraph.log` | 主采集脚本日志 | | `cls_history_fetch.log` | 历史数据收集日志 | | `cls_supplement.log` | 数据补充脚本日志 | 日志内容包括: - 采集开始时间 - 获取到的电报数量 - 加红电报数量 - 新增电报数量 - 发送飞书通知数量 - 错误和异常信息 - 数据库重连记录 ## 注意事项 1. **网络连接**:确保服务器能访问财联社API和飞书Webhook 2. **MySQL连接**:确保MySQL服务正常运行且配置正确 3. **采集频率**:默认60秒采集一次,可根据需要调整 `FETCH_INTERVAL` 4. **日志管理**:定期清理或轮转日志文件,避免占用过多磁盘空间 5. **飞书限流**:脚本已添加1秒间隔,避免过于频繁发送通知 6. **长期运行**:脚本具备自动重连功能,可长期稳定运行 7. **数据备份**:建议定期备份MySQL数据库 ## 故障排查 ### 数据库连接失败 **症状**:日志显示 "数据库连接失败" 或 "Unknown database" **解决方案**: ```bash # 1. 检查MySQL服务是否运行 sudo systemctl status mysql # 2. 确认数据库是否存在 mysql -h 10.16.241.101 -P 3306 -u root -p123456 -e "SHOW DATABASES;" # 3. 如不存在,创建数据库 mysql -h 10.16.241.101 -P 3306 -u root -p123456 < cls_telegraph.sql # 4. 检查防火墙 telnet 10.16.241.101 3306 ``` ### 长时间运行后数据库连接断开 **症状**:日志显示 `(0, '')` 错误 **解决方案**: - ✅ 已修复!脚本 v2.0+ 具备自动重连功能 - 每次数据库操作前会自动检查连接 - 连接断开时自动重新连接 - 无需手动重启脚本 ### API获取失败 **症状**:日志显示 "HTTP请求失败" 或 "获取电报数据失败" **解决方案**: ```bash # 1. 检查网络连接 ping www.cls.cn curl -I https://www.cls.cn/nodeapi/telegraphList # 2. 查看详细错误 tail -f cls_telegraph.log # 3. 脚本会自动重试3次,如仍失败可手动重启 ``` ### 飞书通知失败 **症状**:日志显示 "飞书通知发送失败" **解决方案**: ```bash # 1. 测试Webhook URL curl -X POST https://open.feishu.cn/open-apis/bot/v2/hook/56962c8e-126b-4514-854d-3725fdd45425 \ -H 'Content-Type: application/json' \ -d '{"msg_type":"text","content":{"text":"测试消息"}}' # 2. 检查飞书群设置 # - 确认机器人已添加到群聊 # - 确认Webhook URL正确 # - 确认机器人未被禁用 # 3. 查看日志中的详细错误信息 grep "飞书" cls_telegraph.log | tail -20 ``` ### 数据间隙问题 **症状**:数据库中某些时间段缺失数据 **解决方案**: ```bash # 1. 查找数据间隙 mysql -h 10.16.241.101 -P 3306 -u root -p123456 -D iwencai_db < find_gaps.sql # 2. 运行补充脚本 python3 cls_gap_filler.py 60 # 3. 保持主脚本运行,避免新的数据丢失 ``` ### 内存或CPU占用过高 **症状**:系统资源占用异常 **解决方案**: ```bash # 1. 检查进程状态 ps aux | grep cls_telegraph_crawler # 2. 重启脚本 kill <进程ID> python3 cls_telegraph_crawler.py # 3. 如持续出现,考虑使用systemd自动重启 ``` ## 版本历史 ### v2.1 (2026-04-02) - ✅ 添加飞书通知发布时间显示 - ✅ 新增历史数据收集工具 - ✅ 新增数据间隙填充脚本 - ✅ 完善故障排查文档 ### v2.0 (2026-04-02) - ✅ 修复长时间运行MySQL连接断开问题 - ✅ 添加数据库连接健康检查 - ✅ 添加自动重连机制 - ✅ 提升长期运行稳定性 ### v1.0 (2026-04-01) - ✅ 基础采集功能 - ✅ 加红电报筛选 - ✅ 飞书通知 - ✅ MySQL存储 ## 许可证 MIT License ## 技术支持 如遇到问题,请查看: 1. 本文档的"故障排查"部分 2. 日志文件中的错误信息 3. 运行 `python3 test_setup.py` 进行系统检测