GitHub Action自动获取力扣每日一题


项目地址:https://github.com/topone233/LeetCode

起因

没别的,天太冷了,早上赖床不想起,手一滑打开了力扣APP,本想着先看下今天的每日一题(简单一小时、中等看一天、难题一秒钟),手机端不给看每日一题???总不能为了看眼题目就让我起床吧?

嘿嘿,写个定时器,每天早上自动发送每日一题到邮箱。

躺着把每日一题看喽!

具体实现

代码实现部分直接看这里: https://blog.csdn.net/malloc_can/article/details/113004579

讲的很详细,不再赘述了。

唯一需要修改的一点:

python 脚本中获取环境变量

import os

SCKEY = os.environ["SCKEY"]

GitHub Action

GitHub Actions 是 GitHub 的持续集成服务,于2018年10月推出。

持续集成由很多操作组成,比如抓取代码、运行测试、登录远程服务器,发布到第三方服务等等。GitHub 把这些操作就称为 actions。

很多操作在不同项目里面是类似的,完全可以共享。GitHub 注意到了这一点,想出了一个很妙的点子,允许开发者把每个操作写成独立的脚本文件,存放到代码仓库,使得其他开发者可以引用。

如果你需要某个 action,不必自己写复杂的脚本,直接引用他人写好的 action 即可,整个持续集成过程,就变成了一个 actions 的组合。这就是 GitHub Actions 最特别的地方.

上面的代码已经很简洁了,不过问题在于。。。我没有服务器啊

嘿嘿,白嫖一波GitHub Action的服务器资源。

Action的详细使用参考(三者结合着看):

基于GITHUB ACTION的定时任务,真香!

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

官方说明文档

Action的关键在于 .github/workflows 里的yaml文件(完整代码在开头给出的仓库中)。

# Controls when the action will run. 执行的触发条件
on:
  # Triggers the workflow on push or pull request events but only for the main branch push时触发
  #push:
   # branches: [ main ]
  #pull_request:
   # branches: [ main ]
  # 定时任务,每天在国际标准时间23点(北京时间早上7点)运行
  schedule:
    - cron: '0 23 * * *'


# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on 运行环境
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2
      # 安装python3.7
      - name: Set up Python 3.7
        uses: actions/setup-python@v2
        with:
          python-version: '3.7'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install requests

      - name: 'Send Email'
        # 设置两个环境变量,给python脚本使用
        env:
          # 从仓库的setting中设置两个secret,加密邮箱用户名和密码
          username: ${{ secrets.MAILUSERNAME }}
          pwd: ${{ secrets.MAILPASSWORD }}  
        run: python request.py

  TOC