程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

辦公利器:用Python向釘釘發送消息

編輯:Python

釘釘作為目前最熱門的辦公軟件,在工作中大多數時間都在與他打交道。今天和大家分享一下如何用Python向釘釘發送消息,最終達到每日自動向指定群中發送銷售日報。

新建群機器人

首先打開群設置,點擊智能群助手。

選擇添加自定義機器人

然後根據提示添加一下信息,建議選擇安全設置的前兩項,這裡加簽的密鑰需要保存一下,後面會用到。

點擊完成後就會生成一個Webhook地址,這個地址和密鑰不要隨便公布出來,放在外部網站上會存在安全隱患。

獲取簽名值

我們此時已經獲取了密鑰和Webhook,先將密鑰解析得到時間戳(timestamp)以及簽名值(sign),代碼如下。

import time
import hmac
import hashlib
import base64
import urllib.parse
timestamp = str(round(time.time() * 1000))
secret = '填入你的密鑰'
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)

timestamp,sign作為兩個關鍵參數,把它們與Webhook拼接。

https://oapi.dingtalk.com/robot/send?access_token=XXXXXX&timestamp=XXX&sign=XXX

access_token參數的值在創建機器人時已經包含在Webhook中,這裡只需傳入timestamp與sign的值即可得到完整的Webhook

釘釘消息類型

釘釘消息類型多種,可根據需要選擇發送的消息類型。

官方文檔:https://open.dingtalk.com/document/robots/custom-robot-access

我使用的是Markdown格式,目前只支持基礎的Markdown語法,一開始以為是謙虛,親測後發現確實不支持,HTML語法也僅僅支持很小一部分。

標題
# 一級標題
## 二級標題
### 三級標題
#### 四級標題
##### 五級標題
###### 六級標題
引用
> A man who stands for nothing will fall for anything.
文字加粗、斜體
**bold**
*italic*
鏈接
[this is a link](http://name.com)
圖片
![](http://name.com/pic.jpg)
無序列表
- item1
- item2
有序列表
1. item1
2. item2

Python發送請求

整體代碼並不復雜,代碼如下。

import time
import hmac
import hashlib
import base64
import urllib.parse
import datetime
import json
timestamp = str(round(time.time() * 1000))
secret = '填入你的密鑰'
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)
url = f'https://oapi.dingtalk.com/robot/send?access_token=xxxx&timestamp={
timestamp}&sign={
sign}'
def send_request(url, datas):
header = {

"Content-Type": "application/json",
"Charset": "UTF-8"
}
sendData = json.dumps(datas)
sendDatas = sendData.encode("utf-8")
request = urllib.request.Request(url=url, data=sendDatas, headers=header)
opener = urllib.request.urlopen(request)
# 輸出響應結果
print(opener.read())
def get_string():
''' 自己想要發送的內容,注意消息格式,如果選擇markdown,字符串中應為包含Markdown格式的內容 例: "<font color=#00ffff>昨日銷售額:XXX</font> \n <font color=#00ffff>昨日銷量:XXX</font>" '''
return "- 測試1 - 測試2"
def main():
# isAtAll:是否@所有人,建議非必要別選,不然測試的時候很尴尬
dict = {

"msgtype": "markdown",
"markdown": {
"title": "銷售日報",
"text": ""
},
"at": {

"isAtAll": False
}
}
#把文案內容寫入請求格式中
dict["markdown"]["text"] = get_string()
send_request(url, dict)
main()

如果還有不清楚的地方,可以直接私信或參考官方文檔。

https://open.dingtalk.com/document/robots/robot-overview


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved