思维导图

  • 此项目已上传到Github开源

准备工作

  1. 准备一个钉钉群并加入群自定义钉钉机器人
  2. 设置钉钉机器人方法看钉钉官方文档即可
  3. 云服务器或者本地电脑,都没有的话,注册使用GitHub实现(使用方法二)

方法一

云服务器实现定时发送钉钉群消息

云服务器

  1. 使用云服务器(宝塔) (me菜鸟专属)
  2. 还可以使用云函数(这里我就不写了,感兴趣可以自己去研究研究)我懒_
  3. 打开宝塔 找到计划任务将代码填入即可
  4. 代码看钉钉官方文档或者去我GitHub项目复制
  5. 可以使用宝塔webhook测试代码是否执行,宝塔自带

定时任务

  1. 第一种是使用宝塔的计划任务,直接定时即可
  2. 第二种是使用Liunx系统的Crontab定时任务

仿群签到

由于学校开始了钉钉群的健康打卡统计,我是属于那种比较懒的,老是错过签到,懂得都懂嘿嘿,所以突发奇想搞了一个仿签到,也就是利用钉钉自带的机器人实现群消息通知,改了改源码,变成自己的签到通知,缺点就是无法实现钉钉后台的统计,但是这难不倒我,已经有了新的方法看这看这

查看钉钉仿签到代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/bin/bash
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxx' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "markdown",
"markdown": {
"title":"xxx的签到机器人",
"text": "##### 签到 (xxx的签到机器人) \n #### xxx在xx省xx市xx市签到 \n> ##### 签到时间:**19:00** \n> ##### 备注:**健康** \n> ##### 体温:**36.5** \n> ##### 家庭住址与现住址是否一样:**是** \n> ##### 是否接触过病例患者:**否** \n> ![screenshot](https://cdn.mr90.top/demo/wxpagecover/0/%E4%B8%8B%E8%BD%BD.jpg)\n> ###### 19点发布 [Harry](https://u.mr90.top) \n"
},
"at": {
"atMobiles": [
""
],
"isAtAll": true
}
}'

查看演示效果

  • 如果创建的是python文件,可以点击查看代码.py

方法二

Github实现定时发送钉钉群消息

使用GitHub

  1. 使用GitHub action定时运行.py文件来实现钉钉机器人定时发送群消息
  2. 创建一个GitHub仓库,新建一个要执行的.py文件名称自定,比如(run.py)

查看GitHub.py代码

  • 这里可以去我的GitHub仓库查看.py文件复制即可
  • 这里我还是以群仿签到代码为例,markdown形式的
  • 代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import time
import hmac
import hashlib
import base64
import urllib.parse

timestamp = str(round(time.time() * 1000))
secret = '这里是密码//可以使用变量secrets.GITHUB_SECTET,自己定义'
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)

import requests,json

#导入依赖库
headers={'Content-Type': 'application/json'} #定义数据类型
#截至到&timestamp之前
webhook = '这里是钉钉机器人的webhook地址,也可以使用变量[GITHUB_url]自己定义具有保密性&timestamp='+timestamp+"&sign="+sign
#定义要发送的数据
#"at": {"atMobiles": "['"+ mobile + "']"
data = {
#定义内容
"msgtype": "markdown",
"markdown": {
"title":"xxx的签到机器人",
"text": "##### 签到 (xxx的签到机器人) \n #### xxx在xx省xx市xx市签到 \n> ##### 签到时间:**19:00** \n> ##### 备注:**健康** \n> ##### 体温:**36.5** \n> ##### 家庭住址与现住址是否一样:**是** \n> ##### 是否接触过病例患者:**否** \n> ![screenshot](xxxxxxx)\n> ###### 19点发布 [Harry](https://u.mr90.top) \n"
}
}
res = requests.post(webhook, data=json.dumps(data), headers=headers) #发送post请求

print(res.text)
  • 演示效果同上就不展示了

实现定时效果

  1. 在本地git仓库创建.github\workflows\xxx.yml文件,加入以下代码
  2. 或者直接点击创建的GitHub项目的Action

查看.yml代码配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
  
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see 想了解更多可以点这里看官方文档: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

# name随便定义自拟
name: Dingding

on:
#这里是使用定时任务,可百度指令,如有需要将`#`去掉即可
#schedule:
#- cron: "0 0/2 * * *"
#这里是如果有人点击你仓库的star 就会执行一次,测试用,不用的时候#掉就可以,以免造成不必要的资源浪费
watch:
types: [started]
jobs:
build:

runs-on: ubuntu-latest
if: github.event.repository.owner.id == github.event.sender.id # 自己点的 start
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests lxml
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Run misson
#这里放路径,就是仓库的文件路径 格式: python 文件路径
run: |
python Python/actioncard.py

分享项目