Skip to content

Commit

Permalink
update
Browse files Browse the repository at this point in the history
  • Loading branch information
x1jumping committed Sep 27, 2023
1 parent 396c297 commit 237a7ef
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 4 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ nodejs: 16.10.0
freecdn: 0.3.1
```
freecdn-js能提高网站稳定性,如果其中一个cdn链接不可用则启用另一个链接。博客图床使用到的cdn.jsdelivr.net不太稳定需要备用链接,所以用到了freecdn-js。但是freecdn-js对本身就在服务器端的文件不太友好(因为需要`sha256`),例如我把github作为图床而上传的图片(图片不在本地),故写了一个python脚本处理hash和生成freecdn-js所需要的配置文件。
freecdn-js能提高网站稳定性,如果其中一个cdn链接不可用则启用另一个链接。博客图床使用到的cdn.jsdelivr.net不太稳定需要备用链接,所以用到了freecdn-js。但是freecdn-js对本身就在服务器端的文件不太友好(因为需要`sha256`),例如我把github作为图床而上传的图片(图片不在本地),故写了一个`python`脚本处理hash和生成freecdn-js所需要的配置文件。

需要使用安装[freecdn-js](https://github.com/EtherDream/freecdn)。本脚本为python脚本(因为不会写gulp),需要安装python。若报错或许需要1.25.11版本的`urllib3`。
需要使用安装[freecdn-js](https://github.com/EtherDream/freecdn)。本脚本为`python`脚本(因为不会写gulp),需要安装`python`。若报错或许需要1.25.11版本的`urllib3`。

经过验证,nodejs16.10.0能运行freecdn-js,如果有安装旧版本nodejs的需要请使用nvm工具安装。
经过验证,`nodejs16.10.0`能运行freecdn-js,如果有安装旧版本nodejs的需要请使用nvm工具安装。

## 使用方法

Expand Down Expand Up @@ -103,7 +103,7 @@ freecdn-js能提高网站稳定性,如果其中一个cdn链接不可用则启

## 脚本运行逻辑

脚本会先判断`urls.txt`(或`.md`文件)中的url是否在数据库中(`freecdn`使用`sqlite3`,位置在`~/.freecdn/custom.db`,详见[freecdn db](https://github.com/EtherDream/freecdn/tree/master/docs/cli#import);同时`python`也内置对应的库)中,如果已经存在则直接写入到新的`.conf`,从而节省流量和时间。
脚本会先判断`urls.txt`(或`.md`文件)中的url是否在数据库中(`freecdn`使用`sqlite3`,位置在`~/.freecdn/custom.db`,详见[freecdn db](https://github.com/EtherDream/freecdn/tree/master/docs/cli#import);同时`python`也内置对应的库;不建议使用freecdn自带的`db`命令写入和读取数据库,运行速度非常低)中,如果已经存在则直接写入到新的`.conf`,从而节省流量和时间。

如果url不在数据库中,则判断本地是否存储了`urls.txt`或`.md`(`import_to_db_with_hexo_blog.py`无需`urls.txt`,脚本内自动处理)中的文件,如果没有则下载文件。如果有则计算`hash`并写入`.conf`(或`pic.conf`)。

Expand Down
31 changes: 31 additions & 0 deletions generate_external_manifest_file.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import os
import sys,base64,hashlib
from import_to_db_with_urls_txt import cdn_list

'''
从freecdn-manifest.txt中生成manifest-full.txt和用于引入外部manifest的freecdn-manifest.txt
'''
def CalcFileSha256_with_base64(filname):
''' calculate file sha256 '''
with open(filname, "rb") as f:
sha256obj = hashlib.sha256()
sha256obj.update(f.read())
hash_value = sha256obj.digest()
return base64.b64encode(hash_value).decode()

def main():
os.chdir(sys.path[0]) # os.chdir(sys.path[0])把当前py文件所在路径设置为当前运行路径.
with open(os.path.join('./public', 'freecdn-manifest.txt'), 'w', encoding='utf8') as f:
hash256 = CalcFileSha256_with_base64(
os.path.join('./public', 'manifest-full.txt'))
f.write('@include\n\t/manifest-full.txt\n@global\n\topen_timeout=0\n/manifest-full.txt')
for cdn in cdn_list:
if not cdn == 'https://raw.githubusercontent.com/':
f.write(f'\n\t{cdn}xingpingcn/xingpingcn.github.io@main/manifest-full.txt')
else:
f.write(f'\n\t{cdn}xingpingcn/xingpingcn.github.io/main/manifest-full.txt')
# f.write(f'''@include\n\t/manifest-full.txt\n@global\n\topen_timeout=0\n/manifest-full.txt\n\thttps://jsd.cdn.zzko.cn/gh/xingpingcn/xingpingcn.github.io@main/manifest-full.txt\n\thttps://cdn.jsdelivr.us/gh/xingpingcn/xingpingcn.github.io@main/manifest-full.txt\n\thttps://cdn.jsdelivr.ren/gh/xingpingcn/xingpingcn.github.io@main/manifest-full.txt\n\thttps://cdn.jsdelivr.net/gh/xingpingcn/xingpingcn.github.io@main/manifest-full.txt\n\thash={hash256}''')
f.write(f'\n\thash={hash256}')
print('manifest_file generaeted.')
if __name__ == '__main__':
main()
2 changes: 2 additions & 0 deletions import_to_db_with_urls_txt.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@

class main():
def __init__(self, name_of_conf_to_write) -> None:
if not os.path.exists(f'{dir_for_custom_conf}'):
os.makedirs(f'{dir_for_custom_conf}')
self.name_of_conf_to_writ = name_of_conf_to_write
self.pool = ThreadPoolExecutor(32)
self.lock = threading.Lock()
Expand Down

0 comments on commit 237a7ef

Please sign in to comment.