diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d392f0e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.jar diff --git a/mcUp.py b/mcUp.py index ae9d2c0..ad7a376 100755 --- a/mcUp.py +++ b/mcUp.py @@ -2,6 +2,7 @@ # Setup Parser import parsers.paperMC import argparse +import shutil parser = argparse.ArgumentParser(description='A command-line tool to update a Minecraft Server.') parser.add_argument('api', metavar='api', help='which API to use') parser.add_argument('project', metavar='project', help='which project to query for') @@ -19,7 +20,22 @@ def paperMC(project, action, subAction): latestVersion = parsers.paperMC.getLatest(project) buildNumber = parsers.paperMC.getBuildNumber(project, latestVersion) print("Latest version of "+project+" is "+latestVersion+" build #"+str(buildNumber[-1])) - elif action == "download": + if action == "download": + if subAction == "latest": + latestVersion = parsers.paperMC.getLatest(project) + output = parsers.paperMC.getJarInfo(project, latestVersion) + print(output["name"]) + with parsers.paperMC.downloadVersion(project, latestVersion) as raw: + with open(output["name"], 'wb') as file_object: + shutil.copyfileobj(raw.raw, file_object) + print("Downloaded "+latestVersion+" to "+output["name"]) + + + #latestVersion = parsers.paperMC.getLatest(project) + #jarInfo = parsers.paperMC.getJarInfo(project, latestVersion) + #print(jarInfo) + #print(jarInfo[0]) + #print(type(jarInfo)) diff --git a/parsers/__pycache__/paperMC.cpython-310.pyc b/parsers/__pycache__/paperMC.cpython-310.pyc index 8b975d7..e1981ee 100644 Binary files a/parsers/__pycache__/paperMC.cpython-310.pyc and b/parsers/__pycache__/paperMC.cpython-310.pyc differ diff --git a/parsers/paperMC.py b/parsers/paperMC.py index 1a6d241..1cd57d3 100644 --- a/parsers/paperMC.py +++ b/parsers/paperMC.py @@ -12,6 +12,7 @@ timeoutTime = 1 base_api_url = "https://papermc.io/api/v2" # This function returns the versions from a project from the Paper API. def getVersions(project): + print("Calling getVersions()...") print("Accessing "+base_api_url+"/projects/"+project+"...") response = requests.get(base_api_url+"/projects/"+project, timeout=timeoutTime) print("Status Code is: "+str(response.status_code)) @@ -19,20 +20,38 @@ def getVersions(project): return api_response['versions'] def getLatest(project): + print("Calling getLatest()...") versions = getVersions(project) return versions[-1] def getBuildNumber(project, version): + print("Calling getBuildNumber()...") response = requests.get(base_api_url+"/projects/"+project+"/versions/"+version, timeout=timeoutTime) print("Status Code is: "+str(response.status_code)) api_response = response.json() return api_response['builds'] -def getJarName(project, version): - +def getBuildInfo(project, version): + print("Calling getBuildInfo()...") + buildID1 = getBuildNumber(project, version) + buildID = str(buildID1[-1]) + print(base_api_url+"/projects/"+project+"/versions/"+version+"/builds/"+buildID) + response = requests.get(base_api_url+"/projects/"+project+"/versions/"+version+"/builds/"+buildID, timeout=timeoutTime) + api_response = response.json() + return api_response + +def getJarInfo(project, version): + print("Calling getJarInfo()...") + buildInfo = getBuildInfo(project, version) + workingDict = buildInfo["downloads"] + workingDict2 = workingDict["application"] + print(workingDict2) + return workingDict2 def downloadVersion(project, version): - jarName = getJarName(project, version) - buildID = getBuildNumber(project, version) - response = requests.get(base_api_url+"/projects/"+project+"/versions/"+version+"/builds/"+buildID+"/downloads/"+jarName, timeout=timeoutTime) - + print("Calling downloadVersion()...") + jarName = getJarInfo(project, version) + buildID1 = getBuildNumber(project, version) + buildID = str(buildID1[-1]) + response = requests.get(base_api_url+"/projects/"+project+"/versions/"+version+"/builds/"+buildID+"/downloads/"+jarName["name"], stream=True, timeout=timeoutTime) + return response