Semi-automatisch GOG.com-Spiele herunterladen

Auf dem beliebten Spieleportal GOG.com, auf der man Spiele DRM-Frei kaufen kann, existieren zwei offizielle Methoden um seine Spiele herunterladen zu können. Die erste wäre das optionale Programm GOG Galaxy welches ein wenig an Steam erinnert und die Spiele direkt installieren kann, die zweite Methode wäre das manuelle herunterladen der einzelnen Installationsdateien.

Die zweite Methode ist für mich besonders interessant, da ich gerne meine gekauften Spiele auf meinem NAS-Server habe. Sollte GOG.com aus welchen Gründen auch immer in Zukunft den Betrieb einstellen oder das Spiel aus seinem Angebot entfernen, so habe ich noch immer die Installationsdateien bei mir Zuhause verfügbar. Bei vielen Spielen, vorallem ältere, ist das überhaupt kein Problem da diese nur ein oder vielleicht zwei Dateien zum herunterladen haben. Wenn man aber moderne Spiele wie. z.B. Baldurs Gate 3 hat, dann sind es schon mal 34 Dateien mit je 4 GB.

Um mir nun das Leben ein wenig einfacher zu machen, nutze ich für das Herunterladen das quelloffene und freie Programm aria2. Es ist in der Lage eine Textdatei mit Links einzulesen, die es dann Stück für Stück herunterladen kann. Es kann mehrere Dateien gleichzeitig downloaden, Dateien in Chunks herunterladen, unterbrochende Downloads fortsetzen und noch so viel mehr. Der Funktionsumfang ist gewaltig und als Downloadtool ein echtes Multitalent. Und dies machen wir uns zu nutze!

Als erstes besorgen wir uns die Downloadlinks von GOG.com. Dazu loggen wir uns ein, gehen in unsere Spiele-Sammlung und wählen das Spiel aus, das wir nun herunterladen möchten – Ich nehme das vorhin schon erwähnte Baldurs Gate 3. Im Webbrowser öffnen wir nun die DevTools – welches bei den meisten Browsern mit der Taste F12 geschieht. Hier wiederum öffnen wir die Console, worin wir Javascript ausführen können.

Um die Downloadlinks zu filtern, geben wir hier nun folgenden Code ein und betätigen ENTER:

const links = Array.from(document.querySelectorAll('a'))
  .map(a => a.href)
  .filter(href => href.startsWith("https://www.gog.com/downloads/"));

console.log(links.join("\n"));

Dies spuckt uns mehrere Links aus, die alle mit „https://www.gog.com/downloads/“ beginnen. Mich interessieren vorallem die Links, bei denen das wort „installer“ enthalten ist. Also:
https://www.gog.com/downloads/baldurs_gate_iii/en1installer0
https://www.gog.com/downloads/baldurs_gate_iii/en1installer1

Ich kopiere mir die Links raus und speichere sie in eine Datei download.links in einem Ordner wo das Spiel nachher heruntergeladen werden soll.

Als nächstes benötigen wir noch unsere Cookies aus dem Webbrowser. Diese müssen wir zwingend aria2 mitteilen, da aria2 sonst beim Versuch die Dateien herunterzuladen als nicht eingeloggt auf GOG.com zugreifen möchte und somit der Download dann blockiert wird bzw. fehlschlägt.

Dazu gehen wir in den DevTools auf „Network“ und klicken auf GOG.com einmal eine der Dateien an. Wenn das „Speichern unter…“-Fenster aufgeht, können wir das wieder schließen. Wir wollen die Datei nicht herunterladen, sondern nur den Request in den DevTools sehen.

Der gelb markierte Text ist, was wir benötigen. Ich habe meine Cookies hier logischerweise zensiert, da jeder, der meinen gültigen Cookie hat, Zugriff auf meine aktive Session bekommt und somit als „ich“ eingeloggt wäre – ganz ohne Benutzer, Passwort und Zwei-Faktor-Authentifizierung. Witzigerweise ist das genau das, was wir mit aria2 hier tun.

Jetzt sind wir vorbereitet und können das Herunterladen starten. Dazu öffnen wir ein Terminal und gehen wieder in das vorbereitete Verzeichnis mit unserer Linkliste und führen hier Aria2 aus:

aria2c -i download.links -d . -j1 –summary-interval=0 –continue=true –header=“Cookie: COOKIE-HEADER“

Die Parameter bewirken dabei folgendes:

  • -i download.links: Verwende die Datei download.links als Quelldatei
  • -d . : Verwende das aktuelle Verzeichnis als Zielverzeichnis
  • -j1: Lade nur eine Datei gleichzeitig herunter. aria2 lädt standardmäßig immer 5 Dateien parallel herunter, das ist meiner Erfahrung nach bei GOG.com aber nicht hilfreich.
  • --summary-interval=0: Üblicherweise schreibt aria2 alle 60 Sekunden eine kurze Zusammenfassung der aktiven Downloads. Dies wird hierdurch unterdrückt.
  • --continue=true: Bewirkt das bereits vollständig heruntergeladene Dateien nicht erneut heruntergeladen werden.
  • --header="Cookie: ...": Hier fügen wir unsere Cookies ein, die wir zuvor aus den DevTools herauskopiert haben.

Nun werden die Dateien Stück für Stück heruntergeladen. Wichtig ist nun, das man sich nicht von GOG.com abmeldet, da sonst die Session ID ungültig wird und aria2 nicht mehr herunterladen kann.

Wer nun besonders findig ist, könnte nahezu den gesamten Prozess in ein Python-Script oder ähnliches packen, damit noch weniger handarbeit notwendig ist. Soweit ich weiß, kann GOG Galaxy mittlerweile die Offline-Installer auch herunterladen. Ich benutze diesen aber nicht und habe mir stattdessen den Download direkt auf meinem NAS-Server automatisiert.

Übrigens: Man ist nicht zwingend an aria2 für diese Methode gebunden. Auch mit den meisten gängigen Tools wie „curl“ oder „wget“ sollte dies alles machbar sein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert