首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用 Python + 腾讯云 SCF 搭建 CCtalk 课程开课提醒服务

用 Python + 腾讯云 SCF 搭建 CCtalk 课程开课提醒服务

原创
作者头像
PC电脑医生
发布2026-06-24 11:36:36
发布2026-06-24 11:36:36
1200
举报

用 Python + 腾讯云 SCF 搭建 CCtalk 课程开课提醒服务

摘要:

线上课程关注多了,最容易错过的是「什么时候开课」。本文从开发者视角出发,编写 Python 脚本定时检测 CCtalk 公开课程页面的状态变化,并部署到腾讯云函数(SCF)上以定时任务的方式自动运行,最后接入邮件或即时通讯推送,实现在新课上线或开课倒计时时的主动提醒。全程含完整代码与部署步骤。

【AI辅助创作声明:本文由 AI 辅助整理与撰写,内容已经过人工审校与调整。】


一、线上学习者的一个高频痛点

关注了几位老师,加了好几个 CCtalk 群,收藏了不少免费公开课——然后呢?然后因为工作忙、消息多、群通知被淹没,回过神来发现课已经讲了一半,或者干脆错过整期。

CCtalk 客户端本身有课程提醒功能,但它的提醒局限于客户端内的弹窗和群消息,无法和你的日常工作流打通。如果你习惯通过邮件或微信接收重要通知,CCtalk 自带的提醒就很难进入你的视野。

解决办法:写一个轻量的定时监控脚本,让它替你去「蹲守」课程页面,一旦检测到状态变化——比如课程从「报名中」变成了「即将开课」——就主动推送到你真正会看的渠道里。


二、整体方案设计

这条自动化链路分为三块:

2.1 监控端(Python 脚本)

通过 HTTP 请求访问 CCtalk 公开课程页面,解析 HTML 中的关键信息——课程标题、开课时间、当前状态(预告/直播中/已结束),与上一次检测结果做差异对比。

2.2 调度端(腾讯云 SCF 定时触发器)

脚本部署到腾讯云函数上,配置定时触发器(例如每 30 分钟执行一次),无需单独租用云服务器,零闲置成本。

2.3 通知端(邮件或 Webhook 推送)

检测到新课程或状态变更时,通过 SMTP 邮件或第三方 Webhook(如企业微信机器人、Server酱)推送到手机。

代码语言:纯文本语言
复制
[CCtalk 公开课程页] ←─ HTTP GET ─ [腾讯云 SCF (Python 定时函数)]
                                           │
                                           ▼ 状态变化?
                                    [邮件 / Webhook 推送]
                                           │
                                           ▼
                                     [你的手机 / 邮箱]

三、编写 Python 监控脚本

3.1 环境准备与依赖

在本地开发阶段,需要安装两个依赖:

代码语言:bash
复制
pip install requests beautifulsoup4 -t .

如果准备部署到 SCF,可以将依赖一同打包上传,也可以使用 SCF 的在线依赖安装功能。

3.2 抓取课程页面并解析关键字段

CCtalk 的公开课程页面 URL 通常格式为 https://www.cctalk.com/m/group/xxxxxxxx 或类似结构。我们用 requests 获取页面内容,用 BeautifulSoup 解析:

代码语言:python
复制
import requests
from bs4 import BeautifulSoup

def fetch_course_info(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/120.0.0.0 Safari/537.36'
    }
    resp = requests.get(url, headers=headers, timeout=15)
    resp.encoding = 'utf-8'
    soup = BeautifulSoup(resp.text, 'html.parser')

    course_title = ''
    title_tag = soup.find('h1') or soup.find('title')
    if title_tag:
        course_title = title_tag.text.strip()

    desc = ''
    desc_tag = soup.find('meta', attrs={'name': 'description'})
    if desc_tag and desc_tag.get('content'):
        desc = desc_tag['content']

    return {
        'url': url,
        'title': course_title,
        'description': desc,
        'page_text': soup.get_text()[:3000]
    }

3.3 从页面文本中提取状态关键词

课程状态(预告/直播中/已结束)不会以 API 字段的形式直接返回,但会以文本形式出现在页面中。可以通过关键词匹配来推断:

代码语言:python
复制
def infer_status(page_text):
    if '直播中' in page_text or '正在直播' in page_text:
        return 'LIVE'
    if '即将开始' in page_text or '开课倒计时' in page_text:
        return 'UPCOMING'
    if '已结束' in page_text or '直播回放' in page_text:
        return 'ENDED'
    return 'UNKNOWN'

3.4 状态对比与变更检测

每次运行把检测结果存到一个 JSON 文件中(SCF 环境可用 /tmp/ 目录做临时存储),与上一次结果对比:

代码语言:python
复制
import json
import os

STATE_FILE = '/tmp/cctalk_snapshot.json'

def load_previous_snapshot():
    if os.path.exists(STATE_FILE):
        with open(STATE_FILE, 'r', encoding='utf-8') as f:
            return json.load(f)
    return {}

def save_snapshot(snapshot):
    with open(STATE_FILE, 'w', encoding='utf-8') as f:
        json.dump(snapshot, f, ensure_ascii=False, indent=2)

def detect_changes(current, previous):
    changes = []
    for url, cur_info in current.items():
        prev_info = previous.get(url, {})
        if cur_info.get('status') != prev_info.get('status'):
            changes.append({
                'url': url,
                'title': cur_info['title'],
                'old_status': prev_info.get('status', 'NEW'),
                'new_status': cur_info['status'],
                'desc': cur_info.get('description', '')[:200]
            })
    return changes

注意/tmp/ 是 SCF 环境中唯一可写的目录,但云函数实例回收后 /tmp/ 内容会丢失,因此本方案适合「课时级」的提醒密度。如果需要长期持久化,可以接入腾讯云 COS 或云数据库 MySQL 来存储快照。


四、部署到腾讯云 SCF

4.1 创建云函数

  1. 登录腾讯云控制台,进入「云函数 SCF」服务。
  2. 点击「新建函数」,选择「从头开始」。
  3. 运行环境选 Python 3.9,函数名称自定(如 cctalk-monitor)。

4.2 编写入口函数

将上述所有函数整合到一个 index.py 中,并导出 SCF 所需的 main_handler 入口:

代码语言:python
复制
def main_handler(event, context):
    urls = [
        'https://www.cctalk.com/m/group/xxxxxxxx',
        # 添加更多关注的课程页面 URL
    ]
    current = {}
    for url in urls:
        info = fetch_course_info(url)
        info['status'] = infer_status(info['page_text'])
        current[url] = info

    previous = load_previous_snapshot()
    changes = detect_changes(current, previous)
    save_snapshot(current)

    if changes:
        for c in changes:
            msg = f"[{c['new_status']}] {c['title']} - {c['url']}"
            send_alert(msg)
        return {'changed': len(changes), 'detail': changes}
    return {'changed': 0}

4.3 配置定时触发器

函数创建完成后,在「触发管理」中添加一个「定时触发器」:

  • 触发周期:自定义触发周期
  • Cron 表达式:0 */30 * * * * *(每 30 分钟执行一次)

首次部署建议先用 */5 * * * * * *(每 5 分钟)在测试环境验证,确认逻辑无误后再改为 30 分钟以节省调用次数。

4.4 环境变量与超时

在函数配置中将「执行超时时间」调整为 30 秒(默认 3 秒对于网络请求不够用)。同时可将课程 URL 列表配置为环境变量,避免每次改完 URL 都要重新上传代码包。


五、接入通知渠道

检测到变更后,send_alert() 函数负责把消息推到你真正会看的渠道。以下是两种常用方案:

5.1 邮件推送(SMTP)

代码语言:python
复制
import smtplib
from email.mime.text import MIMEText

def send_alert(message):
    msg = MIMEText(message, 'plain', 'utf-8')
    msg['Subject'] = 'CCtalk 课程状态变更提醒'
    msg['From'] = 'your_sender@example.com'
    msg['To'] = 'your_receiver@example.com'
    with smtplib.SMTP_SSL('smtp.example.com', 465) as server:
        server.login('your_sender@example.com', '授权码')
        server.send_message(msg)

5.2 企业微信机器人 Webhook(推荐)

在企业微信群中添加一个机器人,获取 Webhook URL,直接用 requests 发送 Markdown 消息:

代码语言:python
复制
def send_alert(message):
    url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY'
    requests.post(url, json={
        'msgtype': 'markdown',
        'markdown': {'content': f'## CCtalk 课程提醒\n{message}'}
    })

无论哪种方式,记得把 Webhook URL 或邮箱密码存为 SCF 环境变量,不要硬编码在代码中。


六、注意事项

  • 请求频率:定时触发器间隔不要设得太短,建议不低于 10 分钟,避免对目标网站造成压力或被反爬策略拦截。
  • User-Agent:务必设置合理的浏览器 UA,模拟正常访问。
  • SCF 免费额度:腾讯云函数每月提供 100 万次免费调用额度,按每 30 分钟一次(月调度约 1440 次)计算,单个函数完全在免费额度内,实际费用为零。
  • 课程页面 URL:确保监控的是公开可访问的课程页面。需要登录才能查看的页面,请求会跳转到登录页,脚本会误判状态。

整个服务搭完不过几十行代码,却能让你的线上学习节奏不再依赖「碰巧看到的通知」。技术服务于效率——这个脚本替你去盯,你只管到点去听。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用 Python + 腾讯云 SCF 搭建 CCtalk 课程开课提醒服务
    • 一、线上学习者的一个高频痛点
    • 二、整体方案设计
    • 三、编写 Python 监控脚本
      • 3.1 环境准备与依赖
      • 3.2 抓取课程页面并解析关键字段
      • 3.3 从页面文本中提取状态关键词
      • 3.4 状态对比与变更检测
    • 四、部署到腾讯云 SCF
      • 4.1 创建云函数
      • 4.2 编写入口函数
      • 4.3 配置定时触发器
      • 4.4 环境变量与超时
    • 五、接入通知渠道
    • 六、注意事项
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档