DIY GitHub主页-最新博客拉取

980 阅读2分钟

「这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战

前言

image.png

构建步骤

<1>配置博客订阅(以RSS格式或者ATOM格式输出),可通过互联网访问到相关的资源文件

<2>在个人主仓库中添加workflow(.github/workflows/xxx.yml),引入下述文件配置

name: Latest blog post workflow
on:
  schedule:
    # 定时器配置
    - cron: "0 * * * *"
jobs:
  update-readme-with-blog:
    name: Update this repo's README with latest blog posts
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: gautamkrishnar/blog-post-workflow@master
        with:
          max_post_count: "5" # 获取链接数量
          feed_list: "https://xxx.com/feed.xml" # 博客订阅地址(RSS格式/Atom格式),,以逗号间隔不同的地址

<3>编辑说明文件README.md并在相应位置添加引用

<!-- BLOG-POST-LIST:START -->
<!-- BLOG-POST-LIST:END -->

​ 基于上述组件能够实现定时更新最新文章内容,如果没有实时性需求的话其实直接用该种方案足矣,可以适当增大定时刷新频率来减少误差性,但实际上这种方式相对来说不够节省资源。可以考虑设定当有新的文章更新的时候触发仓库信息自动更新。

​ 其原理大概可以梳理为:分别创建一个发送和接收事件

​ 发送事件用于“监听指定仓库分支变更(指定博客仓库的文章更新操作)”,其用到:repository_dispatch,如何创建一个repository_dispatch事件可参考官方文档Create a repository dispatch event(不同技术实现方式)

# 文章发布的仓库中定义发布事件触发curl操作发送一个事件类型为[xxType]的repository_dispatch事件
name: Tigger special repository

on:
  push:
    # 当 master 分支有变更的时候触发 workflow
    branches:
      - master
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Send repository dispatch event
        run: |
          curl -XPOST -u "${{ secrets.USERNAME}}:${{secrets.TOKEN}}" \
          -H "Accept: application/vnd.github.everest-preview+json" \
          -H "Content-Type: application/json" https://api.github.com/repos/[owner]/[repo]/dispatches \
          --data '{"event_type": "xxType"}'
          
          # 其中需要在settings的Secret中配置账号密码用于curl登录github调用api

​ 在特殊仓库自动推送的基础上定义一个接收事件

# 结合上述配置说明,将定时器概念调整为接收事件
name: Latest blog post workflow

on:
  repository_dispatch:
    # 类型可以自定义,需与发送事件匹配
    types: [xxType]
  workflow_dispatch:
  
jobs:
  update-readme-with-blog:
    name: Update this repo's README with latest blog posts
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: gautamkrishnar/blog-post-workflow@master
        with:
          max_post_count: "5" # 获取链接数量
          feed_list: "https://xxx.com/feed.xml" # 博客订阅地址(RSS格式/Atom格式),,以逗号间隔不同的地址