抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >
问题已解决,可以继续使用了,最新代码已经提交到Gitee,腾讯云函数好像改变收费方式了,本人已转移到GitHub Actions阵地👀 最近已经用不了了,好好每天设定好闹钟吧,想学习的还可以看看。。。😥 本教程仅限于学习使用,希望看到这个教程的同学严格遵守学校要求,认真对待,出现任何问题后果自行承担!

前言

自从前几天有一次忘记疫情填报后,就想着能不能通过程序自动化来进行填写,网上找了找后终于找到一份详细教程,幸运的是教程作者还是本校学长,这里感谢Pinming学长,代码已经写好了,还好之前也学过一点python,能看懂代码,因此很快就部署成功了。

学长部署时用的是阿里云的,由于我之前已经注册过腾讯云,于是改用腾讯云来进行部署。

将代码下载到本地

点击去下载代码,可以选择clone或者下载压缩包的方式

将代码下载到本地后,用开发工具(推荐vscode,pycharm也行),修改index.py文件中内容:

翱翔门户登录信息:

image-20211001140949171

  1. 修改用户名和密码
  2. 修改SCKEY
  3. 邮箱(可选,如果不想把信息发到自己邮箱就不需要配置,如果想的话根据代码注释来配置)
  4. 在本地运行测试
color:green SCKEY获取步骤
  1. 进入server酱官网使用GitHub账号登录。开始绑定微信。就是使用微信扫描之后(会叫你关注一个公众号),然后在这个界面点击<检查结果并确认绑定>

  2. 绑定成功即可获取SendKey(在发送消息页面)。

  3. 把这个SendKey填入SCKEY即可

image-20211001155629264

部署到腾讯云

为了能让代码定时运行,我们可以将代码部署到腾讯云,通过云服务来代替我们手动执行,当然你也可以配置为在本地电脑配置定时执行,但这样你的电脑就别想关机了。什么,你用树莓派,那你当我没说

创建云函数

首先登录腾讯云(微信扫码通过即可),进入控制台,选择云产品->云函数

image-20211001142044564

或者在搜索框输入 “云函数”,在展开的页面选择控制台入口的 “云函数”

image-20211001142354717

新建云函数

image-20211001142558049

依次选择:

image-20211001142820237

上传代码

image-20211001143232707

上传成功后进入 index.py文件,将最后一行代码注释掉,因为云函数执行时是通过调用 入口函数main_handler来运行的

进行测试

先部署,后测试

image-20211001143819013

等待测试结果,在执行日志看到如下结果表示部署成功

image-20211001144126831

设定定时触发

定时触发即定时执行程序

选择左边面板的 触发管理->创建触发器

image-20211001144518716

触发方式选择定时触发,周期选择自定义触发周期

image-20211001144740277

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点触发

例如我的配置

image-20211002102256427

到此完成了云函数配置

使用Github Actions

如果你没有腾讯云账户,也不想用腾讯云,这里提供另外一个方法,使用Github提供的Actions来实现;

  1. 首先你得有一个Github账号

    如果没听说过GitHub就别想用自动化了,听说过但没有账号的强烈建议注册一个,为什么,百度去,说真的Github"真香"
  2. 然后在自己的GitHub账号下新建一个仓库(不会的去百度)

  3. 在本地下载的代码文件夹中,创建 .github文件夹,再在这个文件夹创建文件夹workflows,再在workflows下创建文件main.yml(这个文件名随意),然后在 main.yml 添加如下代码:

    image-20211002210058967

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    name: 自动运行仓库的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
  4. 如果不想自己设定定时执行时间(这里设定每天早上6:17分执行),就直接将全部文件 push到刚新建的仓库中即可

    如果想自定义执行时间,则需修改第5行代码 cron 表达式的值(注意这个与在腾讯云部署时讲的不同,前面讲的那个是7位的,这个是5位)

    1
    2
    3
    4
    5
    name: 自动运行仓库的index脚本

    on:
    schedule:
    - cron: '17 22 * * *' # 该时间为UTC时间,22:17PM + 8:00 = 6:17AM

cron表达式的5位从左到右分别表示 分 时 日 月 星期 ,用法与7位那个差不多,四个通配符【- , * /】也都可以用,用法一样

还不懂的可以去这个网站,自动生成cron表达式

image-20211002211732268

注意

  1. 这个时间是UTC标准时间,将北京时间换算成UTC时间要减去8小时,比如想要在北京时间9:12执行,则相应UTC时间为1:12
  2. 这个定时时间并不是代码执行的时间,只是排队时间,因为用Github Actions的人太多了,当你定时时间到了后会进行排队等待执行(时间为十几分钟到一个小时甚至更久一些),因此需要自己估计好执行时间,不过疫情填报设定为每天早上执行一次不就行了😅?

代码中的bug修复

有时程序在运行时会出错,如下

image-20211002101210323
  1. 把以下代码注释掉

    image-20211002101326881

  2. 还有第64行最后面的 + notice 去掉

    image-20211002212400561

在我仓库中下载的可以忽略这个bug,因为我已经修改好了

评论