固水 发表于 2022-8-15 12:04

【python】定时钉钉发送知乎爆读里消息,

本帖最后由 固水 于 2022-10-10 10:59 编辑

最近看了https://www.52pojie.cn/thread-1651017-1-1.html这个帖子,改写了下用钉钉机器人助手推每日消息

目前是设置在钉钉群里,能不能只给自己发,没试过
原理都在钉钉机器人上可以自己看:
1,新建机器人 ,设置秘钥,获取webhookhttps://attach.52pojie.cn//forum/202208/15/121035mkcyp366yrjvu0jp.png?l
2,代码部分# # !/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
      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_()['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,机器人及成品效果:https://attach.52pojie.cn//forum/202208/15/120200q3so34zd4sukl3dg.png?l

tencentma 发表于 2022-8-15 14:17

原来这个也能实现,我之前也有这个类似的想法,楼主太牛了,代码儿,我研究一下

zhang120300 发表于 2022-8-15 14:32

学习了。python 不是很懂。

webhook 获取的链接 能给下吗?

lawrenceliu 发表于 2022-8-15 14:34

厉害了,我也要研究一下。

ycm19980520 发表于 2022-8-15 15:29

+1,感谢楼主

无字情书 发表于 2022-8-15 15:58

我问下 后面这个定时执行任务的 是根据啥执行的。我目前有弄消息推送的钉钉机器人,不过我是做那个任务计划 定时执行的

固水 发表于 2022-8-15 17:28

zhang120300 发表于 2022-8-15 14:32
学习了。python 不是很懂。

webhook 获取的链接 能给下吗?

首先,给个币
其次,我录个gif你看下

固水 发表于 2022-8-15 17:30

无字情书 发表于 2022-8-15 15:58
我问下 后面这个定时执行任务的 是根据啥执行的。我目前有弄消息推送的钉钉机器人,不过我是做那个任务计划 ...

日期,具体我也不太懂,只是看这个模块有定时执行的功能才用的,你可以看下教程关于这个包的

固水 发表于 2022-8-15 17:36

固水 发表于 2022-8-15 17:28
首先,给个币
其次,我录个gif你看下

1,https://attach.52pojie.cn//forum/202208/15/173331bf2k0tjmjxeg0xd8.png?l
2,
3,
4,





固水 发表于 2022-8-15 17:38

无字情书 发表于 2022-8-15 15:58
我问下 后面这个定时执行任务的 是根据啥执行的。我目前有弄消息推送的钉钉机器人,不过我是做那个任务计划 ...

你回复了啥,我看不到啊
页: [1] 2
查看完整版本: 【python】定时钉钉发送知乎爆读里消息,