新增httpget函数,修复http请求失败导致同步终止的错误

This commit is contained in:
Bigsk 2020-07-26 19:27:02 +08:00 committed by Gitee
parent b3f2626569
commit 93f01112da

View File

@ -0,0 +1,184 @@
import requests
import os
import time
import json
import sys
#------------------------------------------------------------------------#
#Part Of Load All Kinds Of Global Variables From Json File.
configopen=open(os.path.dirname(os.path.abspath(sys.argv[0])) + "/config.json", mode='r')
configjson=configopen.read()
configopen.close()
config=json.loads(configjson)
SystemName=config['systemname']
SavePath=os.path.dirname(os.path.abspath(sys.argv[0])) + "/" + config['savepath']
Version=config['version']
UserAgent={'User-Agent':config['useragent']}
Log='[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Starting the synchronizing system.\n' + '------------------------------------------------------------------------\n' + '[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Starting to specify global variables.\n' + '[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Specifying global variables successful.\n'
#------------------------------------------------------------------------#
Log=Log + '------------------------------------------------------------------------' + '\n'
#The Part Of All Kinds Of Functions.
Log=Log + '[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Starting to load all kinds of functions.' + '\n'
#Function Which Be Used To Save Logs.
def log(logvar):
global Log
Log=Log + '[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + logvar + '\n'
#Function Which Be Used To Synchronize Single File.
def download(url, filepath):
global Log
global UserAgent
log('[INFO]:The ' + SystemName + ' is synchronizing the file ' + SavePath + filepath + '.')
try:
download=requests.get(url, headers=UserAgent)
with open(SavePath + filepath,"wb") as code:
code.write(download.content)
except:
log('[ERROR]:There has a error in task of synchronizing the file ' + SavePath + filepath + '.')
else:
log('[INFO]:The file ' + SavePath + filepath + ' has been synchronized successfully.')
#Function Which Be Used To Make Sure The Dir Exists.
def make_sure_dir_exists(dirpath):
global Log
if os.path.exists(SavePath + dirpath):
log('[INFO]:The dir ' + SavePath + dirpath + ' has already existed.Nothing to do.')
else:
log('[INFO]:The dir ' + SavePath + dirpath + ' does not exist.The ' + SystemName + ' will create one.')
os.makedirs(SavePath + dirpath)
#Function Which Be Used To Both Synchronize Single File And Make Sure The Dir Exists.
def synchronize(url, filepath):
global Log
global UserAgent
dirpath= filepath[::-1].split('/', 1)[-1][::-1]
if os.path.exists(SavePath + dirpath):
log('[INFO]:The dir ' + SavePath + dirpath + ' has already existed.Nothing to do.')
else:
log('[INFO]:The dir ' + SavePath + dirpath + ' does not exist.The ' + SystemName + ' will create one.')
os.makedirs(SavePath + dirpath)
log('[INFO]:The ' + SystemName + ' is synchronizing the file ' + SavePath + filepath + '.')
try:
download=requests.get(url, headers=UserAgent)
with open(SavePath + filepath,"wb") as code:
code.write(download.content)
except:
log('[ERROR]:There has a error in task of synchronizing the file ' + SavePath + filepath + '.')
else:
log('[INFO]:The file ' + SavePath + filepath + ' has been synchronized successfully.')
#Function Which Be Used To Get HTTP Site With Requests Avoid Error.
def httpget(url):
try:
return requests.get(url=url, headers=UserAgent).text
except:
return 'error'
log('[INFO]:Loading all kinds of functions successfully.')
#------------------------------------------------------------------------#
Log=Log + '------------------------------------------------------------------------' + '\n'
log('[INFO]:Starting to get forge builds list from BMCLAPI.')
log('[INFO]:Thanks the support from bangbang93.')
#Synchronize The Last Forge Builds.
log('[INFO]:Starting synchronize the last forge builds.')
synchronize('http://bmclapi2.bangbang93.com/forge/last','forge/last/index.html')
#Synchronize The Versions List Of Minecraft Which Were Supported By Forge.
log('[INFO]:Starting synchronize the versions list of minecraft which were supported by forfge.')
synchronize('http://bmclapi2.bangbang93.com/forge/minecraft','forge/minecraft/index.html')
#Synchronize The Different Number Of Builds List Of Forge.
log('[INFO]:Starting synchronize the different number of builds list of forge.')
count=0
for i in range(0,500):
count=count+1
synchronize('http://bmclapi2.bangbang93.com/forge/list/'+str(count), 'forge/list/'+str(count)+'/index.html')
#Synchronize The Forge Builds List With Different MC Versions.
log('[INFO]:Starting synchronize the forge builds list with different mc versions.')
supportlist=httpget('http://bmclapi2.bangbang93.com/forge/minecraft')
number=supportlist.count(',')
supportlistjson=json.loads(supportlist)
count=0
for i in range(0,number):
count=count+1
version=supportlistjson[count]
synchronize('http://bmclapi2.bangbang93.com/forge/minecraft/'+version, 'forge/minecraft/'+version+'/index.html')
#Synchronize The Forge Builds With Different MC Versions With Build ID.
log('[INFO]:Starting synchronize the forge builds with different mc versions with build ID.')
count=0
for i in range(0,number):
count=count+1
version=supportlistjson[count]
buildswithversion=httpget('http://bmclapi2.bangbang93.com/forge/minecraft/'+version)
buildswithversionjson=json.loads(buildswithversion)
number_sub=buildswithversion.count('build')
count_sub=0
for i in range(0,number_sub):
count_sub=count_sub+1
countforjson=count_sub-1
buildid=buildswithversionjson[countforjson]['build']
if httpget('http://bmclapi2.bangbang93.com/forge/download/'+str(buildid))=="Not Found":
log('[ERROR]:Can not find the file which is synchronizing on BMCLAPI.This may a bug of BMCLAPI,but in most times is not a bug and that is normal.')
elif httpget('http://bmclapi2.bangbang93.com/forge/download/'+str(buildid))=="error":
log('[ERROR]:Can not get the file from BMCLAPI,this may a Internet problem or the server of BMCLAPI is dead.')
else:
synchronize('http://bmclapi2.bangbang93.com/forge/download/'+str(buildid), 'forge/download/'+str(buildid)+'.jar')
#Synchronize The Forge Builds With Different MC Versions.
log('[INFO]:Starting synchronize the forge builds with different mc versions.')
count=0
for i in range(0,number):
count=count+1
version=supportlistjson[count]
versionswithversion=httpget('http://bmclapi2.bangbang93.com/forge/minecraft/'+version)
versionswithversionjson=json.loads(versionswithversion)
number_sub=versionswithversion.count('"version"')
count_sub=0
for i in range(0,number_sub):
count_sub=count_sub+1
countforjson=count_sub-1
versionid=versionswithversionjson[countforjson]['version']
#Installer Part.
if httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-installer.jar')=="Not Found":
log('[ERROR]:Can not find the file which is synchronizing on BMCLAPI.This may a bug of BMCLAPI,but in most times is not a bug and that is normal.')
elif httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-installer.jar')=="error":
log('[ERROR]:Can not get the file from BMCLAPI,this may a Internet problem or the server of BMCLAPI is dead.')
else:
synchronize('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-installer.jar', 'forge/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-installer.jar')
#Launcher Part.
if httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-launcher.jar')=="Not Found":
log('[ERROR]:Can not find the file which is synchronizing on BMCLAPI.This may a bug of BMCLAPI,but in most times is not a bug and that is normal.')
elif httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-launcher.jar')=="error":
log('[ERROR]:Can not get the file from BMCLAPI,this may a Internet problem or the server of BMCLAPI is dead.')
else:
synchronize('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-launcher.jar', 'forge/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-launcher.jar')
#Sources Part.
if httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-sources.jar')=="Not Found":
log('[ERROR]:Can not find the file which is synchronizing on BMCLAPI.This may a bug of BMCLAPI,but in most times is not a bug and that is normal.')
elif httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-sources.jar')=="error":
log('[ERROR]:Can not get the file from BMCLAPI,this may a Internet problem or the server of BMCLAPI is dead.')
else:
synchronize('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-sources.jar', 'forge/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-sources.jar')
#Universal Part.
if httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-universal.jar')=="Not Found":
log('[ERROR]:Can not find the file which is synchronizing on BMCLAPI.This may a bug of BMCLAPI,but in most times is not a bug and that is normal.')
elif httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-universal.jar')=="error":
log('[ERROR]:Can not get the file from BMCLAPI,this may a Internet problem or the server of BMCLAPI is dead.')
else:
synchronize('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-universal.jar', 'forge/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-universal.jar')
#MDK Part.
if httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-mdk.zip')=="Not Found":
log('[ERROR]:Can not find the file which is synchronizing on BMCLAPI.This may a bug of BMCLAPI,but in most times is not a bug and that is normal.')
elif httpget('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-mdk.zip')=="error":
log('[ERROR]:Can not get the file from BMCLAPI,this may a Internet problem or the server of BMCLAPI is dead.')
else:
synchronize('http://bmclapi2.bangbang93.com/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-mdk.zip', 'forge/maven/net/minecraftforge/forge/'+version+'-'+str(versionid)+'/forge-'+version+'-'+str(versionid)+'-mdk.zip')
log('[INFO]:Synchronizing forge builds list from BMCLAPI successfully.')
#------------------------------------------------------------------------#
Log=Log + '------------------------------------------------------------------------' + '\n'
#Starting To Save Logs.
log('[INFO]:Starting to save logs.')
logwrite=open(os.path.dirname(os.path.abspath(sys.argv[0])) + '/' + config['logspath'] + 'part3-' + str(time.strftime("%Y-%m-%d-%H-%M-%S", time.localtime()) + '.txt'),mode='w')
logwrite.write(Log + '[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Save logs successfully.' + '\n' + '[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:All tasks of synchronizing have done successfully.')
logwrite.close()