如何用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发消息就行。
爬取消息,然后邮件发送给自己。

