Python + Server酱:脚本跑完/出错,微信立刻收到通知

效果:爬虫或长任务结束(无论成功失败)时,你的微信收到一条带执行结果的通知。

前置条件

配置步骤

  1. 把 SendKey 存入环境变量(不要写死在代码里):
export SERVERCHAN_SENDKEY="你的SENDKEY"
  1. 安装官方 SDK(自动识别 SCT/SC3 两种 SendKey,无需关心端点差异):
pip install serverchan-sdk
  1. 发送第一条消息:
import os
from serverchan_sdk import sc_send

response = sc_send(
    os.environ["SERVERCHAN_SENDKEY"],
    "任务完成",                       # 标题,不能包含换行
    "详情正文,支持 **Markdown**",     # 正文,可选
    {"short": "任务完成"},            # 可选参数;更多选项(tags/channel/openid)见 SDK 文档
)
print(response)  # code 为 0 即成功

不想加 SDK 依赖?官方 serverchan-demo 仓库提供了 11 种语言的直调实现,Python 版核心函数如下(同样自动识别 SCT/SC3):

# 来自官方 serverchan-demo/python/send.py
import re
import requests

def sc_send(sendkey, title, desp='', options=None):
    if options is None:
        options = {}
    if sendkey.startswith('sctp'):
        match = re.match(r'sctp(\d+)t', sendkey)
        if match:
            num = match.group(1)
            url = f'https://{num}.push.ft07.com/send/{sendkey}.send'
        else:
            raise ValueError('Invalid sendkey format for sctp')
    else:
        url = f'https://sctapi.ftqq.com/{sendkey}.send'
    params = {'title': title, 'desp': desp, **options}
    headers = {'Content-Type': 'application/json;charset=utf-8'}
    response = requests.post(url, json=params, headers=headers)
    return response.json()

完整示例代码

爬虫/长任务的通用模式——成功发摘要、失败发告警,整段复制即可运行:

import os
import traceback
from serverchan_sdk import sc_send

SENDKEY = os.environ["SERVERCHAN_SENDKEY"]

def main():
    # 把这里换成你的实际任务(爬虫、数据处理、训练脚本……)
    results = [f"第{i}页" for i in range(1, 4)]
    return f"共抓取 {len(results)} 页数据"

if __name__ == "__main__":
    try:
        summary = main()
        sc_send(SENDKEY, "✅ 爬虫完成", summary)
    except Exception:
        # 失败时把错误栈发到微信,方便直接定位
        sc_send(SENDKEY, "❌ 爬虫失败", f"```\n{traceback.format_exc()[-800:]}\n```")
        raise

常见问题

免费额度够用吗? 免费每天 5 条。批量任务不要每条数据发一次,在任务结束时合并成一条摘要发送(也避免触发每分钟 50 条的频率限制)。

消息没收到? 先看返回 JSON 的 codemessage,再按 FAQ 排查清单 逐项检查。

定时任务怎么只在失败时通知?sc_send 放进 except 分支即可;crontab 场景可参考后续的 crontab 集成页。

SendKey 放哪里安全? 环境变量或密钥管理服务;不要提交进 git,不要打印到日志。详见 SendKey 保管建议

相关集成

懒人方案:把这段话复制给你的 AI 助手

把下面这段文字原样粘贴给 Claude Code、Cursor 或任何 AI 编程助手,它就会替你完成 Server酱 的接入:

请帮我把 Server酱 微信通知接入到我当前的项目/工具中:
1. API:POST https://sctapi.ftqq.com/{SendKey}.send,参数 title(必填,不能含换行)、desp(正文,支持 Markdown,可选);成功时返回 JSON 的 code 为 0。
2. 如果我的 SendKey 以 sctp 开头,则改用 https://{uid}.push.ft07.com/send/{SendKey}.send,uid 是 SendKey 中 sctp 与 t 之间的数字。
3. SendKey 从环境变量 SERVERCHAN_SENDKEY 读取;如果没有,提醒我到 https://sct.ftqq.com 免费获取(每天 5 条额度)。
4. 安全要求:不要把 SendKey 硬编码进代码、不要打印到日志、不要提交到 git。
5. 频率约定:任务结束发 1 条结果摘要即可,批量任务合并成一条,不要每步都推。
请根据我当前的项目和场景直接写好代码/配置并验证。