前言
自从前几天有一次忘记疫情填报后,就想着能不能通过程序自动化来进行填写,网上找了找后终于找到一份详细教程,幸运的是教程作者还是本校学长,这里感谢Pinming学长,代码已经写好了,还好之前也学过一点python,能看懂代码,因此很快就部署成功了。
学长部署时用的是
将代码下载到本地
点击去下载代码,可以选择clone或者下载压缩包的方式
将代码下载到本地后,用开发工具(推荐vscode,pycharm也行),修改index.py
文件中内容:
翱翔门户登录信息:
- 修改用户名和密码
- 修改SCKEY
- 邮箱(可选,如果不想把信息发到自己邮箱就不需要配置,如果想的话根据代码注释来配置)
- 在本地运行测试
color:green SCKEY获取步骤
进入server酱官网,
使用GitHub账号登录。开始绑定微信。就是使用微信扫描之后(会叫你关注一个公众号),然后在这个界面点击<检查结果并确认绑定>绑定成功即可获取SendKey(在发送消息页面)。
把这个SendKey填入SCKEY即可
部署到腾讯云
为了能让代码定时运行,我们可以将代码部署到腾讯云,通过云服务来代替我们手动执行,当然你也可以配置为在本地电脑配置定时执行,但这样你的电脑就别想关机了。
创建云函数
首先登录腾讯云(微信扫码通过即可),进入控制台,选择云产品->云函数
或者在搜索框输入 “云函数”,在展开的页面选择控制台入口的 “云函数”
新建云函数
依次选择:
上传代码
上传成功后进入
index.py
文件,将最后一行代码注释掉,因为云函数执行时是通过调用 入口函数main_handler
来运行的
进行测试
先部署,后测试
等待测试结果,在执行日志看到如下结果表示部署成功
设定定时触发
定时触发即定时执行程序
选择左边面板的 触发管理->创建触发器
触发方式选择定时触发,周期选择自定义触发周期
color:green Cron表达式
如何自定义触发周期,实际是通过配置cron表达式来定义的,其语法可以看官方文档
Cron表达式语法
Cron 表达式有七个必需字段(从左到右共1-7位),按空格分隔。
格式如:
1 | * * * * * * * |
第一位 | 第二位 | 第三位 | 第四位 | 第五位 | 第六位 | 第七位 |
---|---|---|---|---|---|---|
秒(0-59的整数) | 分钟(0-59的整数) | 小时(0-23的整数) | 日(1-31的整数,需要考虑月的天数) | 月(1-12的整数或 JAN,FEB,MAR,APR,……) | 星期( 0-6的整数或SUN,MON,TUE,……其中0指星期日,1指星期一,以此类推) | 年( 1970-2099的整数) |
每一位可以添加通配符, - * /
:
通配符 | 含义 |
---|---|
,(逗号) | 代表取用逗号隔开的字符的并集。例如:在第三位“小时”字段中 1,2,3 表示1点、2点和3点 |
-(破折号) | 包含指定范围的所有值。例如:在第四位“日”字段中,1-15 包含指定月份的1号到15号 |
* (星号) | 表示所有值。在第三位“小时”字段中,* 表示每个小时 |
/ (正斜杠) | 指定增量。在第二位“分钟”字段中,输入1/10 以表示从第一分钟开始的每隔十分钟就执行一次;*/10 则表示每隔10分钟执行一次(没有指定第一次什么时候开始) |
例子:
表达式 | 相关含义 |
---|---|
*/5 * * * * * * | 表示每5秒触发一次 |
0 15 10 1 * * * | 表示在每月的1日的上午10:15触发 |
0 15 10 * * MON-FRI * | 表示在周一到周五每天上午10:15触发 |
0 0 10,14,16 * * * * | 表示在每天上午10点,下午2点,4点触发 |
0 */30 9-17 * * * * | 表示在每天上午9点到下午5点每半小时触发 |
0 0 12 * * WED * | 表示在每个星期三中午12点触发 |
例如我的配置
到此完成了云函数配置
使用Github Actions
如果你没有腾讯云账户,也不想用腾讯云,这里提供另外一个方法,使用Github提供的Actions来实现;
-
首先你得有一个Github账号
如果没听说过GitHub就别想用自动化了,听说过但没有账号的强烈建议注册一个,为什么,百度去,说真的Github"真香" -
然后在自己的GitHub账号下新建一个仓库(不会的去百度)
-
在本地下载的代码文件夹中,创建
.github
文件夹,再在这个文件夹创建文件夹workflows
,再在workflows
下创建文件main.yml
(这个文件名随意),然后在main.yml
添加如下代码:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24name: 自动运行仓库的index脚本
on:
schedule:
- cron: '17 22 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Python 3.9
uses: actions/setup-python@v2
with:
python-version: 3.9
- name: Install dependencies
run: |
python -m pip install --upgrade pip
# pip install requests==2.24.0 beautifulsoup4==4.9.1 pytz
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Test
run: |
python index.py -
如果不想自己设定定时执行时间(这里设定每天早上6:17分执行),就直接将全部文件
push
到刚新建的仓库中即可如果想自定义执行时间,则需修改第5行代码
cron
表达式的值(注意这个与在腾讯云部署时讲的不同,前面讲的那个是7位的,这个是5位)1
2
3
4
5name: 自动运行仓库的index脚本
on:
schedule:
- cron: '17 22 * * *' # 该时间为UTC时间,22:17PM + 8:00 = 6:17AM
cron表达式的5位从左到右分别表示 分 时 日 月 星期
,用法与7位那个差不多,四个通配符【- , * /
】也都可以用,用法一样
还不懂的可以去这个网站,自动生成cron表达式
注意
- 这个时间是UTC标准时间,将北京时间换算成UTC时间要减去8小时,比如想要在北京时间9:12执行,则相应UTC时间为1:12
- 这个定时时间并不是代码执行的时间,只是排队时间,因为用Github Actions的人太多了,当你定时时间到了后会进行排队等待执行(时间为十几分钟到一个小时甚至更久一些),因此需要自己估计好执行时间,不过疫情填报设定为每天早上执行一次不就行了😅?