diff --git a/curse-stats.py b/curse-stats.py index 2bd4248..a19280a 100755 --- a/curse-stats.py +++ b/curse-stats.py @@ -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( diff --git a/justfile b/justfile new file mode 100644 index 0000000..2e69d2d --- /dev/null +++ b/justfile @@ -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