本帖最后由 固水 于 2022-10-10 10:59 编辑
最近看了https://www.52pojie.cn/thread-1651017-1-1.html这个帖子,改写了下用钉钉机器人助手推每日消息
目前是设置在钉钉群里,能不能只给自己发,没试过
原理都在钉钉机器人上可以自己看:
1,新建机器人 ,设置秘钥,获取webhook
2,代码部分[Python] 纯文本查看 复制代码 # # !/usr/local/bin/python3import schedule
import datetime
import requests as req
import time
import hmac
import hashlib
import base64
import urllib.parse
import requests
def get_zhihu():
"""
:return: 返回每日爆读json数据
"""
headers = {
'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
}
r = req.get('https://news-at.zhihu.com/api/4/news/latest',
headers=headers) # 获取知乎API
return r.json()['stories']
def btns_():
'''
:return: 返回get_zhihu处理过的数据用于send_ding的json_data请求参数
'''
a = get_zhihu()
c = []
for i in a:
for key in list(i.keys()):
if key not in ["title", 'url']:
del i[key]
i['actionURL'] = i.pop('url')
c.append(i)
return c
# 签名计算示例代码
def send_ding():
'''
:return: 无返回;请求接口,发送到钉钉群
'''
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))
headers = {
# Already added when you pass json= but not when you pass data=
# 'Content-Type': 'application/json',
}
params = {
'access_token': '', # 自己的webhook里的access_token
'timestamp': f'{timestamp}',
'sign': f'{sign}',
}
json_data = {
"msgtype": "actionCard", # 可去钉钉文档更换其它样式
"actionCard": {
# "title": btns_()[0]['actionURL'],
"text": datetime.datetime.now().strftime('%Y-%m-%d'), # 今日时间
"btnOrientation": "0",
"btns": btns_()
}
}
response = requests.post('https://oapi.dingtalk.com/robot/send', params=params, headers=headers, json=json_data)
def zhixing_work(job):
'''
:param job: 准备要执行的函数
:return: 无返回,定时执行
'''
# 引入schedule和time
# schedule.every(1).minutes.do(job) # 部署每1分钟执行一次job()函数的任务
# schedule.every().hour.do(job) #部署每×小时执行一次job()函数的任务
# schedule.every().day.at("10:30").do(job) #部署在每天的10:30执行job()函数的任务
# schedule.every().monday.do(job) #部署每个星期一执行job()函数的任务
schedule.every().monday.at("18:00").do(job) # 部署每周一的18:00执行函数的任务
schedule.every().tuesday.at("18:00").do(job) # 部署每周二的18:00执行函数的任务
schedule.every().wednesday.at("18:00").do(job) # 部署每周三的18:00执行函数的任务
schedule.every().thursday.at("18:00").do(job) # 部署每周四的18:00执行函数的任务
schedule.every().friday.at("18:00").do(job) # 部署每周五的18:00执行函数的任务
while True:
schedule.run_pending()
time.sleep(10)
# 15-17都是检查部署的情况,如果任务准备就绪,就开始执行任务。
if __name__ == '__main__':
zhixing_work(send_ding) # 把send_ding函数传给定时任务去定时执行
3,机器人及成品效果:
|