Skip to content

Instantly share code, notes, and snippets.

@einstein95
Last active November 15, 2023 13:11
Show Gist options
  • Save einstein95/7e700b6242c77d3f9a01e3059d4f397b to your computer and use it in GitHub Desktop.
Save einstein95/7e700b6242c77d3f9a01e3059d4f397b to your computer and use it in GitHub Desktop.
#!/usr/bin/python3
import os
import re
import subprocess
import requests
import argparse
def main():
parser = argparse.ArgumentParser(description="Download game files from GameJolt")
parser.add_argument("url", help="URL of the game on GameJolt")
args = parser.parse_args()
session = requests.Session()
game_id = re.search(r"/(\d+)(?:/|$)", args.url).group(1)
response = session.get(
f"https://gamejolt.com/site-api/web/discover/games/overview/{game_id}?ignore"
).json()
for build in response["payload"]["builds"]:
if build["type"] == "downloadable":
build_id = build["id"]
download_url_response = session.post(
f"https://gamejolt.com/site-api/web/discover/games/builds/get-download-url/{build_id}",
data="{}",
).json()
token = re.search(
r"token=([^&]+)", download_url_response["payload"]["url"]
).group(1)
game_server_response = session.get(
f"https://gamejolt.net/site-api/gameserver/{token}"
).json()
url = game_server_response["payload"]["url"].replace("https://", "http://")
path, file = re.search(r"https?://(.+)/([^\?]+)", url).groups()
os.makedirs(path, exist_ok=True)
file_path = os.path.join(path.replace("/", os.sep), file)
cookies = {"gjexpires": "", "gjsig": ""}
for cookie in session.cookies:
if cookie.name in cookies:
cookies[cookie.name] = cookie.value
cookies_str = "; ".join(
f"{name}={value}" for name, value in cookies.items() if value
)
subprocess.call(
["wget", "--header", f"Cookie: {cookies_str}", "-O", file_path, url]
)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment