博客订阅&推送
...大约 3 分钟
博客订阅&推送
参考此前github主页抓取最新更新博客文章实现(DIY Github主页):Github Action定时更新获取hexo博客信息
方案1:定时推送
构建步骤
<1>配置博客订阅(以RSS格式或者ATOM格式输出),可通过互联网访问到相关的资源文件
以vuepress-theme-hope进行参考:参考官方文档、Feed支持
# 1.安装feed插件
npm install @vuepress/plugin-feed --save-dev
// 如果提示无法安装则加入--force参数
在主题配置文件theme.ts文件中设置plugins.feed:true
然后设定以指定格式输出,此处以rss、atom为参考
plugins:{
feed:{
// atom: true,
rss: true
// json: true,
}
}
通过npm run docs:build
指令生成的rss.xml或者(atom.xml)会在.vuepress/dist
文件夹下,上传发布部署,然后通过域名访问:https://xxx.com/rss.xml、https://xxx.com/atom.xml
<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/rss.xml" # 博客订阅地址(RSS格式/Atom格式),,以逗号间隔不同的地址
<3>编辑说明文件README.md并在相应位置添加引用
<!-- BLOG-POST-LIST:START -->
<!-- BLOG-POST-LIST:END -->
方案2:监听发布事件
基于上述组件能够实现定时更新最新文章内容,如果没有实时性需求的话其实直接用该种方案足矣,可以适当增大定时刷新频率来减少误差性,但实际上这种方式相对来说不够节省资源。可以考虑设定当有新的文章更新的时候触发仓库信息自动更新。
其原理大概可以梳理为:分别创建一个发送和接收事件
发送事件用于“监听指定仓库分支变更(指定博客仓库的文章更新操作)”,其用到: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格式),,以逗号间隔不同的地址
Powered by Waline v3.1.3