写在前面

可喜可贺,多吉云终于有刷新预热的接口了,还记得 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
# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python

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 # 等待 2 分钟,单位为秒

- 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 秒。

20240419172425

创建 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 sha1
import hmac
import requests
import json
import urllib
import os

def 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) # Python 2 可以直接用 urllib.urlencode
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', # <--- 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 变量

  1. 多吉云用户中心 - 密钥管理 获取 ACCESS_KEYSECRET_KEY

  2. 在 GitHub 仓库 settings -> Secrets and variables -> Actions 里添加 ACCESS_KEYSECRET_KEY 变量

  3. 避免因权限问题导致工作流执行失败,可以设置下 Actions 读写权限

    懒得截图了,直接借用 @Mycpen 的图

    20240419174251

  4. 最后 git push 即可

结语

本文参考了 Hexo-GitHub Actions 自动刷新多吉云 CDN 缓存 并做了一些教程改动。

其它: