Added more options for mod loaders, game versions and counting total mods found and a justfile

master
Wynd 2025-09-13 14:33:43 +03:00
parent 2b48048bdd
commit 4ba1c31a5e
2 changed files with 65 additions and 2 deletions

View File

@ -25,7 +25,7 @@ class Mod:
year_created = datetime.strptime(
data["dateCreated"], "%Y-%m-%dT%H:%M:%S%z"
).strftime("%Y")
self.year_created = year_created
self.year_created = int(year_created)
self.date_modified = str(data["dateModified"])
try:
self.date_released = datetime.strptime(
@ -49,6 +49,15 @@ class SortType(Enum):
InvReleaseYear = "-release-year"
class ModLoaderType(Enum):
Any = 0
Forge = 1
Liteloader = 3
Fabric = 4
Quilt = 5
NeoForge = 6
if __name__ == "__main__":
load_dotenv()
@ -94,6 +103,30 @@ if __name__ == "__main__":
required=False,
dest="max_index",
)
parser.add_argument(
"--count",
help="Fetched only the max number of entries of the search",
default=False,
required=False,
action="store_true",
dest="count",
)
parser.add_argument(
"--game-version",
help="Narrows down the search for only a specific game version",
type=str,
default="",
required=False,
dest="game_version",
)
parser.add_argument(
"--mod-loader",
help="Narrows down the search for only a specific mod loader",
type=str,
default="any",
required=False,
dest="mod_loader",
)
args = parser.parse_args()
page_size = clamp(args.page_size, 10, 50)
@ -121,16 +154,21 @@ if __name__ == "__main__":
elif sort is SortType.ReleaseYear:
sorting.append(mod.year_created)
elif sort is SortType.InvReleaseYear:
sorting.append(-int(mod.year_created))
sorting.append(-mod.year_created)
return tuple(sorting)
MOD_LOADER = ModLoaderType[args.mod_loader]
GAME_VERSION = args.game_version
ONLY_COUNT = args.count
PAGE_SIZE = page_size
MAX_INDEX = args.max_index
URL = "https://api.curseforge.com/v1/mods/search"
PARAMS = {
"gameId": "432", # minecraft
"classId": 6, # mods
"gameVersion": GAME_VERSION,
"modLoaderType": MOD_LOADER.value,
"sortField": 6, # downloads
"sortOrder": "desc",
"pageSize": PAGE_SIZE,
@ -140,6 +178,7 @@ if __name__ == "__main__":
HEADERS = {"x-api-key": CURSE_API_TOKEN}
all_mods = []
count = 0
for i in range(0, MAX_INDEX, PAGE_SIZE):
PARAMS["index"] = i
@ -147,9 +186,14 @@ if __name__ == "__main__":
try:
data = r.json()
except ValueError as err:
print(r)
print(err)
break
if ONLY_COUNT:
count = data["pagination"]["totalCount"]
break
data = data["data"]
for entry in data:
@ -169,6 +213,10 @@ if __name__ == "__main__":
all_mods.append(mod)
print(f"{i} / {MAX_INDEX}")
if ONLY_COUNT:
print(f"{MOD_LOADER.name}-{GAME_VERSION}: {count}")
exit(0)
all_mods.sort(key=lambda m: sort_mod(m, sorts))
all_mods = map(

15
justfile 100644
View File

@ -0,0 +1,15 @@
set quiet
count-120:
#!/usr/bin/env bash
for i in {1..6}; do
./curse-stats.py --game-version "1.20.${i}" --mod-loader Forge --count
done
count-121:
#!/usr/bin/env bash
for i in {1..8}; do
./curse-stats.py --game-version "1.21.${i}" --mod-loader Forge --count
./curse-stats.py --game-version "1.21.${i}" --mod-loader NeoForge --count
done