GitHub Actions 教程:定时任务发送天气邮件

本文介绍了如何在GitHubActions中创建一个定时任务,每天获取指定城市的天气预报,并通过邮件发送。使用了wttr.inAPI获取天气,配合网易163邮件服务和自定义的YAML配置实现。
摘要由CSDN通过智能技术生成

GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,但也可用作代码运行环境。功能非常强大,能够玩出许多花样。

我写的《GitHub Actions 入门教程》 已经介绍了它的基本用法。本文紧接前一篇教程,给出一个简单实用的例子:每天定时运行一次脚本,获取天气预报,然后发送电子邮件。

完整代码可以从 GitHub 仓库 ruanyf/weather-action 获取。

第一步:获取天气预报

网站 wttr.in 支持命令行请求天气预报。

$ curl wttr.in

上面的命令会返回,你的 IP 地址所在位置的天气。
在这里插入图片描述
它还允许 URL 里面指定城市。

$ curl wttr.in/Shanghai

返回的数据可以通过curl命令的-o参数,保存成文件,以便后面发送。

$ curl -o result.html wttr.in/Shanghai

wttr. in 允许定制天气预报的格式和内容,详见它的文档,这里就不展开了。最后封装好的脚本weather.sh,完整代码看这里

第二步:发送邮件

拿到天气预报以后,只要放在邮件里面,发出去就可以了。

我用的是网易 163 邮件的免费发送服务,需要在它的网站上开通,本地的配置请看下一步。

第三步:配置 GitHub Actions

触发 GitHub Actions 需要在项目仓库新建一个.github/workflows子目录,里面是 YAML 格式配置文件,文件名可以随便取。GitHub 只要发现配置文件,就会运行 Actions。

配置文件的第一部分是触发条件。

name: 'GitHub Actions Weather Bot'

on:
  push:
  workflow_dispatch:
  schedule:
    - cron: '0 16 * * *'

jobs:
  bot:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout codes'
        uses: actions/checkout@v1
      - name: 'Get Weather'
        run: bash ./weather.sh
      - name: 'Get Date'
        run: echo "REPORT_DATE=$(TZ=':Asia/Wuhan' date '+%Y-%m-%d')" >> $GITHUB_ENV
      - name: 'Send mail'
        uses: dawidd6/action-send-mail@master
        with:
          server_address: smtp.qq.com
          server_port: 465
          username: ${{ secrets.MAIL_USERNAME }}
          password: ${{ secrets.MAIL_PASSWORD }}
          subject: 天气预报-Wuhan (${{env.REPORT_DATE}})
          html_body: file://result.html
          to: 307330552@qq.com
          from: GitHub Actions

上面代码中,run字段就是所要运行的命令。weather.sh

#!/bin/sh

set -eux

CITY=Wuhan
LANGUAGE="zh-CN"
UNIT=m
UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"

curl \
  -H "Accept-Language: $LANGUAGE" \
  -H "User-Agent: $UA" \
  -o result.html \
  https://wttr.in/$CITY?format=4\&$UNIT

上面代码中,name字段是配置文件的描述,on字段是触发条件。我们指定两种情况下触发,第一种是代码 Push 进仓库,第二种是定时任务,每天在国际标准时间16点(北京时间早上8点)运行。

发送邮件使用的是一个已经写好的 action,只要配几个参数就可以用。参数之中,邮件 SMTP 服务器的用户名和密码,使用的是加密变量,需要在项目的settings/secrets菜单里面设置。

写好配置,推送到仓库以后,就可以每天清早收到一封天气预报邮件了。在这个基础上不难扩展,可以定时执行各种脚本(比如每5分钟检查一次某个网站是否在线),然后将结果发到指定的渠道,这里就有一个发到社交媒体 Telegram 的例子。

(完)

转自阮一峰老师

补充:

Github / Gitlab Actions 中的Cron格式

该cron有五个由空格分隔的字段,每个字段代表一个时间单位。第一个数字代表分钟,第二个数字代表小时,第三个数字代表日,第四个数字代表月,第五个数字代表星期。
在这里插入图片描述
此外,该cron指定的是格林尼治时间(UTC),如果需要换算成北京时间,要在该cron的基础上增加八小时得到北京时间。

例如 0 1 * * * 表示在每天 格林尼治时间的 1:00 AM,也就是在北京时间的 9:00 AM 自动运行。

on:
  schedule:
    - cron: '0 0 * * *'

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C+ 安口木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值