python实现自动向钉钉群推送消息
此机器人只能向群内推送消息,不支持应答。
话不多说,先上代码。
import requests import json import time import hmac import hashlib import base64 import urllib.parse from bs4 import BeautifulSoup import random import time # 签名 def sign(secret,timestamp): secret_enc = secret.encode('utf-8') string_to_sign = '{}\n{}'.format(timestamp, secret) string_to_sign_enc = string_to_sign.encode('utf-8') hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) # print(timestamp) # print(sign) sign_str= {"sign": sign,"timestamp":timestamp} return sign_str # 钉钉消息 def send_msg(sign,timestamp): tim = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) headers = {"Content-Type": "application/json"} readData = EveryDayStudy() imgurl = getImgUrl() data = { "msgtype": "markdown", "markdown": { "title":"每日一读", "text": "#### 今日鸡汤 \n> "+readData+" \n\n>  \n> ###### "+tim+" [更多](http://www.duanmeiwen.com/yulu/lizhi/46345.html) \n" }, # @群内人员 # "at": { # "atMobiles": [ # "150XXXXXXXX" # ], # "atUserIds ": [ # "user123" # ], # "isAtAll": false # } } webh = webhook+'×tamp='+timestamp+'&sign='+sign r = requests.post(webh, data=json.dumps(data), headers=headers) print(r.text) # 每日一读 文字 def EveryDayStudy(): num = random.randint(1,299) res = requests.get('http://www.duanmeiwen.com/yulu/lizhi/46345.html') res.encoding = 'gb2312' bs = BeautifulSoup(res.text, "html.parser") Datalist = [] for i in bs.find_all("div", class_="content"): text1 = i.text for j in range(1,300,1): text2= text1.split(str(j)+'、') text3= text2[1].split(str(j+1)+'、') Datalist.append(text3[0]) return Datalist[num] # 图片 def getImgUrl(): img=[] num = random.randint(1,17) headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36', 'Content-Type':"text/html; charset=utf-8" } req_url= 'https://www.ivsky.com/bizhi/fengjing/' res = requests.get(url=req_url,headers=headers) res.encoding = 'utf-8' bs = BeautifulSoup(res.text, "html.parser") for i in bs.find_all("img"): imgtext = i imgstr = str(imgtext).split(' src="') imgstr1=imgstr[1].split('"/>') imgurl = 'https:'+imgstr1[0] img.append(imgurl) return img[num] # 时间戳 timestamp = str(round(time.time() * 1000)) # 钉钉机器人配置 secret = '此处填写加签的秘钥' webhook = 'https://oapi.dingtalk.com/robot/send?access_token=XXXXXX' sign_str =sign(secret,timestamp) sg = sign_str['sign'] send_msg(sg,timestamp)
下面简单介绍一下,向钉钉群推送消息是通过钉钉群机器人发送消息的,所以首先需要在测试群内新增一个机器人
步骤一:【电脑钉钉 】-【群聊】-【群设置】-【智能群助手】-【添加更多】-【添加机器人】-【自定义】-【添加】,编辑机器人名称和选择添加的群组。
步骤二:安全设置,可以选择自定义关键词和加签(脚本需要用到加签的秘钥)
如果机器人的配置不了解的话,请自行百度。
首先签名部分,可以在钉钉文档中找到,需要用到的是一个时间戳和加签的秘钥
然后发送钉钉消息部分,也需要这个时间戳,然后还需要一个签名得到的sign。
需要发送的文字和图片都是网上爬取的。
另外需要注意的是,发送消息的title是需要填新增机器人填写的关键字的,填错是发送不了消息的
最后一步,设置定时发送,如果条件允许,可以布置到Jenkins上
如果不能配置到Jenkins上,那就退而求其次了,在自己电脑上配置定时任务
具体的方法可以百度一下
https://www.it610.com/article/1298533114234085376.htm
https://jingyan.baidu.com/article/5d6edee227e38dd8ebdeec2f.html
浙公网安备 33010602011771号