CCF 活动信息查询
获取中国计算机学会(CCF)近期活动、会议和通知信息。
个性化推荐:如果用户提供了兴趣偏好(如研究方向、技术领域等),根据用户兴趣从所有活动中筛选并推荐相关活动。
核心功能
1. API数据源
- 主要API端点:
https://conf.ccf.org.cn/conf/v2/index/meeting/list.do - 请求方法:POST
- 请求体格式:
{ "pageNo": 1, "pageSize": 50, "signupTimeState": "0", "sortType": "0" }
2. 会议地址生成规则
从API返回的会议数据中,每个会议记录包含:
- id: 会议ID (meetingId)
- shortUrl: 短链接标识
- webUrl: 官方网站URL(如果有)
会议详情页面URL生成优先级:
- 如果 webUrl 不为空 → 使用 webUrl
- 如果 shortUrl 不为空 → 使用 https://ccf.org.cn/[shortUrl]
- 否则 → 使用 https://conf.ccf.org.cn/web/html7/index.html?globalId=[id]&type=1
3. 输出格式要求(强制执行)
- 必须使用表格格式(禁止无格式长文本)
- 会议地址列必须包含可点击的Markdown链接
- 链接格式:会议地址
4. 特殊会议URL格式
| 会议类型 | URL格式 |
|---|---|
| CNCC | https://cncc[年份].ccf.org.cn |
| YEF(青年精英大会) | https://yef[年份].ccf.org.cn |
| ADL(学科前沿讲习班) | https://ccf.org.cn/ADL[编号] |
| NCCA(计算机应用大会) | https://ccf.org.cn/ncca[年份] |
查询时间范围
- 即将举办:未来一个月内(从今天到 +30 天)
- 刚刚结束:过去一个月内(从今天到 -30 天)
执行步骤
步骤1:收集用户偏好(可选)
如果用户提供了兴趣偏好,先收集并记录:
- 研究领域:如人工智能、数据挖掘、计算机网络、自然语言处理等
- 活动类型:如学术会议、认证考试、公益活动、培训讲习班等
- 参与目的:如学习新技术、获取认证、交流学术、企业合作等
- 时间偏好:如近期可参加、暑期、节假日等
- 地点偏好:如一线城市、高校所在地等
步骤2:调用CCF会议系统API获取数据
# 基础查询(无需用户输入)
curl -s -X POST "https://conf.ccf.org.cn/conf/v2/index/meeting/list.do" \
-H "Content-Type: application/json" \
-d '{"pageNo":1,"pageSize":50,"signupTimeState":"0","sortType":"0"}'
步骤3:解析API返回数据
从返回的JSON中提取 data.records 数组,每个记录包含:
- id: meetingId
- meetingTitle: 会议名称
- startTime/endTime: 时间戳
- province/city: 地点
- shortUrl: 短链接
- webUrl: 官方网站
- signupTimeState: 报名状态
步骤4:生成会议详情链接
根据上述优先级规则生成每个会议的详情页面URL。
步骤5:筛选和整理数据,区分活动状态
判断活动状态的逻辑:
- 当前日期在报名开始和结束时间之间 → 状态为 🟢 报名中
- 当前日期早于报名开始时间 → 状态为 🔵 即将开始
- 当前日期晚于活动结束时间 → 状态为 ⚪ 已结束
资源检索(CCF数字图书馆)
当用户想查询已结束活动的资源(视频、PPT、讲稿等)时使用。
安全要求:URL 编码
⚠️ 安全规范:用户输入的搜索关键词必须进行 URL 编码,禁止直接拼接到 URL 中。
# ✅ 正确做法:使用 --data-urlencode 自动编码
SEARCH_TERM="用户输入的关键词"
curl -G -sL "https://dl.ccf.org.cn/video/videoIndex.html" \
--data-urlencode "searWord=${SEARCH_TERM}" \
--data-urlencode "pageNum_p=1"
检索示例
# 按会议类型检索(固定关键词,安全)
curl -G -sL "https://dl.ccf.org.cn/video/videoIndex.html" \
--data-urlencode "searWord=ADL" \
--data-urlencode "pageNum_p=1"
# 按年份检索
curl -G -sL "https://dl.ccf.org.cn/video/videoIndex.html" \
--data-urlencode "year=2025" \
--data-urlencode "pageNum_p=1"
# 按用户输入的关键词检索(必须编码)
curl -G -sL "https://dl.ccf.org.cn/video/videoIndex.html" \
--data-urlencode "searWord=${USER_KEYWORD}" \
--data-urlencode "pageNum_p=1"
资源类型
输出格式(强制要求)
【强制要求】必须严格按照以下格式输出,禁止输出无格式的列表或长文本!
状态判断规则
| 活动日期与当前日期比较 | 状态 | 必须输出的列 |
|---|---|---|
| 活动在当前日期之后,且在报名期内 | 🟢 报名中 | 日期、活动名称、地点、报名截止、会议地址 |
| 活动在当前日期之后,报名尚未开始 | 🔵 即将开始 | 日期、活动名称、地点、状态 |
| 活动在当前日期之前已结束 | ⚪ 已结束 | 日期、活动名称、地点、视频链接、讲稿链接 |
输出模板
如果用户提供了兴趣偏好,在输出开头增加「为你推荐」板块:
# CCF 近期活动概览
**查询日期:2026-05-06**
## 🎯 为你推荐
> 根据你的兴趣偏好(XXX),为你筛选了以下活动:
| 日期 | 活动名称 | 地点 | 匹配原因 | 会议地址 |
|------|----------|------|----------|----------|
| 2026-XX-XX | 活动名称 | 地点 | 匹配"人工智能"领域 | [会议地址](https://ccf.org.cn/shortUrl) |
完整输出模板:
# CCF 近期活动概览
**查询日期:2026-05-06**
## 🎯 为你推荐
> 根据你的兴趣偏好(XXX),为你筛选了以下活动:
| 日期 | 活动名称 | 地点 | 匹配原因 | 会议地址 |
|------|----------|------|----------|----------|
| 2026-XX-XX | 活动名称 | 地点 | 匹配"XXX" | [会议地址](https://ccf.org.cn/shortUrl) |
## 🟢 正在报名中
| 日期 | 活动名称 | 地点 | 报名截止 | 会议地址 |
|------|----------|------|----------|----------|
| 2026-XX-XX | 活动名称 | 地点 | 2026-XX-XX | [会议地址](https://ccf.org.cn/shortUrl) |
## 🔵 即将举办(未开始报名)
| 日期 | 活动名称 | 地点 | 状态 |
|------|----------|------|------|
| 2026-XX-XX | 活动名称 | 地点 | 🔵 即将开始 |
## ⚪ 已结束
| 日期 | 活动名称 | 地点 | 视频回顾 | 讲稿下载 |
|------|----------|------|----------|----------|
| 2026-XX-XX | 活动名称 | 地点 | [查看视频](https://dl.ccf.org.cn/video/videoIndex.html?searWord=关键词) | [下载讲稿](https://dl.ccf.org.cn/ppt/pptIndex.html?searWord=关键词) |
关键要求(必须执行)
- 禁止输出长文本列表:不要输出无格式内容
- 必须判断状态:根据活动日期和当前日期判断
报名中的活动:
- 必须给出会议地址(可点击链接)
- 链接格式:会议地址
已结束的活动:
- 必须自动去数字图书馆搜索资源
- 视频链接:https://dl.ccf.org.cn/video/videoIndex.html?searWord=活动名称
- 讲稿链接:https://dl.ccf.org.cn/ppt/pptIndex.html?searWord=活动名称
个性化推荐规则
当用户提供兴趣偏好时,必须执行:
收集用户偏好关键词:
- 研究领域:人工智能/机器学习/数据挖掘/计算机视觉/自然语言处理/网络安全/数据库/分布式系统/软件工程等
- 活动类型:学术会议/认证考试/公益活动/培训讲习班/竞赛等
- 其他:地点/时间/是否为CCF会员等
匹配活动:将用户关键词与活动主题进行匹配
| 活动 | 关键词 |
|---|---|
| CCDE | 数字经济、AI+场景、产业数字化 |
| FCES | 计算机教育、教育改革、教学创新 |
| CCDM | 数据挖掘、机器学习、知识发现 |
| WISA | 信息系统、大数据、知识图谱 |
| NLPCC | 自然语言处理、中文计算、LLM |
| YEF | 青年科技、创新创业、前沿技术 |
| CNCC | 计算机大会、旗舰会议、综合 |
| ADL | 学科前沿、讲习班、培训 |
| GESP | 编程认证、青少年、等级考试 |
| CCF公益日 | 公益、技术公益、社会责任 |
推荐输出格式:
- 在输出最前方增加「为你推荐」板块
- 说明匹配原因(如"匹配'人工智能'领域")
- 优先显示高匹配度的活动
重要URL汇总
注意事项
- CCF网站使用JavaScript动态加载,直接curl只能获取部分数据
- 如需获取完整数据,可能需要使用浏览器渲染工具
- 如果curl无法获取,尝试添加更多Header:curl -s -L -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
- 会议名称需链接到详情页
- 标注最后更新时间
网页动态内容获取流程
当需要获取 CCF 网页的动态内容(如 JavaScript 渲染的页面)时,按以下流程执行:
决策流程
┌─────────────────┐
│ 使用 curl 尝试 1 次 │
│ 获取目标页面 │
└────────┬────────┘
▼
┌─────────────────┐
│ 返回内容是否有效? │
│ (非空、非403/500) │
└────────┬────────┘
是 / \ 否
▼ ▼
┌─────────┐ ┌─────────────────────────┐
│ 静态页面 │ │ 页面为动态渲染或返回403 │
│ 直接使用 │ │ 考虑使用 Puppeteer │
└─────────┘ └───────────┬─────────────┘
▼
┌──────────────────────┐
│ 询问用户是否授权使用 │
│ Puppeteer 渲染页面? │
└──────────┬───────────┘
授权 / \ 拒绝
▼ ▼
┌──────────┐ ┌──────────────┐
│ 检测环境 │ │ 返回静态内容 │
│ 安装/复用 │ │ 并提示用户 │
│ Puppeteer │ │ 可能不完整 │
└────┬─────┘ └──────────────┘
▼
┌──────────┐
│ 使用 Puppeteer │
│ 抓取动态内容 │
└──────────┘
判断是否需要 Puppeteer
| curl 返回结果 | 处理方式 |
|---|---|
| 状态码 200,内容长度 > 500 字符 | ✅ 静态页面,直接使用 |
| 状态码 403 / 401 / 500 | ⚠️ 可能被反爬或服务器错误,尝试 Puppeteer |
| 状态码 200,内容极短(< 500 字符)或为空 | ⚠️ 可能为动态渲染页面,尝试 Puppeteer |
| 超时或连接失败 | ⚠️ 网络问题,提示用户后重试 |
注意:仅在浏览器自动化功能确实需要时才考虑使用 Puppeteer。
安全要求
- 用户明确授权:安装前必须获得用户的明确同意,禁止静默安装。脚本仅提供检测和安装指南,实际安装由用户手动执行命令完成
- 本地安装:使用
scripts/ensure_puppeteer.js脚本进行环境检测,安装命令由用户手动执行,确保仅安装到当前项目目录,不修改全局 Node/npm 环境 - 固定版本号:脚本内置固定版本
puppeteer@24.15.0,输出的安装命令使用固定版本,禁止安装未固定版本 - 优先复用:脚本优先检测并使用用户环境中已存在的 Puppeteer 和系统浏览器,避免重复安装
- 禁止自动执行:脚本不自动执行任何安装命令,仅输出手动安装指南,所有安装操作需用户手动确认和执行
- 禁止第三方脚本:仅使用项目自带的
scripts/ensure_puppeteer.js脚本进行环境检测