Python自动提醒微信和钉钉孰优孰劣?钉钉编程如何实现?

前面聊过“利用python实现微信消息自动提醒”,自己同时也编程使用了钉钉的提醒功能。结合使用感受,谈谈两者的优缺点。
微信的优点:
平时不用钉钉,只用微信,不用多装一个钉钉应用;
微信提醒非常熟悉;
代码简单。
微信的缺点:
使用前需要扫码登陆,有点麻烦;
向文件传输助手发消息没有提醒,向其他人发消息发现重新登陆后用户名就变了,得重新查询;
听一个程序员朋友说这样用多了,有封号的危险,即使使用小号,封号也麻烦。
钉钉的优点:
直接设置机器人,每次使用不需登陆,更不用担心被封;
提醒声音与微信不同,微信消息多,干扰就多,单独用钉钉来提醒更好(尤其适合平时不用钉钉的朋友)
机器人是在群里的,通过设置群声音更方便,比如静音,或@自己
所以我更倾向于用钉钉提醒了,当然每个人可根据自己的需要选择。
如何用python实现钉钉的消息自动提醒?
官方说明文档在这里。
首先建立一个钉钉群,添加机器人,和微信类似,至少添加两个人就能拉群了,拉好之后就可以把不需要的人移除,然后点击右上角群设置-群机器人。

添加自定义机器人webhook

完成后就可以看到机器人的Webhook地址

点击“复制”按钮,即可获得这个机器人对应的Webhook地址,其格式如下,后面的xxxxxxxx就是你机器人的id
https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx
获取到Webhook地址后,就可以向这个地址发起HTTP POST 请求,即可实现给该钉钉群发送消息。注意,发起POST请求时,必须将字符集编码设置成UTF-8。
另外还可以实现通过手机号码指定“被@人列表”。
程序实现
可以使用 requests 发送网络请求,要导入 requests 模块,还用到的一个是json,导入。
import requests
import json
把刚才你创建的机器人id赋值给robot_id
你要发送的内容赋值给content,以发送文本 (text)为例
上面提到发起POST请求时,必须将字符集编码设置成UTF-8,使用
headers = {"Content-Type": "application/json ;charset=utf-8 "}作为post的头部信息
还需要使用json.dumps()把对象编码成 JSON 字符串
这样就可以使用requests.post(url, data=post_data, headers=headers)来发送信息了。
robot_id='你机器人的id'
content ="测试"
msg = {
"msgtype":"text",
"text": {"content": content}
}
headers = {"Content-Type":"application/json ;charset=utf-8 "}
url ='https://oapi.dingtalk.com/robot/send?access_token=' + robot_id
post_data = json.dumps(msg)# 将Python对象编码成 JSON 字符串
status = requests.post(url, data=post_data, headers=headers)
print(status.json())
除了上述两个内容之外,还可以设置@人
是否要@某人,在atMobiles里写上被@人的手机号,也可以在content里添加@人的手机号
是否要@所有人,isAtAll里@所有人时:true,否则为:false
这里只需要把以上两项添加到msg内容中
msg = {
"msgtype":"text",
"text": {"content": content},
"at": {
"atMobiles": [
"139xxxx0217",
"189xxxx8325"],
"isAtAll": False
}
}
当然如果群里只有你一个人,只是为了提醒,上述两个内容其实不需要。
如果你需要多处调用,可以把以上定义成一个函数,这样每次调用时不需要太多语句,也可以为每次调用设置不同的信息。
比如我们把函数设置成:
def send_text(content, is_at_all=False, at_mobiles=[],robot_id='你机器人的id'):
msg = {
"msgtype":"text",
"text": {"content": content},
"at": {
"atMobiles": at_mobiles,
"isAtAll": is_at_all
}
}
headers = {"Content-Type":"application/json ;charset=utf-8 "}
url ='https://oapi.dingtalk.com/robot/send?access_token=' + robot_id
post_data = json.dumps(msg)
status = requests.post(url, data=post_data, headers=headers)
return status.json()
调用时,只需要输入以下三行,内容可以随意编辑
content ='函数测试'
send_msg = send_text(content, is_at_all=False, at_mobiles=["139xxxx0527"])
print(send_msg)
如果你不需要@谁,把第二句里的电话删掉就行了。
send_msg = send_text(content, is_at_all=False, at_mobiles=[])
只要设置一次,下次就可以复制调用了,非常方便。可以设置不同的机器人实现不同目的的提醒,比如
可以设置正常运行提醒的机器人,把这个群设置成静音;
可以设置异常情况提醒的机器人,必须人工去干预;
还可以把异常情况设置成不同的优先级,根据需要@不同的人等等。
当然还可以配合“python微信自动提醒应用:交易所价格、订单、余额监控价格、订单、余额实现钉钉的自动通知。