This commit is contained in:
Bigsk 2020-03-25 10:43:38 +08:00 committed by Gitee
parent 0ba3928fa9
commit 22c47c75d6

315
synchronize/synchronize.py Normal file
View File

@ -0,0 +1,315 @@
import requests
import os
import time
import json
print('[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Starting the synchronizing system.')
#------------------------------------------------------------------------#
print('------------------------------------------------------------------------')
#Part Of All Kinds Of Global Variables
print('[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Starting to specify global variables.')
SystemName='GeMC API Synchronize Tool'
SavePath='gemcapi/'
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'
print('[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Specifying global variables successful.')
#------------------------------------------------------------------------#
print('------------------------------------------------------------------------')
Log=Log + '------------------------------------------------------------------------' + '\n'
#The Part Of All Kinds Of Modules.
print('[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Starting to load all kinds of modules.')
Log=Log + '[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + '[INFO]:Starting to load all kinds of modules.' + '\n'
#Module Which Be Used To Print And Save Logs.
def log(logvar):
global Log
print('[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + logvar)
Log=Log + '[' + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + ']' + logvar + '\n'
#Module Which Be Used To Synchronize Single File.
def synchronize(url, filepath):
global Log
log('[INFO]:The ' + SystemName + ' is synchronizing the file ' + SavePath + filepath + '.')
try:
synchronize=requests.get(url)
with open(SavePath + filepath,"wb") as code:
code.write(synchronize.content)
except:
log('[ERROR]:There has a error in task of synchronizing the file ' + SavePath + filepath + '.Don\'t report this to Ghink Network Studio.This is not a bug.')
else:
log('[INFO]:The file ' + SavePath + filepath + ' has been synchronized successfully.')
#Module Which Be Used To Determine Whether 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)
#Module Which Be Used To Print Dividing Line.
def dividingline():
global Log
print('------------------------------------------------------------------------')
Log=Log + '------------------------------------------------------------------------' + '\n'
log('[INFO]:Loading all kinds of modules successfully.')
#------------------------------------------------------------------------#
dividingline()
#Save JSON In Global Variables
#Save MC Versions List Json In Global Variables
log('[INFO]:Starting to get the json of MC versions list.')
mcversionsjson=requests.get(url='http://launchermeta.mojang.com/mc/game/version_manifest.json')
log('[INFO]:Get the json of MC versions successfully.')
#Save Liteloader Versions List Json In Global Variables
log('[INFO]:Starting to get the json of Liteloader Versions list.')
liteloaderversionsjson=requests.get(url='http://dl.liteloader.com/versions/versions.json')
log('[INFO]:Get the json of Liteloader Versions successfully.')
#Save authlib-injector List Json In Global Variables
authlibinjectorbuildsjson=requests.get(url='http://authlib-injector.yushi.moe/index.json')
log('[INFO]:Get the json of authlib-injector successfully.')
#------------------------------------------------------------------------#
dividingline()
#The Part of Determining Whether The Dir Exists.
#Determining Whether The Log Dir Exists.
log('[INFO]:Starting to determine whether the log dir exists.')
dirpath='log'
if os.path.exists(dirpath):
log('[INFO]:The dir ' + dirpath + ' has already existed.Nothing to do.')
else:
log('[INFO]:The dir ' + dirpath + ' does not exist.The ' + SystemName + ' will create one.')
os.makedirs(dirpath)
log('[INFO]:Determining whether the log dir exists successfully.')
log('[INFO]:Starting to determine whether all of dirs exists.')
#Determining Whether The MC Versions Dir Exists.
log('[INFO]:Starting to determine whether the MC versions dir exists.')
make_sure_dir_exists('mojang/launchermeta/mc/game')
log('[INFO]:Determining whether the MC versions dir exists successfully.')
#Determining Whether The Liteloader Versions Dir Exists.
log('[INFO]:Starting to determine whether the Liteloader versions dir exists.')
make_sure_dir_exists('liteloader/dl/versions')
log('[INFO]:Determining whether the Liteloader versions dir exists successfully.')
#Determining Whether The authlib-injector Builds Dir Exists.
log('[INFO]:Starting to determine whether the authlib-injector builds dir exists.')
make_sure_dir_exists('yushi/authlib-injector/artifact')
log('[INFO]:Determining whether the authlib-injector builds dir exists successfully.')
log('[INFO]:Determining whether all of dirs exists successfully.')
#------------------------------------------------------------------------#
dividingline()
#The Part of Synchronizing Single Files.
log('[INFO]:Starting to synchronize single files.')
#Synchronizing The Minecraft Versions List File.
log('[INFO]:Starting to synchronize MC versions files.')
synchronize('http://launchermeta.mojang.com/mc/game/version_manifest.json', 'mojang/launchermeta/mc/game/version_manifest.json')
log('[INFO]:Synchronizing MC versions files successfully.')
#Synchronizing The Liteloader Versions List File.
log('[INFO]:Starting to synchronize Liteloader versions files.')
synchronize('http://dl.liteloader.com/versions/versions.json', 'liteloader/dl/versions/versions.json')
log('[INFO]:Synchronizing Liteloader versions files successfully.')
#Synchronizing The authlib-injector Builds List File.
log('[INFO]:Starting to synchronize authlib-injector builds files.')
synchronize('http://authlib-injector.yushi.moe/index.json', 'yushi/authlib-injector/index.json')
log('[INFO]:Synchronizing authlib-injector builds files successfully.')
#------------------------------------------------------------------------#
dividingline()
#authlib-injector Builds Synchronizing Part.
log('[INFO]:Starting to synchronize all of authlib-injector builds.')
log('[INFO]:Starting to synchronize the latest authlib-injector builds.')
synchronize('http://authlib-injector.yushi.moe/artifact/latest.json', 'yushi/authlib-injector/artifact/latest.json')
log('[INFO]:Synchronizing the latest authlib-injector builds successfully.')
log('[INFO]:Starting to synchronize the list of authlib-injector builds.')
synchronize('http://authlib-injector.yushi.moe/artifacts.json', 'yushi/authlib-injector/artifacts.json')
log('[INFO]:Synchronizing the list of authlib-injector builds successfully.')
log('[INFO]:Starting to get the list json of builds.')
try:
authlibinjectorbuildsjson=requests.get(url='https://authlib-injector.yushi.moe/artifacts.json')
authlibinjectorbuildstext=authlibinjectorbuildsjson.text
except:
log('[ERROR]:There has a error in task of synchronizing files in list json of builds.Don\'t report this to Ghink Network Studio.This is not a bug.')
else:
log('[INFO]:Get the list json of builds successfully.')
log('[INFO]:Starting to synchronize jsons of old builds.')
log('[INFO]:Starting to get list json of builds.')
authlibinjectorbuildstextjson = eval(authlibinjectorbuildstext, type('Dummy', (dict,), dict(__getitem__=lambda s,n:n))())
authlibinjectorbuildsnumber=authlibinjectorbuildstextjson['latest_build_number']
log('[INFO]:Geting list json of builds successfully.')
log('[INFO]:Starting to count how many authlib-injector builds in total.')
log('[INFO]:There has ' + str(authlibinjectorbuildsnumber) + ' authlib-injector builds in total .')
log('[INFO]:Counting how many how many authlib-injector builds in total successfully.')
log('[INFO]:Start to synchronize jsons of other builds.')
whiletimes=0#Set Var whiletimes To Avoid Error.
while(whiletimes < authlibinjectorbuildsnumber):
whiletimes=whiletimes + 1
synchronize('http://authlib-injector.yushi.moe/artifact/' + str(whiletimes) + '.json', 'yushi/authlib-injector/artifact/' + str(whiletimes) + '.json')
log('[INFO]:Synchronizing jsons of other builds successfully.')
#------------------------------------------------------------------------#
dividingline()
#MC Versions Synchronizing Part.
log('[INFO]:Starting to synchronize all of MC versions.')
log('[INFO]:Starting to count how many MC versions in total.')
#Count How Many MC Versions in total.
mcversionsjsontext=mcversionsjson.text
mcversionsnumber=mcversionsjsontext.count('"url":')
log('[INFO]:There has ' + str(mcversionsnumber) + ' MC versions in total .')
log('[INFO]:Counting how many MC versions in total successfully.')
#Starting To Synchronize More Files And Dirs.
#Auto Synchronize Files And Dirs on https://launchermeta.mojang.com/.
log('[INFO]:Starting to synchronize files and dirs on https://launchermeta.mojang.com/.')
whiletimes=0#Set Var whiletimes To Avoid Error.
while(whiletimes < mcversionsnumber):
#Count While Times.
whiletimes=whiletimes + 1
#Read Json Of MC Versions List.
downloadurlload=json.loads(mcversionsjsontext)
whiletimesload=whiletimes - 1
onlineurl=downloadurlload['versions'][whiletimesload]['url']
onlineurlwithouthttps=onlineurl.replace('https://', 'http://')#Avoid Https Connetion Errors
fileurl='mojang/launchermeta/' + onlineurl.replace('https://launchermeta.mojang.com/','')
filetosync=fileurl[::-1].split('/', 1)[-1][::-1]
#Synchronize.
make_sure_dir_exists(filetosync)
synchronize(onlineurlwithouthttps, fileurl)
log('[INFO]:Synchronizing files and dirs on https://launchermeta.mojang.com/ successfully.')
#Auto Synchronize Files And Dirs on https://libraries.minecraft.net/.
log('[INFO]:Starting to synchronize files and dirs on https://libraries.minecraft.net/.')
#Part Of 'downloads'.
whiletimes=0#Set Var whiletimes To Avoid Error.
while(whiletimes < mcversionsnumber):
#Count While Times.
whiletimes=whiletimes + 1
#Read Json Of MC Versions List.
downloadurlload=json.loads(mcversionsjsontext)
whiletimesload=whiletimes - 1
onlineurl=downloadurlload['versions'][whiletimesload]['url']
onlineurlwithouthttps=onlineurl.replace('https://', 'http://')#Avoid Https Connetion Errors
log('[INFO]:Starting to get the json of MC libraries ' + onlineurl +' list.')
#Save MC Libraries Json In Global Variables
try:#Avoid Http/Httos Connection Errors Making Whole Synchronize Stop.
mclibrariesjson=requests.get(url=onlineurlwithouthttps)
except:
log('[ERROR]:There has a error in task of getting json of MC libraries ' + onlineurl + '.Don\'t report this to Ghink Network Studio.This is not a bug.')
else:
log('[INFO]:Get json of MC libraries ' + onlineurl + ' successfully.')
#Read Json Of MC Libraries.
mclibrariesload=json.loads(mclibrariesjson.text)
#Synchronize Files In "downloads".
log('[INFO]:Starting to synchronize files in ”downloads".')
try:#Avoid Http/Httos Connection Errors Or Synchronize Module Download Failed Errors Making Whole Synchronize Stop.
#Synchronize Files In "downloads".
onlineurl2=mclibrariesload['downloads']['client']['url']
fileurl2='mojang/launcher/' + onlineurl2.replace('https://launcher.mojang.com/','')
filetosync2=fileurl2[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync2)
synchronize(onlineurl2, fileurl2)
onlineurl2=mclibrariesload['downloads']['client_mappings']['url']
fileurl2='mojang/launcher/' + onlineurl2.replace('https://launcher.mojang.com/','')
filetosync2=fileurl2[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync2)
synchronize(onlineurl2, fileurl2)
onlineurl2=mclibrariesload['downloads']['server']['url']
fileurl2='mojang/launcher/' + onlineurl2.replace('https://launcher.mojang.com/','')
filetosync2=fileurl2[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync2)
synchronize(onlineurl2, fileurl2)
onlineurl2=mclibrariesload['downloads']['server_mappings']['url']
fileurl2='mojang/launcher/' + onlineurl2.replace('https://launcher.mojang.com/','')
filetosync2=fileurl2[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync2)
synchronize(onlineurl2, fileurl2)
#Synchronize Files In "loggin".
onlineurl2=mclibrariesload['loggin']['client']['file']['url']
fileurl2='mojang/launcher/' + onlineurl2.replace('https://launcher.mojang.com/','')
filetosync2=fileurl2[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync2)
synchronize(onlineurl2, fileurl2)
except:
log('[ERROR]:There has a error in task of synchronizing files in "downloads" or "loggin".Don\'t report this to Ghink Network Studio.This is not a bug.')
else:
log('[INFO]:Synchronizing files in "downloads" successfully.')
log('[INFO]:Starting to count how many MC libraries files in ' + onlineurl + ' in total.')
#Count How Many MC Libraries Files in total.
mclibrariesjsontext=mclibrariesjson.text
mclibrariesnumber=mclibrariesjsontext.count('"url":') - 6
log('[INFO]:There has ' + str(mclibrariesnumber) + ' MC libraries files in ' + onlineurl + ' in total.')
log('[INFO]:Counting how many MC libraries files in ' + onlineurl + ' in total successfully.')
whiletimes3=0#Set Var whiletimes To Avoid Error.
while(whiletimes3 < mclibrariesnumber):
#Count While Times.
whiletimes3=whiletimes3 + 1
whiletimesload3=whiletimes3 - 1
#Synchronize Files In "libraries".
log('[INFO]:Starting to synchronize Files In "libraries".')
try:#Avoid Http/Httos Connection Errors Or Synchronize Module Download Failed Errors Making Whole Synchronize Stop.
#Synchronize Files In "libraries/.../downloads/artifact".
onlineurl3=mclibrariesload['libraries'][whiletimesload3]['downloads']['artifact']['url']
onlineurlwithouthttps3=onlineurl3.replace('https://', 'http://')
fileurl3='mojang/libraries/' + onlineurl3.replace('https://libraries.minecraft.net/','')
filetosync3=fileurl3[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync3)
synchronize(onlineurlwithouthttps3, fileurl3)
#Synchronize Files In "libraries/.../downloads/classifiers/javadoc".
onlineurl3=mclibrariesload['libraries'][whiletimesload3]['downloads']['classifiers']['javadoc']['url']
onlineurlwithouthttps3=onlineurl3.replace('https://', 'http://')
fileurl3='mojang/libraries/' + onlineurl3.replace('https://libraries.minecraft.net/','')
filetosync3=fileurl3[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync3)
synchronize(onlineurlwithouthttps3, fileurl3)
#Synchronize Files In "libraries/.../downloads/classifiers/natives-linux".
onlineurl3=mclibrariesload['libraries'][whiletimesload3]['downloads']['classifiers']['natives-linux']['url']
onlineurlwithouthttps3=onlineurl3.replace('https://', 'http://')
fileurl3='mojang/libraries/' + onlineurl3.replace('https://libraries.minecraft.net/','')
filetosync3=fileurl3[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync3)
synchronize(onlineurlwithouthttps3, fileurl3)
#Synchronize Files In "libraries/.../downloads/classifiers/natives-macos".
onlineurl3=mclibrariesload['libraries'][whiletimesload3]['downloads']['classifiers']['natives-macos']['url']
onlineurlwithouthttps3=onlineurl3.replace('https://', 'http://')
fileurl3='mojang/libraries/' + onlineurl3.replace('https://libraries.minecraft.net/','')
filetosync3=fileurl3[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync3)
synchronize(onlineurlwithouthttps3, fileurl3)
#Synchronize Files In "libraries/.../downloads/classifiers/natives-windows".
onlineurl3=mclibrariesload['libraries'][whiletimesload3]['downloads']['classifiers']['natives-windows']['url']
onlineurlwithouthttps3=onlineurl3.replace('https://', 'http://')
fileurl3='mojang/libraries/' + onlineurl3.replace('https://libraries.minecraft.net/','')
filetosync3=fileurl3[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync3)
synchronize(onlineurlwithouthttps3, fileurl3)
#Synchronize Files In "libraries/.../downloads/artifact/classifiers/sources".
onlineurl3=mclibrariesload['libraries'][whiletimesload3]['downloads']['classifiers']['sources']['url']
onlineurlwithouthttps3=onlineurl3.replace('https://', 'http://')
fileurl3='mojang/libraries/' + onlineurl3.replace('https://libraries.minecraft.net/','')
filetosync3=fileurl3[::-1].split('/', 1)[-1][::-1]
make_sure_dir_exists(filetosync3)
synchronize(onlineurlwithouthttps3, fileurl3)
except:
log('[ERROR]:There has a error in task of synchronizing files in ”libraries".Don\'t report this to Ghink Network Studio.This is not a bug.')
else:
log('[INFO]:Synchronizing files in "libraries" successfully.')
log('[INFO]:Synchronizing files and dirs on https://libraries.minecraft.net/ successfully.')
log('[INFO]:Synchronizing all of MC Versions successfully.')
#------------------------------------------------------------------------#
dividingline()
#Starting To Save Logs.
log('[INFO]:Starting to save logs.')
logwrite=open('log/' + 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.')
print('[' + 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()