# Python 接入 Server酱：脚本与爬虫的微信通知（2026 教程）

> 用 Python 给脚本、爬虫加微信通知：官方 SDK（pip install serverchan-sdk）与 requests 两种方式，含任务完成/异常告警完整可运行示例。

- 网页版：https://sct.ftqq.com/docs/integrations/python/
- 更新日期：2026-07-17

# Python + Server酱：脚本跑完/出错，微信立刻收到通知

> 效果：爬虫或长任务结束（无论成功失败）时，你的微信收到一条带执行结果的通知。

## 前置条件

- 一个 Server酱 SendKey（[30 秒获取教程](https://sct.ftqq.com/docs/getting-started/sendkey/)）
- Python 3.8+

## 配置步骤

1. 把 SendKey 存入环境变量（不要写死在代码里）：

```bash
export SERVERCHAN_SENDKEY="你的SENDKEY"
```

2. 安装官方 SDK（自动识别 SCT/SC3 两种 SendKey，无需关心端点差异）：

```bash
pip install serverchan-sdk
```

3. 发送第一条消息：

```python
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](https://github.com/easychen/serverchan-demo) 仓库提供了 11 种语言的直调实现，Python 版核心函数如下（同样自动识别 SCT/SC3）：

```python
# 来自官方 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()
```

## 完整示例代码

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

```python
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 的 `code` 与 `message`，再按 [FAQ 排查清单](https://sct.ftqq.com/docs/getting-started/faq/) 逐项检查。

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

**SendKey 放哪里安全？**
环境变量或密钥管理服务；不要提交进 git，不要打印到日志。详见 [SendKey 保管建议](https://sct.ftqq.com/docs/getting-started/sendkey/)。

## 相关集成

- [Claude Code 任务完成微信通知](https://sct.ftqq.com/docs/integrations/claude-code/)
- [Uptime Kuma 宕机微信告警](https://sct.ftqq.com/docs/integrations/uptime-kuma/)
- [30 秒获取 SendKey](https://sct.ftqq.com/docs/getting-started/sendkey/)


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

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

```text
请帮我把 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 条结果摘要即可，批量任务合并成一条，不要每步都推。
请根据我当前的项目和场景直接写好代码/配置并验证。
```

