From 1726a268e990274554a89163aea67fdae92b3918 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Sat, 1 Nov 2025 00:07:08 +0100 Subject: [PATCH] switch to cloudscraper and add uv files --- .gitignore | 6 ++-- main.py | 80 ++++++++++++++++++++---------------------------------- 2 files changed, 31 insertions(+), 55 deletions(-) diff --git a/.gitignore b/.gitignore index bac8dc0..08d80ac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,3 @@ .env -build -dist -main.spec -venv +.build +.dist diff --git a/main.py b/main.py index ea9d41f..23040c2 100644 --- a/main.py +++ b/main.py @@ -1,72 +1,63 @@ -import requests import os from dotenv import load_dotenv import inquirer import zipfile +import cloudscraper load_dotenv() +scraper = cloudscraper.create_scraper() + headers = { 'x-api-key': os.getenv("CURSEFORGE_API_KEY") } +input_name = input("Enter modpack name: ") +response = scraper.get(f'https://api.curseforge.com/v1/mods/search?gameId=432&searchFilter={input_name}', headers=headers) +data = response.json() - -modpack_names = [] found = False selected_modpack_id = -1 +modpack_names = [] +for mod in data['data']: + modpack_url = mod['links']['websiteUrl'] + if modpack_url.startswith("https://www.curseforge.com/minecraft/modpacks/"): + modpack_names.append(mod['name']) + found = True + else: + pass -def search_modpacks(query): - global data - global found +if not found: + print("No modpack found with that name.") +else: + pass - response = requests.get(f'https://api.curseforge.com/v1/mods/search?gameId=432&searchFilter={query}', headers=headers) - data = response.json() - for mod in data['data']: - modpack_url = mod['links']['websiteUrl'] - if modpack_url.startswith("https://www.curseforge.com/minecraft/modpacks/"): - modpack_names.append(mod['name']) - found = True - if not found: - print("No modpack found with that name.") - - return modpack_names - - -def select_modpacks(modpack_names): - - if found == True: - questions = [ - inquirer.List('name', - message="Select a modpack", - choices=modpack_names - ), - ] +if found == True: + questions = [ + inquirer.List('name', + message="Select a modpack", + choices=modpack_names, + ), +] answers = inquirer.prompt(questions) - selected_modpack_name = answers['name'] for mod in data['data']: if mod['name'] == selected_modpack_name: selected_modpack_id = mod['id'] + selected_url = mod['links']['websiteUrl'] - return selected_modpack_name, selected_modpack_id - - - -def download_modpack(selected_modpack_name, selected_modpack_id): - - r = requests.get(f"https://api.curseforge.com/v1/mods/{selected_modpack_id}/files", headers = headers) + r = scraper.get(f"https://api.curseforge.com/v1/mods/{selected_modpack_id}/files", headers = headers) file_data = r.json() for file in file_data['data']: server_file_id = file['serverPackFileId'] - file = requests.get(f"https://www.api.curseforge.com/v1/mods/{selected_modpack_id}/files/{server_file_id}", headers=headers) + file = scraper.get(f"https://www.api.curseforge.com/v1/mods/{selected_modpack_id}/files/{server_file_id}", headers=headers) download_url = file.json()['data']['downloadUrl'] print(f"Download Url: {download_url}") - dl_response = requests.get(download_url, stream=True) + dl_response = scraper.get(download_url, stream=True) with open(f"{selected_modpack_name}-server.zip", 'wb') as f: for chunk in dl_response.iter_content(chunk_size=8192): f.write(chunk) @@ -77,16 +68,3 @@ def download_modpack(selected_modpack_name, selected_modpack_id): break else: print("No server pack found for this modpack.") - - -if __name__ == "__main__": - print("Serverpack Downloader") - - query = input("Enter Search Query: ") - modpack_names = search_modpacks(query) - - selected_modpack_name, selected_modpack_id = select_modpacks(modpack_names) - - download_modpack(selected_modpack_name, selected_modpack_id) - -