如何用Python实现定制消息推送功能

最近有点忙,很难关注自己喜欢球队的比赛日程,于是乎想这么干:

想通过下面的流程实现比赛消息的定制推送,但不知该如何入手: 用户回复关键词(比如某支球队):曼联 服务器能够定期(如 7 天一次)将关键词(曼联)七天之内的比赛日程推送给用户

有木有什么方法可以实现上面的操作


如何用Python实现定制消息推送功能
2 回复

要搞个定制消息推送,Python里最直接的就是用requests库发HTTP请求到推送服务的API。比如用企业微信、钉钉、飞书或者Server酱这些,流程都差不多:先拿个访问令牌(token),然后把消息内容按API要求的格式组装好,用POST请求发出去就行。

下面拿企业微信机器人举个例子,这是最常用的方案之一:

import requests
import json

def send_wechat_work_robot_message(webhook_url, content, mentioned_list=None, mentioned_mobile_list=None):
    """
    发送企业微信机器人消息
    
    参数:
    webhook_url: 机器人的webhook地址
    content: 消息文本内容
    mentioned_list: @成员ID列表,如["wangqing", "@all"]
    mentioned_mobile_list: @手机号列表
    """
    headers = {'Content-Type': 'application/json'}
    
    # 构造消息体
    payload = {
        "msgtype": "text",
        "text": {
            "content": content
        }
    }
    
    # 添加@提及信息
    if mentioned_list:
        payload["text"]["mentioned_list"] = mentioned_list
    if mentioned_mobile_list:
        payload["text"]["mentioned_mobile_list"] = mentioned_mobile_list
    
    try:
        response = requests.post(webhook_url, headers=headers, data=json.dumps(payload))
        response.raise_for_status()
        result = response.json()
        
        if result.get('errcode') == 0:
            print("消息发送成功")
            return True
        else:
            print(f"发送失败: {result.get('errmsg')}")
            return False
            
    except requests.exceptions.RequestException as e:
        print(f"请求出错: {e}")
        return False

# 使用示例
if __name__ == "__main__":
    # 替换成你的机器人webhook地址
    WEBHOOK_URL = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key"
    
    # 发送普通消息
    send_wechat_work_robot_message(
        WEBHOOK_URL,
        "服务器CPU使用率超过90%,请及时处理!"
    )
    
    # 发送@特定人的消息
    send_wechat_work_robot_message(
        WEBHOOK_URL,
        "数据库备份完成,@王工 请确认",
        mentioned_list=["wangqing"]
    )

如果你要用钉钉机器人,代码结构类似,只是API格式不一样:

def send_dingtalk_robot_message(webhook_url, content, at_mobiles=None, is_at_all=False):
    headers = {'Content-Type': 'application/json'}
    
    payload = {
        "msgtype": "text",
        "text": {"content": content},
        "at": {
            "atMobiles": at_mobiles or [],
            "isAtAll": is_at_all
        }
    }
    
    response = requests.post(webhook_url, headers=headers, json=payload)
    return response.json()

关键就三步:1)找推送服务的API文档;2)拿访问凭证;3)按格式发请求。想推送得灵活点,就把消息内容、接收人这些参数化。

总结:选个推送平台,照着API文档用requests发消息就行。


爬取消息,然后邮件发送给自己。

回到顶部