多吉云CDN自动刷新方案

点击查看更新记录

更新记录

2024-6-7: 测试版CDN刷新方案1.0

依样画葫芦模仿空梦大佬书写更新脚本

  1. 目前本方案方法比较折中,且有点笨,还请各位大佬指点
  2. 由于目前不知道为什么,public无法输出.github文件夹,所以只能放在根目录
  3. 参考了空梦大佬的教程,https://kmar.top/posts/a427ed12/
  4. 感谢Dorrhound的帮助

前言

  1. 思路是在博客根目录创建一个RefreshCDN.py为刷新脚本
  2. 使用github的action去运行这个刷新脚本
  3. 教程目前仅适用于多吉云,不过方法应该都适用
  4. 如果你使用的是别的 CDN,则需要自行查阅 API 文档,然后编写相应的代码

教程正文

  1. 在开始前,需要客官您已完成HEXO自动部署,如果未完成,参考点我前往教程
  2. 部署的仓库为源码仓库,并为私人仓库,请勿设为公开!!!以免暴露key
  1. [根目录]创建一个文件名为RefreshCDN.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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    from hashlib import sha1
    import hmac
    import requests
    import json
    import urllib
    import os

    def dogecloud_api(api_path, data={}, json_mode=False):
    """
    调用多吉云API

    :param api_path: 调用的 API 接口地址,包含 URL 请求参数 QueryString,例如:/console/vfetch/add.json?url=xxx&a=1&b=2
    :param data: POST 的数据,字典,例如 {'a': 1, 'b': 2},传递此参数表示不是 GET 请求而是 POST 请求
    :param json_mode: 数据 data 是否以 JSON 格式请求,默认为 false 则使用表单形式(a=1&b=2)

    :type api_path: string
    :type data: dict
    :type json_mode bool

    :return dict: 返回的数据
    """

    # 这里替换为你的多吉云永久 AccessKey 和 SecretKey,可在用户中心 - 密钥管理中查看
    # 请勿在客户端暴露 AccessKey 和 SecretKey,否则恶意用户将获得账号完全控制权
    access_key = '你的AccessKey'
    secret_key = '你的SecretKey'

    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://xxxxx/'# xxx替换为你的博客域名
    ]

    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']) # 失败

    将其中的access_key = '你的AccessKey',secret_key = '你的SecretKey',替换为自己的key
    'https://xxxxx/'xxxxx替换为你的博客域名

  2. 创建目录[根目录]\.github\workflows已经有的可以略过
    workflows下新建RefreshCDN.yml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    name: Refresh CDN

    on:
    push:
    branches:
    - master

    jobs:
    refresh-cdn:
    runs-on: ubuntu-latest
    steps:
    - name: 安装 Node
    uses: actions/checkout@v2
    - name: 安装 python
    uses: actions/setup-python@v2
    with:
    python-version: '3.x'
    - name: 安装依赖
    run: pip install requests
    - name: 等待源站部署
    run: sleep 4m
    - name: 刷新CDN
    run: python RefreshCDN.py

    这里用了个笨办法,等待4分钟后进行刷新
    创建完后直接提交上去应该就行了