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> ![screenshot]("+imgurl+") \n> ###### "+tim+" [更多](http://www.duanmeiwen.com/yulu/lizhi/46345.html) \n"
     },
     # @群内人员
      # "at": {
      #     "atMobiles": [
      #         "150XXXXXXXX"
      #     ],
      #     "atUserIds ": [
      #         "user123"
      #     ],
      #     "isAtAll": false
      # }
    }
    webh = webhook+'&timestamp='+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

原文地址

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值