Blog/utils.py
2023-05-20 18:26:25 +08:00

176 lines
5.2 KiB
Python

import sys
import os
import requests
import json
import getopt
import re
import random
from datetime import datetime
def fontChar():
path = os.getcwd()
for root, dirs, files in os.walk(path + '/source'):
for name in files :
filelist.append(os.path.join(root, name))
strset = set([])
for filename in filelist:
if filename.endswith('.md'):
if "_posts/" in filename:
post = filename.split("_posts/")[-1]
postlist.append(post[:-3] + '/')
with open(filename, "r", encoding='utf-8') as f:
for subset in f.read():
strset.add(subset)
str_ = ''
a = 0
with open('strdb.txt', "w") as f:
for i in list(strset):
str_ += i
a += 1
print('%d Characters in all files.'%a)
print(str_)
f.write(str_)
def addDiscussion():
currentYear = str(datetime.now().year)
repo_id="MDEwOlJlcG9zaXRvcnkyMjg3NDM0MjQ="
category_id="DIC_kwDODaJZAM4CA7bf"
DISCUSSIONS_TOKEN=os.environ.get('DISCUSSIONS_TOKEN')
header = {
"Authorization": f"Bearer {DISCUSSIONS_TOKEN}"
}
data = {
'query': """query{repository(owner:"southfox-d",name:"southfox-d.github.io"){
id discussions(first:100, categoryId: "DIC_kwDODaJZAM4CA7bf"){
nodes{
title
}
}
}
}"""
}
url = 'https://api.github.com/graphql'
r = requests.post(url, headers=header, data=json.dumps(data))
if r.status_code == 200:
discussions = r.json()
discussions = discussions["data"]["repository"]["discussions"]["nodes"]
discu_list = []
for i in discussions:
discu_list.append(i["title"])
for post in postlist:
if currentYear not in post:
continue
if post not in discu_list:
data = {
'query': """mutation{
createDiscussion(input: {repositoryId: "%s", categoryId: "%s", body: "%s", title: "%s"}) {
discussion {
id
}
}
}""" % (repo_id, category_id, 'https://blog.southfox.me/' + post, post)
}
r = requests.post(url, headers=header, data=json.dumps(data))
if r.status_code == 200:
print(f"==========\n初始化对应讨论! {post}\n==========")
else:
print("错误!")
def backupImg():
path = os.getcwd()
for root, dirs, files in os.walk(path + '/source/_posts'):
for name in files :
filelist.append(os.path.join(root, name))
nowImgList = []
for filename in filelist:
if filename.endswith('.md'):
if "_posts/" in filename:
post = filename.split("_posts/")[-1]
with open(filename, "r", encoding='utf-8') as f:
mdText = f.read()
result = re.findall('!\[(.*?)\]\((.*?)\)', mdText)
for i in range(len(result)):
#img_quote = result[i][0]
img_url = result[i][1]
if 'ipfs' in img_url:
urlname = img_url.split(u"/")
img_url = str(urlname[-1])
nowImgList.append(img_url)
downLoadList = list(set(nowImgList).difference((set(imgJson["img"]))))
if downLoadList != '':
# os.environ['NEW_IMG']="True"
if os.path.exists('./newimg'):
pass
else:
os.makedirs('./newimg')
nowImgJson = {}
nowImgJson["img"] = nowImgList
with open('./newimg/imgList.json', 'w', encoding='utf-8') as f:
json.dump(nowImgJson, f)
downloadImg(downLoadList)
def downloadImg(imgList):
ipfs_gateWay = ['https://cf-ipfs.com/ipfs/', 'https://ipfs.io/ipfs/', 'https://dweb.link/ipfs/']
for img_url in imgList:
img_name = img_url
if img_url == "":
continue
# download img
if 'https' not in img_url:
img_url = random.choice(ipfs_gateWay) + img_name
response = requests.get(img_url)
print('Download ' + img_url + '✔️')
# write to file
f_img = open('./newimg/' + img_name, 'wb')
f_img.write(response.content)
f_img.close()
if __name__ == '__main__':
args = sys.argv[1:]
try:
opts, arg = getopt.getopt(args, "db", ["deploy", "backupimg"])
except getopt.GetoptError:
print('参数解析错误')
for opt, arg in opts:
if opt in ('-d', '--deploy'):
filelist = []
postlist = []
fontChar()
addDiscussion()
elif opt in ('-b', '--backupimg'):
filelist = []
if os.path.exists('./imgList.json'):
imgJson = []
with open('./imgList.json', 'r', encoding='utf-8') as f:
imgJson = json.load(f)
else:
imgJson = {}
imgJson["img"] = []
backupImg()
else:
print('''参数错误''')