2020-08-25 14:40:22 +00:00
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/ '
Version = ' 2.3.0 '
UserAgent = { ' User-Agent ' : ' GeMCAPI/2.3.0 (GeMC Sync Release 2.3.0;Release) ' }
Proxies = {
" http " : " http://127.0.0.1:10809 " , #HTTP Proxies Setting
#"https": "", #HTTPS Proxies Setting
}
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
global UserAgent
log ( ' [INFO]:The ' + SystemName + ' is synchronizing the file ' + SavePath + filepath + ' . ' )
try :
#synchronize=requests.get(url, headers=UserAgent)#Without Proxies
synchronize = requests . get ( url , headers = UserAgent , proxies = Proxies )
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 + ' . ' )
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 )
log ( ' [INFO]:Loading all kinds of modules successfully. ' )
#------------------------------------------------------------------------#
print ( ' ------------------------------------------------------------------------ ' )
Log = Log + ' ------------------------------------------------------------------------ ' + ' \n '
#Save JSON In Global Variables
log ( ' [INFO]:Starting to get the json of MC versions list. ' )
Log = Log + ' [ ' + time . strftime ( " % Y- % m- %d % H: % M: % S " , time . localtime ( ) ) + ' ] ' + ' [INFO]:Starting to get the json of MC versions list. ' + ' \n '
#Save MC Versions List Json In Global Variables
mcversionsjson = requests . get ( url = ' http://launchermeta.mojang.com/mc/game/version_manifest.json ' )
log ( ' [INFO]:Get json of MC versions successfully. ' )
Log = Log + ' [ ' + time . strftime ( " % Y- % m- %d % H: % M: % S " , time . localtime ( ) ) + ' ] ' + ' [INFO]:Get json of MC versions successfully. ' + ' \n '
#------------------------------------------------------------------------#
print ( ' ------------------------------------------------------------------------ ' )
Log = Log + ' ------------------------------------------------------------------------ ' + ' \n '
#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. ' )
log ( ' [INFO]:Determining whether all of dirs exists successfully. ' )
#------------------------------------------------------------------------#
print ( ' ------------------------------------------------------------------------ ' )
Log = Log + ' ------------------------------------------------------------------------ ' + ' \n '
#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. ' )
#------------------------------------------------------------------------#
print ( ' ------------------------------------------------------------------------ ' )
Log = Log + ' ------------------------------------------------------------------------ ' + ' \n '
#MC Versions Synchronizing Part.
log ( ' [INFO]:Starting 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/Https 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 + ' . ' )
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/Https Connection Errors Or Synchronize Module Download Failed Errors Making Whole Synchronize Stop.
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 " . ' )
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/Https 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 " . ' )
else :
log ( ' [INFO]:Synchronizing files in " libraries " successfully. ' )
log ( ' [INFO]:Synchronizing files and dirs on https://libraries.minecraft.net/ successfully. ' )
#------------------------------------------------------------------------#
print ( ' ------------------------------------------------------------------------ ' )
Log = Log + ' ------------------------------------------------------------------------ ' + ' \n '
#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 ( )