通过 Github Action 实现定时推送天气预报( 二 )


定时触发name: "天气预报"on:push:schedule:# 需要减 8 个小时- cron: "0 23 * * *"这里比较好理解,name 是名称,on 是触发的时机,push 是我们提交代码到 Github 时触发,schedule 是定时触发 , 需要注意的时候,定时触发的时间需要减掉 8 个小时,其遵循国际标准时间而不是北京时间 。
运行流程runs-on: ubuntu-lateststeps:- name: "切换代码"uses: actions/checkout@v3进入到 jobs 运行流程中,runs-on 指定运行环境是最新的 Ubuntu 即可,actions/checkout@v3 用作从代码仓库获取代码 。
获取时间- name: "获取时间"run: echo "WEATHER_REPORT_DATE=$(TZ=':Asia/Shanghai' date '+%Y-%m-%d %T')" >> $GITHUB_ENV直接通过 Linux 命令获取当前时间 , 然后转换成北京时间,这个时间主要是用于后续写入到邮件的标题当中 。
在这里,通过 echo "{environment_variable_name}={value}" >> $GITHUB_ENV 的方式写入环境变量 , 在后续的步骤中都可以访问到这个环境变量 。
执行脚本- uses: actions/setup-python@v4with:python-version: "3.10"- run: pip install -r requirements.txt- name: "获取天气结果"run: 'echo "$(python open_api/weather.py 广州 桂林)" > output.txt'这里有两个步骤 , 一个是指定 Python 的运行环境并且安装好相关的依赖,第二个是执行 Python 的脚本获取结果 。
在这里 , 为了方便将脚本的执行结果给到后续的步骤,选择将执行结果写入到一个文件当中 。当然,选择怎样的方式主要看自己 。
发送邮件- name: "发送邮件"uses: dawidd6/action-send-mail@v3with:server_address: smtp.qq.comserver_port: 465username: ${{ secrets.SENDER_USER }}password: ${{ secrets.SENDER_PASSWORD }}subject: 天气预报 - ${{env.WEATHER_REPORT_DATE}}from: GitHub Actionsto: fatedeity@qq.combody: file://output.txt按照阮一峰的脚本,使用 Send email · Actions 发送邮件,和其不同的就是相关的配置 。
当然 , 也可以通过将发送邮件直接写入到 Python 脚本当中,它们各有自己的优势 。
使用 GIthub Action 发送邮件更易懂,只需要填写配置即可 , 也可以将脚本和发送邮件解耦 。
使用 Python 发送邮件可以省下 Github Action 的步骤,直接通过脚本一步到位 , 耦合就比较高 。
总结通过这一次的尝试 , 使用 Github Action 实现了自动化及定时,也是为以后实现自己的自动化做铺垫 。本篇文章的源码可以通过 GitHub - fatedeity/weather-action 访问 。
生命在于折腾 , 看似无用的一次尝试,希望能给自己带来美好的未来 。

推荐阅读