梨尽兴 | Li's Blog

Back

an image targetting my articlean image targetting my article
机器人
Li's AI Summary
Li's AI
文章介绍了自动化友链检测的流程,包括创建check-links.ts文件、配置相关参数以及实现友链状态检测。同时,还提到了GitHub Actions中的Friend Links Check功能,可以每天固定时间运行或在links.json更新时自动运行。
本摘要由AI生成,仅供参考,内容准确性请以原文为准

前言#

最近放假闲着没事干,抽了点时间完善了下友链方面的检测,现在可以更清楚地看到朋友们的 站点状态 了!不过还有点不足, 只检测了状态,并没有做到通知方面的功能,实现方式也比较潦草,后续会不断完善滴!

流程#

简单画了个运行的流程图😋

check-links

引入#

check-links.ts文件#

创建 scripts/check-links.ts 文件并写入以下内容:

相关配置说明

配置项默认值说明
CHECK_TIMEOUT15000单个链接检测的超时时间,超过该时间视为请求失败
PLimit_NUM5并发检测的最大数量,用于限制同时进行的请求数
MAX_RETRIES3链接检测失败后的最大重试次数
RETRY_DELAY1000每次重试之间的等待时间
SKIP_CHECK_NAMES['']跳过检测的站点名称列表,名称匹配时将不会进行可用性检测

跳过检测的站点名称列表也支持在后续的 GitHub Actions 变量中进行控制(可同时存在)[填写格式:友链名称1,友链名称2]

check-links.yml文件#

创建 .github/workflows/check-links.yml 并写入以下内容:

后续的步骤我采用上传至存储桶的方式而非git提交回仓库,主要是怕污染git的提交信息(而且运行一次脚本,本地仓库就要再拉取一次感觉挺麻烦),你也可以改成你想要的方式,或者把git提交这部分直接写进前面的 check-links.ts 脚本

check-links.yml
      - name: Upload link.json to bucket
        run: |
          aws s3api put-object \
            --bucket ${{ secrets.BITIFUL_BUCKET_NAME }} \
            --key link.json \
            --body public/links.json \
            --endpoint-url https://${{ secrets.BITIFUL_S3_ENDPOINT }} \
            --region ${{ secrets.BITIFUL_REGION }}
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.BITIFUL_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.BITIFUL_SECRET_ACCESS_KEY }}
yml

这里的存储桶我选择的是 缤纷云 ,相关变量配置在 GitHub Actions 的 secrets 里,变量获取在 控制台页面,对应如下

Secrets 名称含义说明示例值
BITIFUL_BUCKET_NAME缤纷云对象存储桶名称(Bucket Name)my-static-assets
BITIFUL_S3_ENDPOINT缤纷云 S3 兼容 API Endpointhttps://s3.bitiful.net
BITIFUL_REGION存储桶所在区域(Region)cn-east-1
BITIFUL_ACCESS_KEY_ID缤纷云访问密钥 ID(Access Key ID)AKIAxxxxxxxxxxxx
BITIFUL_SECRET_ACCESS_KEY缤纷云访问密钥 Secret(Secret Access Key)xxxxxxxxxxxxxxxxxxxx

由于我给博客进行了国内外分流,国外托管到了CF上,加上前面并没有选择git提交的方式,所以检测完友链后需要让其重新构建一遍,以同步进度。

check-links.yml
  trigger-pages-build:
    name: Trigger Cloudflare Pages build
    needs: check-links-and-update
    runs-on: ubuntu-latest

    if: ${{ needs.check-links-and-update.result == 'success' }}

    steps:
      - name: Update Cloudflare Pages
        run: |
            curl -X POST \
            "https://api.cloudflare.com/client/v4/accounts/${{ secrets.CF_ACCOUNT_ID }}/pages/projects/${{ secrets.CF_PROJECT_NAME }}/deployments" \
            -H "Authorization: Bearer ${{ secrets.CF_API_TOKEN }}" \
            -H "Content-Type: application/json" \
            -d '{}'
yml

所需变量对应如下:

Secrets 名称含义说明示例值
CF_ACCOUNT_IDCloudflare 账户 ID(Account Identifier)a1b2c3d4e5f6g7h8i9j0
CF_PROJECT_NAMECloudflare Pages 项目名称(Project Name)my-pages-site
CF_API_TOKENCloudflare API Token(用于 Pages / API 操作)cf_api_token_xxxxxxxxxxxx

CF_API_TOKE 只需 page 的编辑权限就可以了

如果你的国内站点也是通过 GitHub Actions 来构建拉取的话,需在相关工作流文件加入对 check-links.yml 完成状态的检测 纯静态站点就这点麻烦😡 或许是我给工作复杂化了🤔?

deploy.yml
on:
  push:
    branches:
      - main
    paths-ignore:
      - public/link.json

  workflow_dispatch:
  
  workflow_run:
    workflows: ["🔗 Friend Links Check"]
    types:
      - completed
yml
完整版 check-links.yml 文件

前端渲染#

由于新的 link.json 文件放在了存储桶里,友链的数据需要改为从远端读取

需修改 src/components/links/FriendList.astro 文件如下:

使用#

在 GitHub Actions 中找到 🔗 Friend Links Check ,点击 Run workflow 并运行,后续会在每天 固定时间 运行,或者 links.json 更新时自动运行❤️

自动化友链检测
https://blog.ljx.icu/blog/auto-check-links
Author Ljx
Published at December 31, 2025
Comment seems to stuck. Try to refresh?✨