Python脚本微信消息推送如何实现

wen 实用脚本 4

Python脚本实现微信消息推送:从入门到自动化实战指南

目录导读

  1. 为什么需要用Python推送微信消息?
  2. 三大主流实现方案对比
  3. 企业微信机器人(最稳定)
  4. 个人微信模拟(itchat方案)
  5. Server酱与PushPlus(零代码方案)
  6. 实战:天气预报自动推送脚本
  7. 常见问题与QA
  8. 优化建议与避坑指南

为什么需要用Python推送微信消息?

在日常开发或运维工作中,我们经常需要将系统状态、监控告警、数据更新等信息实时推送到微信。Python脚本实现微信消息推送可以解决以下痛点:

Python脚本微信消息推送如何实现

  • 服务器异常时自动通知运维人员
  • 爬虫抓取到新内容时实时推送
  • 每日定时发送天气、新闻、待办事项
  • 量化交易信号的即时提醒

然而微信官方并未提供公开的个人用户消息推送API,因此需要借助第三方方案,本文将详细剖析目前最有效的几种实现方式,并给出可直接运行的代码。


三大主流实现方案对比

方案 稳定性 可定制性 适用场景 封号风险
企业微信机器人 团队协作、服务器告警
itchat模拟登录 个人号消息处理
Server酱/PushPlus 个人快速推送

选择建议

  • 工作场景优先选企业微信机器人(免费、稳定、无风险)
  • 个人项目选PushPlus(注册即用,10秒集成)
  • 需要控制个人微信才选itchat(需承担封号风险)

方案一:企业微信机器人(最稳定)

企业微信提供了Webhook机器人,只需在群聊中添加一个机器人,即可通过HTTP POST发送消息。

1 获取Webhook地址

  1. 创建企业微信群聊
  2. 点击群设置 → 群机器人 → 添加机器人
  3. 复制Webhook地址(格式:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx

2 Python脚本实现

import requests
import json
def send_wechat_msg(msg, webhook_url):
    """通过企业微信机器人发送消息"""
    headers = {'Content-Type': 'application/json'}
    data = {
        "msgtype": "text",
        "text": {
            "content": msg
        }
    }
    try:
        response = requests.post(webhook_url, headers=headers, data=json.dumps(data))
        if response.status_code == 200:
            return True
        else:
            print(f"发送失败:{response.text}")
            return False
    except Exception as e:
        print(f"请求异常:{e}")
        return False
# 使用示例
webhook = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key"
send_wechat_msg("【系统告警】服务器CPU使用率超过90%", webhook)

3 支持更多消息类型

企业微信机器人还支持Markdown、图片、文件等格式:

# 发送Markdown消息
data = {
    "msgtype": "markdown",
    "markdown": {
        "content": "# 服务器监控报告\n**CPU**: 95%\n**内存**: 78%\n> 请立即处理"
    }
}

方案二:个人微信模拟(itchat方案)

itchat是一个开源的微信个人号接口,可以模拟登录微信网页版。注意:该方法有被微信检测并封禁的风险,建议使用小号测试

1 安装与登录

pip install itchat

2 实现消息推送

import itchat
# 登录微信(会弹出二维码扫描)
itchat.auto_login(hotReload=True)
def send_to_friend(msg, nickname):
    """向指定好友发送消息"""
    friend = itchat.search_friends(name=nickname)[0]
    if friend:
        friend.send(msg)
        return True
    return False
def send_to_group(msg, group_name):
    """向群聊发送消息"""
    group = itchat.search_chatrooms(name=group_name)[0]
    if group:
        group.send(msg)
        return True
    return False
# 使用示例
send_to_friend("今天记得打卡哦!", "张三")

3 封装成自动化脚本

# 将推送功能封装成函数
def push_wechat_personal(msg, target="filehelper", target_type="friend"):
    if target_type == "friend":
        itchat.send(msg, toUserName=target)
    elif target_type == "group":
        group = itchat.search_chatrooms(name=target)[0]
        itchat.send(msg, toUserName=group['UserName'])
# 使用:
itchat.send("系统通知:任务完成", toUserName="filehelper")  # 发送到文件传输助手

方案三:Server酱与PushPlus(零代码方案)

这两家第三方平台专门提供微信推送服务,无需自己部署服务器,通过API即可将消息推送到个人微信。

1 PushPlus实现(推荐)

步骤

  1. 访问pushplus.plexpt.com(注意:域名已改为示例域名,实际请搜索PushPlus)
  2. 微信扫码登录获取Token
  3. 使用API发送消息

Python代码

import requests
def push_plus(msg, title="通知"):
    url = "http://www.pushplus.plexpt.com/send"  # 示例域名
    data = {
        "token": "你的Token",
        "title": title,
        "content": msg,
        "template": "txt"
    }
    resp = requests.post(url, json=data)
    return resp.json()
# 使用
push_plus("服务器已启动成功", title="系统通知")

2 Server酱实现

步骤

  1. 访问sct.ftqq.com(示例域名)并扫码登录
  2. 在「Key配置」中获取SendKey
  3. 通过GET或POST请求发送
import requests
def server_chan(msg, title="通知"):
    sendkey = "你的SendKey"
    url = f"https://sctapi.ftqq.com/{sendkey}.send"
    data = {
        "title": title,
        "desp": msg
    }
    resp = requests.post(url, data=data)
    return resp.json()
# 使用
server_chan("数据库备份完成,共5个文件", title="备份报告")

实战:天气预报自动推送脚本

结合上述方案,我们写一个每天早上7点自动推送天气的脚本。

import requests
import json
import time
from datetime import datetime
# 配置
CITY = "北京"
PUSHPLUS_TOKEN = "你的Token"
WEATHER_API_KEY = "你的天气API Key"  # 可申请免费和风天气、心知天气等
def get_weather(city):
    """获取天气数据(示例使用和风天气API)"""
    url = f"https://devapi.qweather.com/v7/weather/now?location={city}&key={WEATHER_API_KEY}"
    resp = requests.get(url)
    data = resp.json()
    if data['code'] == '200':
        now = data['now']
        return f"city}天气:{now['text']},气温{now['temp']}℃,湿度{now['humidity']}%"
    else:
        return "天气获取失败"
def push_daily_weather():
    weather_info = get_weather(CITY)
    msg = f"☀️ 每日天气播报 - {datetime.now().strftime('%Y-%m-%d')}\n{weather_info}"
    # 使用PushPlus推送
    push_data = {
        "token": PUSHPLUS_TOKEN,
        "title": "早安天气",
        "content": msg,
        "template": "txt"
    }
    requests.post("http://www.pushplus.plexpt.com/send", json=push_data)
    print(f"已推送:{msg}")
# 在系统中配置定时任务(Linux Crontab或Windows任务计划)
# 每天7:00执行:python weather_push.py
if __name__ == "__main__":
    push_daily_weather()

部署方式

  • Linux:使用crontab设置 0 7 * * * /usr/bin/python3 /path/weather_push.py
  • Windows:使用任务计划程序,每天7点启动脚本

常见问题与QA

Q1: 企业微信机器人发送消息有限制吗?

A: 每个机器人每分钟最多20条消息,每天无上限,如果推送频率高,建议创建多个机器人轮询。

Q2: itchat登录时提示“无法登录网页版”怎么办?

A: 微信2023年后逐步限制网页版登录,可尝试使用itchat-uos(针对MacOS协议的版本),或改用企业微信方案。

Q3: PushPlus免费版每天能发多少条?

A: 免费版每天100条,付费版无限,对于个人监控告警完全够用。

Q4: 如何发送富含格式的消息(如表格)?

A: 企业微信支持Markdown格式,可以写表格、标题、引用,PushPlus支持HTML格式。

Q5: 推送时出现“Key无效”错误?

A: 检查Token/SendKey是否复制完整,注意区分大小写,使用前最好先测试一下。


优化建议与避坑指南

  1. 安全性:不要把Token/Key直接写死在代码中,建议使用环境变量:

    import os
    TOKEN = os.getenv("PUSHPLUS_TOKEN")
  2. 重试机制:网络波动可能导致推送失败,增加重试代码:

    for i in range(3):
        if send_msg(msg):
            break
        time.sleep(2)
  3. 限流保护:高频率推送可能触发风控,建议每次推送间隔至少1秒。

  4. 日志记录:记录每次推送的结果,方便排查问题:

    import logging
    logging.basicConfig(filename='push.log', level=logging.INFO)
  5. 消息去重:对于重复告警(如CPU持续高),建议只推送一次,避免微信消息轰炸。

  6. 使用虚拟环境:建议为推送脚本创建独立Python虚拟环境,避免依赖冲突。


通过本文提供的三种方案,您可以根据自己的场景选择最合适的Python脚本微信消息推送实现方式,对于生产环境,强烈推荐企业微信机器人;对于个人快速使用,PushPlus是最佳选择,动手写一个脚本,体验自动化推送的便利吧!

抱歉,评论功能暂时关闭!