Here's a tool to download Solaris time machine data.
Setup:
pip3 install typer requests
Usage:
python3 timemachine.py -e <email> -p <password> -g <gameid> -o <outputdir>
import typer | |
import requests | |
import json | |
import os | |
app = typer.Typer( | |
name="Timemachine", | |
help="Downloads Solaris time machine data", | |
add_completion=False, | |
pretty_exceptions_show_locals=False, | |
) | |
@app.command(no_args_is_help=True) | |
def cli( | |
game_id: str = typer.Option(..., "-g", help="Game ID"), | |
save_dir: str = typer.Option(..., "-o", help="Directory to save files to"), | |
email: str = typer.Option(..., "-e", help="Email address"), | |
password: str = typer.Option(..., "-p", help="Password"), | |
api_url: str = typer.Option( | |
"https://api.solaris.games", help="Server API base URL" | |
), | |
): | |
# login | |
print(f"Logging in to {api_url} as {email}") | |
sess = requests.Session() | |
sess.headers.update({"User-Agent": "Solaris Time Machine Downloader"}) | |
login_res = sess.post( | |
f"{api_url}/api/auth/login", json={"email": email, "password": password} | |
) | |
login_res.raise_for_status() | |
login_res_data = login_res.json() | |
print(f" Logged in as {login_res_data['username']}") | |
print(" Cookies:", sess.cookies.get_dict()) | |
# get game info | |
print(f"Getting game info for {game_id}") | |
game_sync_res = sess.get(f"{api_url}/api/game/{game_id}/galaxy") | |
game_sync_res.raise_for_status() | |
game_sync_res_data = game_sync_res.json() | |
game_name = game_sync_res_data["settings"]["general"]["name"] | |
game_tick = game_sync_res_data["state"]["tick"] | |
print(f" Game name: {game_name}") | |
print(f" Tick: {game_tick}") | |
# get intel | |
print(f"Getting intel for {game_id}") | |
game_intel_res = sess.get(f"{api_url}/api/game/{game_id}/intel") | |
game_intel_res.raise_for_status() | |
game_intel_res_data = game_intel_res.json() | |
print(f" Intel: {len(game_intel_res_data)} entries") | |
with open(os.path.join(save_dir, "intel.json"), "w") as f: | |
json.dump(game_intel_res_data, f) | |
# fetch sync data for each tick and save to file | |
print(f"Downloading time machine data for {game_id}") | |
os.makedirs(save_dir, exist_ok=True) | |
for tick in range(0, game_tick + 1): | |
print(f" Tick {tick}...") | |
tick_sync_res = sess.get(f"{api_url}/api/game/{game_id}/galaxy/?tick={tick}") | |
tick_sync_res.raise_for_status() | |
tick_sync_res_data = tick_sync_res.json() | |
with open(os.path.join(save_dir, f"tick_{tick:05}.json"), "w") as f: | |
json.dump(tick_sync_res_data, f) | |
if __name__ == "__main__": | |
app() |