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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM