写在前面 可喜可贺,多吉云终于有刷新预热的接口了,还记得 21 年的时候,当时我还问过客服,刷新预热有没有接口可以调用?不然每次更新部落格的时候,都要手动通过多吉云控制台刷新部落格的缓存,然而客服回的没有,印象中好像是说后面再完善,在博主消失了两年后,多吉云终于有接口啦!
OK,话不多说
前提要求:
Hexo 是通过 GitHub Actions 自动部署的,如果还没使用到 GitHub Actions 自动部署的可以看下站内 GitHub Actions 自动部署 Hexo ,也可以 Google 看看教程
创建 yml 文件 在 BlogRoot/.github/workflows
目录下新建 refresh-dogecloud.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 name: Refresh DogeCloud CDN on: push: branches: - master workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: szenius/set-timezone@v1.0 with: timezoneLinux: "Asia/Shanghai" - name: Set up Python 3.10 uses: actions/setup-python@v3 with: python-version: "3.10" - name: Wait for 2 minutes run: sleep 120 - name: Run refresh script env: ACCESS_KEY: ${{ secrets.ACCESS_KEY }} SECRET_KEY: ${{ secrets.SECRET_KEY }} run: | pip install requests python refresh-dogecloud.py
上面的等待意思是,等 GitHub Actions 部署好博客的静态资源后再执行刷新多吉云缓存,怎么看自己需要多少分钟呢?
打开你博客源码 GitHub Actions,查看到部署花费的时间,可以看到我的基本都是在一分半左右,此时,我的 refresh-dogecloud.yml
里就是等待两分钟,注意是秒 为单位,2 * 60 = 120
,所以我的就是 120 秒。
创建 PY 脚本 接下来创建一个脚本来调用多吉云接口。
在博客的根目录下创建 refresh-dogecloud.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 from hashlib import sha1import hmacimport requestsimport jsonimport urllibimport osdef dogecloud_api (api_path, data={}, json_mode=False ): access_key = os.environ["ACCESS_KEY" ] secret_key = os.environ["SECRET_KEY" ] body = '' mime = '' if json_mode: body = json.dumps(data) mime = 'application/json' else : body = urllib.parse.urlencode(data) mime = 'application/x-www-form-urlencoded' sign_str = api_path + "\n" + body signed_data = hmac.new(secret_key.encode('utf-8' ), sign_str.encode('utf-8' ), sha1) sign = signed_data.digest().hex () authorization = 'TOKEN ' + access_key + ':' + sign response = requests.post('https://api.dogecloud.com' + api_path, data=body, headers = { 'Authorization' : authorization, 'Content-Type' : mime }) return response.json() url_list = [ "https://blog.imzjw.cn/" , ] api = dogecloud_api('/cdn/refresh/add.json' , { 'rtype' : 'path' , 'urls' : json.dumps(url_list) }) if api['code' ] == 200 : print (api['data' ]['task_id' ]) else : print ("api failed: " + api['msg' ])
这段代码采用的是目录刷新的接口,如果你想调用 URL 刷新接口也很简单
只要把 path
改成 url
即可
1 2 3 4 5 6 7 8 api = dogecloud_api('/cdn/refresh/add.json' , { 'rtype' : 'url' , 'urls' : json.dumps(url_list) }) if api['code' ] == 200 : print (api['data' ]['task_id' ]) else : print ("api failed: " + api['msg' ])
最后记得修改 url_list
里的链接,该 url_list
是个数组集合,也就是说它可以包含多个链接。
1 2 3 4 5 url_list = [ "https://blog.imzjw.cn/" , "https://blog.imzjw.cn/doge.json" , "https://cdn.imzjw.cn/" , ]
新增 Secrets 变量 在多吉云用户中心 - 密钥管理 获取 ACCESS_KEY
、SECRET_KEY
在 GitHub 仓库 settings -> Secrets and variables -> Actions
里添加 ACCESS_KEY
、SECRET_KEY
变量
避免因权限问题导致工作流执行失败,可以设置下 Actions 读写权限
懒得截图了,直接借用 @Mycpen 的图
最后 git push
即可
结语 本文参考了 Hexo-GitHub Actions 自动刷新多吉云 CDN 缓存 并做了一些教程改动。
其它: