Python + 釘釘 實現(xiàn)消息通知

學(xué)習(xí) Python 有段時間了,但總覺得欠缺點什么,想來想去還是缺少實戰(zhàn)的演練,編程從來都不是紙上談兵就能搞定的事情,必須從實踐中提高自己的熟練度和水平。

剛好最近有個想法,需要定時從某個網(wǎng)站上爬取一些有用的信息,然后通過釘釘推送。

關(guān)于釘釘開放API 我們這里不做過多的講述,想了解更多信息,可以 點擊這里 跳轉(zhuǎn)官網(wǎng)進行詳細(xì)了解。

這里我們將整個過程分為三步:

  1. 建立自己的釘釘消息接受群;
  2. 申請機器人;
  3. 通過Python 進行消息推送。

下面我們就這三部分別演示。

1. 建立消息群

在申請群之前首先要登錄釘釘賬號,然后建立自己的群聊,如下圖所示。
建立群聊

建立群聊

選擇群類型

選擇群類型

然后一步步按照提示走下去即可。

2. 申請機器人

群申請成功之后,我們可以點擊群右上角的設(shè)置按鈕,進行機器人的申請和配置,如下圖所示:


點擊里面的 群智能助手 進行機器人的申請。

這里有很多機器人類型,我們選擇自定義機器人。這里已經(jīng)添加好了,就不再做演示,直接看機器人配置部分。


機器人配置主要看兩部分,一個是訪問地址及 Token 的獲取,另一個是 安全設(shè)置,前者保證你能將消息準(zhǔn)確發(fā)送到剛才新建的群里面,后者保證只有在滿足你設(shè)定的攔截條件后消息才能發(fā)送到群里面。

前者的樣式如下:

# xxx 代表具體的 token,每個群不一樣
https://oapi.dingtalk.com/robot/send?access_token=xxx

釘釘通過三種方式保證消息的安全發(fā)送,即下圖所示的關(guān)鍵字、加簽及 IP 白名單



我們這里選擇用第二種方式——加簽,需要將上圖中的 Webhook 地址 和 加簽 的內(nèi)容進行復(fù)制,等下第三步要用到。

3. 通過Python 進行消息推送

在官網(wǎng)上我們能夠找到 Python 的部分示例代碼。

#python 3.8
import time
import hmac
import hashlib
import base64
import urllib.parse

timestamp = str(round(time.time() * 1000))
secret = 'this is 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)

以上代碼是加簽過程,其中用到的 secret 就是我們在第二部復(fù)制的加簽內(nèi)容,而最終生成的 timestampsign 就是我們要拼接到 webhook 地址后面的內(nèi)容。

要想成功發(fā)送消息到釘釘,加簽只是其中一步,接下來就需要通過 Python 發(fā)送消息。我們提供完整的示例代碼。

import json
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests


def send(msg):
    headers = {'Content-Type': 'application/json', "Charset": "UTF-8"}
# 這里替換為復(fù)制的完整 webhook 地址
    prefix = 'https://oapi.dingtalk.com/robot/send?access_token=xxx '
    timestamp = str(round(time.time() * 1000))
# 這里替換為自己復(fù)制過來的加簽秘鑰
    secret = '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))

    url = f'{prefix}&timestamp={timestamp}&sign={sign}'

# 釘釘消息格式,其中 msg 就是我們要發(fā)送的具體內(nèi)容
    data = {
        "at": {
            "isAtAll": False
        },
        "text": {
            "content": msg
        },
        "msgtype": "text"
    }

    return requests.post(url=url, data=json.dumps(data), headers=headers).text


send("我就是我,顏色不一樣的火")

上述代碼中,除了漢字備注的部分,其余可視為固定寫法。

接下來,我們在 Python 環(huán)境中執(zhí)行代代碼,釘釘群里便可收到消息。

python3 dingding.py
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容