Added more options for mod loaders, game versions and counting total mods found and a justfile
parent
2b48048bdd
commit
4ba1c31a5e
|
|
@ -25,7 +25,7 @@ class Mod:
|
||||||
year_created = datetime.strptime(
|
year_created = datetime.strptime(
|
||||||
data["dateCreated"], "%Y-%m-%dT%H:%M:%S%z"
|
data["dateCreated"], "%Y-%m-%dT%H:%M:%S%z"
|
||||||
).strftime("%Y")
|
).strftime("%Y")
|
||||||
self.year_created = year_created
|
self.year_created = int(year_created)
|
||||||
self.date_modified = str(data["dateModified"])
|
self.date_modified = str(data["dateModified"])
|
||||||
try:
|
try:
|
||||||
self.date_released = datetime.strptime(
|
self.date_released = datetime.strptime(
|
||||||
|
|
@ -49,6 +49,15 @@ class SortType(Enum):
|
||||||
InvReleaseYear = "-release-year"
|
InvReleaseYear = "-release-year"
|
||||||
|
|
||||||
|
|
||||||
|
class ModLoaderType(Enum):
|
||||||
|
Any = 0
|
||||||
|
Forge = 1
|
||||||
|
Liteloader = 3
|
||||||
|
Fabric = 4
|
||||||
|
Quilt = 5
|
||||||
|
NeoForge = 6
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
|
|
@ -94,6 +103,30 @@ if __name__ == "__main__":
|
||||||
required=False,
|
required=False,
|
||||||
dest="max_index",
|
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()
|
args = parser.parse_args()
|
||||||
|
|
||||||
page_size = clamp(args.page_size, 10, 50)
|
page_size = clamp(args.page_size, 10, 50)
|
||||||
|
|
@ -121,16 +154,21 @@ if __name__ == "__main__":
|
||||||
elif sort is SortType.ReleaseYear:
|
elif sort is SortType.ReleaseYear:
|
||||||
sorting.append(mod.year_created)
|
sorting.append(mod.year_created)
|
||||||
elif sort is SortType.InvReleaseYear:
|
elif sort is SortType.InvReleaseYear:
|
||||||
sorting.append(-int(mod.year_created))
|
sorting.append(-mod.year_created)
|
||||||
|
|
||||||
return tuple(sorting)
|
return tuple(sorting)
|
||||||
|
|
||||||
|
MOD_LOADER = ModLoaderType[args.mod_loader]
|
||||||
|
GAME_VERSION = args.game_version
|
||||||
|
ONLY_COUNT = args.count
|
||||||
PAGE_SIZE = page_size
|
PAGE_SIZE = page_size
|
||||||
MAX_INDEX = args.max_index
|
MAX_INDEX = args.max_index
|
||||||
URL = "https://api.curseforge.com/v1/mods/search"
|
URL = "https://api.curseforge.com/v1/mods/search"
|
||||||
PARAMS = {
|
PARAMS = {
|
||||||
"gameId": "432", # minecraft
|
"gameId": "432", # minecraft
|
||||||
"classId": 6, # mods
|
"classId": 6, # mods
|
||||||
|
"gameVersion": GAME_VERSION,
|
||||||
|
"modLoaderType": MOD_LOADER.value,
|
||||||
"sortField": 6, # downloads
|
"sortField": 6, # downloads
|
||||||
"sortOrder": "desc",
|
"sortOrder": "desc",
|
||||||
"pageSize": PAGE_SIZE,
|
"pageSize": PAGE_SIZE,
|
||||||
|
|
@ -140,6 +178,7 @@ if __name__ == "__main__":
|
||||||
HEADERS = {"x-api-key": CURSE_API_TOKEN}
|
HEADERS = {"x-api-key": CURSE_API_TOKEN}
|
||||||
|
|
||||||
all_mods = []
|
all_mods = []
|
||||||
|
count = 0
|
||||||
|
|
||||||
for i in range(0, MAX_INDEX, PAGE_SIZE):
|
for i in range(0, MAX_INDEX, PAGE_SIZE):
|
||||||
PARAMS["index"] = i
|
PARAMS["index"] = i
|
||||||
|
|
@ -147,9 +186,14 @@ if __name__ == "__main__":
|
||||||
try:
|
try:
|
||||||
data = r.json()
|
data = r.json()
|
||||||
except ValueError as err:
|
except ValueError as err:
|
||||||
|
print(r)
|
||||||
print(err)
|
print(err)
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if ONLY_COUNT:
|
||||||
|
count = data["pagination"]["totalCount"]
|
||||||
|
break
|
||||||
|
|
||||||
data = data["data"]
|
data = data["data"]
|
||||||
|
|
||||||
for entry in data:
|
for entry in data:
|
||||||
|
|
@ -169,6 +213,10 @@ if __name__ == "__main__":
|
||||||
all_mods.append(mod)
|
all_mods.append(mod)
|
||||||
print(f"{i} / {MAX_INDEX}")
|
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.sort(key=lambda m: sort_mod(m, sorts))
|
||||||
|
|
||||||
all_mods = map(
|
all_mods = map(
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
Loading…
Reference in New Issue