Renamed folder to src\; Added new input system and added a specific plugin downloader for testing

This commit is contained in:
Neocky 2021-03-07 01:49:57 +01:00
parent b734c3aa30
commit e698803c87
6 changed files with 108 additions and 17 deletions

5
requirements.txt Normal file
View File

@ -0,0 +1,5 @@
urllib3 >= 1.21.1
requests >=2.25.1
requests_toolbelt >= 0.9.1
pyparsing >= 2.4.7
cloudscraper >= 1.2.56

View File

@ -3,7 +3,7 @@ from os import system
from os import name from os import name
def consoleTitle(): def consoleTitle():
system("title " + "🧱 pluGET │ by Neocky") system("title " + "pluGET │ by Neocky")
def clearConsole(): def clearConsole():
@ -76,12 +76,16 @@ def printLogo():
print() print()
def printHorizontalLine():
print(" ─────────────────────────────────────────────────────────────────────────────────")
def printMainMenu(): def printMainMenu():
printLogo() printLogo()
print(" ─────────────────────────────────────────────────────────────────────────────────") printHorizontalLine()
print(" [1] Download a specific package") #print(" [1] Download a specific package")
print(" [2] Get update info of package") #print(" [2] Get update info of package")
print(" [3] Search for a plugin") #print(" [3] Search for a plugin")
print(" [4] Download latest version of package") #print(" [4] Download latest version of package")
print(" [5] Check update for installed plugins") #print(" [5] Check update for installed plugins")
print() print()

View File

@ -1,7 +1,28 @@
import time import time
from consoleoutput import consoleTitle, clearConsole, printMainMenu from consoleoutput import consoleTitle, clearConsole, printMainMenu
from plugin_downloader import downloadPackageManual, apiCallTest, searchPackage, getLatestPackageVersionInteractive from plugin_downloader import downloadPackageManual, apiCallTest, searchPackage, getLatestPackageVersionInteractive, getPackageVersion
from plugin_updatechecker import getInstalledPackages from plugin_updatechecker import getInstalledPackages
from web_request import createCloudScraperInstance#, CLOUDSCRAPER
def handleInput(inputCommand, inputSelectedObject, inputParams="latest"):
if inputCommand == 'get':
getPackageVersion(inputSelectedObject, inputParams, r"C:\\Users\USER\Desktop\\")
def getInput():
inputCommand, inputSelectedObject, *inputParams = input("pluGET >> ").split()
inputParams = inputParams[0] if inputParams else ''
print(inputCommand)
print(inputSelectedObject)
print(inputParams)
handleInput(inputCommand, inputSelectedObject,inputParams)
def inputOption(inputOptionString): def inputOption(inputOptionString):
@ -17,7 +38,7 @@ def inputOption(inputOptionString):
return inputString return inputString
def handleInput(inputString): def handleInputOLD(inputString):
if inputString == "1": if inputString == "1":
downloadPackageManual() downloadPackageManual()
if inputString == "2": if inputString == "2":
@ -35,8 +56,9 @@ def handleInput(inputString):
def inputMainMenu(): def inputMainMenu():
clearConsole() clearConsole()
printMainMenu() printMainMenu()
inputSt = input(" pluGET >> ") getInput()
handleInput(inputSt) #inputSt = input(" pluGET >> ")
#handleInputOLD(inputSt)
def outputTest(): def outputTest():
@ -54,6 +76,8 @@ def outputTest():
print("Done ✅☑✔ ") print("Done ✅☑✔ ")
input("Press key to end program...") input("Press key to end program...")
createCloudScraperInstance()
consoleTitle() consoleTitle()
inputMainMenu() inputMainMenu()
outputTest() outputTest()

View File

@ -1,6 +1,7 @@
import urllib.request import urllib.request
import cgi import cgi
import re import re
import cloudscraper
from web_request import doAPIRequest from web_request import doAPIRequest
@ -60,6 +61,7 @@ def handleRegexPackageName(packageNameFull):
print("packageNameOnly") print("packageNameOnly")
return packageNameOnly return packageNameOnly
def getlatestVersion(packageId): def getlatestVersion(packageId):
url = f"https://api.spiget.org/v2/resources/{packageId}/versions/latest" url = f"https://api.spiget.org/v2/resources/{packageId}/versions/latest"
response = doAPIRequest(url) response = doAPIRequest(url)
@ -86,6 +88,24 @@ def compareVersions():
print("compareVersions") print("compareVersions")
def getVersionID(packageId, packageVersion):
url = f"https://api.spiget.org/v2/resources/{packageId}/versions?size=100&sort=-name"
versionList = doAPIRequest(url)
for packages in versionList:
packageUpdate = packages["name"]
versionId = packages["id"]
if packageUpdate == packageVersion:
return versionId
return versionList[0]["id"]
def getVersionName(packageId, versionId):
url = f"https://api.spiget.org/v2/resources/{packageId}/versions/{versionId}"
response = doAPIRequest(url)
versionName = response["name"]
return versionName
def searchPackage(ressourceName): def searchPackage(ressourceName):
url = f"https://api.spiget.org/v2/search/resources/{ressourceName}?field=name" url = f"https://api.spiget.org/v2/search/resources/{ressourceName}?field=name"
packageName = doAPIRequest(url) packageName = doAPIRequest(url)
@ -119,17 +139,46 @@ def downloadLatestVersion(ressourceId, packageDownloadName, sourcePath):
print(filesize) print(filesize)
print(f" Downloadsize: {filesizeData} KB") print(f" Downloadsize: {filesizeData} KB")
def downloadSpecificVersion(ressourceId, packageDownloadName, versionId, sourcePath):
url = f"https://spigotmc.org/resources/{ressourceId}/download?version={versionId}"
#url = f"https://api.spiget.org/v2/resources/{ressourceId}/versions/{versionId}/download"
downloadPath = sourcePath + packageDownloadName
def getLatestPackageVersion(ressourceId, downloadPath):
#local_filename = url.split('/')[-1]
# NOTE the stream=True parameter below
with CLOUDSCRAPER.get(url, stream=True) as r:
#r.raise_for_status()
with open(downloadPath, 'wb') as fd:
for chunk in r.iter_content(chunk_size=128):
fd.write(chunk)
#return downloadPath
#remotefile = urllib.request.urlopen(url)
#cloudscraper.requests.get()
#filesize = remotefile.info()['Content-Length']
#urllib.request.urlretrieve(url, downloadPath)
#filesizeData = calculateFileSize(filesize)
#print(filesizeData)
#print(filesize)
#print(f" Downloadsize: {filesizeData} KB")
def getPackageVersion(ressourceId, packageVersion, downloadPath):
#ressourceId = input(" SpigotMC Ressource ID: ") #ressourceId = input(" SpigotMC Ressource ID: ")
CLOUDSCRAPER = createCloudScraperInstance()
url = f"https://api.spiget.org/v2/resources/{ressourceId}" url = f"https://api.spiget.org/v2/resources/{ressourceId}"
packageDetails = doAPIRequest(url) packageDetails = doAPIRequest(url)
packageName = packageDetails["name"] packageName = packageDetails["name"]
#packageTag = packageDetails["tag"] #packageTag = packageDetails["tag"]
packageNameNew = handleRegexPackageName(packageName) packageNameNew = handleRegexPackageName(packageName)
packageVersion = getlatestVersion(ressourceId) versionId = getVersionID(ressourceId, packageVersion)
packageVersion = getVersionName(ressourceId, versionId)
#packageVersion = getlatestVersion(ressourceId)
packageDownloadName = f"{packageNameNew}-{packageVersion}.jar" packageDownloadName = f"{packageNameNew}-{packageVersion}.jar"
downloadLatestVersion(ressourceId, packageDownloadName, downloadPath) downloadSpecificVersion(ressourceId, packageDownloadName, versionId, downloadPath)
def getLatestPackageVersionInteractive(downloadPath): def getLatestPackageVersionInteractive(downloadPath):
@ -143,6 +192,10 @@ def getLatestPackageVersionInteractive(downloadPath):
packageDownloadName = f"{packageNameNew}-{packageVersion}.jar" packageDownloadName = f"{packageNameNew}-{packageVersion}.jar"
downloadLatestVersion(ressourceId, packageDownloadName, downloadPath) downloadLatestVersion(ressourceId, packageDownloadName, downloadPath)
def createCloudScraperInstance():
global CLOUDSCRAPER
CLOUDSCRAPER = cloudscraper.create_scraper(interpreter='nodejs',debug=True) # returns a CloudScraper instance
return CLOUDSCRAPER
# get latest update > https://api.spiget.org/v2/resources/28140/updates/latest # get latest update > https://api.spiget.org/v2/resources/28140/updates/latest
# this also > https://api.spiget.org/v2/resources/28140/versions/latest # this also > https://api.spiget.org/v2/resources/28140/versions/latest

View File

@ -2,7 +2,7 @@ import os
import re import re
from consoleoutput import oColors #consoleTitle, clearConsole from consoleoutput import oColors #consoleTitle, clearConsole
from plugin_downloader import getLatestPackageVersion #handleInput from plugin_downloader import getPackageVersion #handleInput
from web_request import doAPIRequest from web_request import doAPIRequest
@ -75,10 +75,8 @@ def getInstalledPackages(pluginFolderPath):
def getInstalledPlugin(localFileName, localFileVersion): def getInstalledPlugin(localFileName, localFileVersion):
#response = requests.get("https://api.spiget.org/v2/search/resources/" + localFileName + "?field=name")
url = "https://api.spiget.org/v2/search/resources/" + localFileName + "?field=name" url = "https://api.spiget.org/v2/search/resources/" + localFileName + "?field=name"
packageName = doAPIRequest(url) packageName = doAPIRequest(url)
#https://api.spiget.org/v2/search/resources/luckperms?field=name
print("https://api.spiget.org/v2/search/resources/" + localFileName + "?field=name") print("https://api.spiget.org/v2/search/resources/" + localFileName + "?field=name")
#packageName = response.json() #packageName = response.json()
i = 1 i = 1

View File

@ -1,4 +1,6 @@
# Handles the web requests
import requests import requests
import cloudscraper
#import urllib.request #import urllib.request
@ -7,3 +9,8 @@ def doAPIRequest(url):
response = requests.get(url, headers=headers) response = requests.get(url, headers=headers)
packageDetails = response.json() packageDetails = response.json()
return packageDetails return packageDetails
def createCloudScraperInstance():
global CLOUDSCRAPER
CLOUDSCRAPER = cloudscraper.create_scraper() # returns a CloudScraper instance
return CLOUDSCRAPER