SteamCal Anleitung

Installation, Konfiguration & Wartung

Dateistruktur

DateiBeschreibung
config.phpKonfiguration (Steam-ID, Cache, Token)
SteamWishlist.phpHauptklasse: API-Abfrage, Cache, ICS-Generierung
index.phpHTML-Kalender-Ansicht (Webseite)
feed.phpICS-Feed für Kalender-Abos (Nextcloud, Google, etc.)
export.phpICS-Datei-Download (einmaliger Import)
refresh.phpCache-Neuaufbau (token-geschützt)
cron-refresh.phpCron-Hilfsskript (intern)
setup-cron.shInteraktives Cron-Setup-Skript
clear-cache.phpCache komplett löschen
hilfe.htmlDiese Anleitung
style.cssSteam-Dark-Theme Styling
.htaccessApache-Konfiguration (Bludit-Kompatibilität)
cache/Cache-Verzeichnis (wird automatisch erstellt)

Installation

Voraussetzungen

Schritt-für-Schritt

  1. Alle Dateien in den Webserver-Ordner kopieren (z.B. /var/www/html/SteamCal/)
  2. Verzeichnisrechte prüfen:
    chown www-data:www-data /var/www/html/SteamCal/cache && chmod 755 /var/www/html/SteamCal/cache
  3. config.php öffnen und Steam-ID eintragen (siehe Konfiguration)
  4. Cache initial aufbauen: https://deinedomain.de/SteamCal/refresh.php?token=DEIN_TOKEN
  5. Ergebnis prüfen: https://deinedomain.de/SteamCal/
Bludit-Nutzer: In der Root-.htaccess muss folgendes stehen, damit Bludit die PHP-Dateien nicht abfängt:
RewriteRule ^SteamCal/ - [L]

Konfiguration (config.php)

Die gesamte Konfiguration erfolgt in einer einzigen Datei:

<?php
return [
    'steam_vanity_url' => 'LAN-Taverne',
    'steam_id_64'       => '76561198006558270',
    'cache_dir'         => __DIR__ . '/cache',
    'cache_ttl'         => 1800,
    'calendar_name'     => 'LAN-Taverne Steam Wishlist',
    'refresh_interval'  => 60,
    'secret_token'      => 'DEIN_SICHERHEITSTOKEN',
];

Parameter-Erklärung

ParameterBeschreibung
steam_vanity_urlDein Steam-Benutzername (aus der Profil-URL, z.B. steampowered.com/id/LAN-Taverne)
steam_id_64Deine Steam-ID im64er-Format. Wird von der App automatisch aus dem Benutzernamen aufgelöst. Kann auch unter steamid.io ermittelt werden.
cache_dirPfad zum Cache-Verzeichnis. Standard: __DIR__ . '/cache'
cache_ttlCache-Lebensdauer in Sekunden. 1800 = 30 Minuten.
calendar_nameName des Kalenders in der ICS-Datei und im Nextcloud/Google Kalender.
refresh_intervalAktualisierungsintervall in Minuten (RFC 7986 REFRESH-INTERVAL in der ICS).
secret_tokenSchlüssel für den refresh.php-Endpunkt. Nur wer diesen Token kennt, kann den Cache neu aufbauen.

Steam-ID herausfinden

  1. Gehe zu https://steamcommunity.com/id/DEIN_NAME
  2. Rechtsklick → Seite Quelltext anzeigen
  3. Suche nach steamid → die Nummer ist deine steam_id_64
  4. Oder nutze https://steamid.io/lookup/DEIN_NAME

Sicheren Token generieren

Erzeuge einen zufälligen Token mit:

php -r "echo bin2hex(random_bytes(16));"

Das Ergebnis als Wert für secret_token eintragen.

Cache & Aktualisierung

Die App nutzt ein Cache-System: Webseite und ICS-Feed lesen nur aus dem Cache. Der Cache wird ausschließlich durch Aufruf von refresh.php aktualisiert.

Cache manuell neu aufbauen

https://deinedomain.de/SteamCal/refresh.php?token=DEIN_TOKEN

Ruft die Steam API ab und aktualisiert alle Spiel-Details. Dauer: ca. 1-2 Minuten bei ~100 Spielen.

Der Endpunkt gibt JSON zurück: {"status":"ok","games_count":111,"timestamp":"..."}

Cache löschen

https://deinedomain.de/SteamCal/clear-cache.php

Cron-Job einrichten (empfohlen)

Für automatische stündliche Aktualisierung auf dem Server:

# Crontab öffnen
crontab -e

# Jede Stunde neu aufbauen (anpassen!):
0 * * * * curl -s "https://deinedomain.de/SteamCal/refresh.php?token=DEIN_TOKEN" > /dev/null 2>&1
Tipp: Das Skript setup-cron.sh führt dich interaktiv durch die Cron-Konfiguration.

Kalender abonnieren (Nextcloud)

  1. Nextcloud Calendar öffnen
  2. Auf + (Neuen Kalender abonnieren) klicken
  3. Link-Adresse eingeben: https://deinedomain.de/SteamCal/feed.php
  4. Kalender-Name vergeben (z.B. "Steam Wishlist")
  5. Fertig → Nextcloud aktualisiert automatisch alle 60 Minuten

Alternativen

MethodeBeschreibung
feed.phpAbo-Feed mit Auto-Refresh (empfohlen für Nextcloud, Google Calendar, Thunderbird)
export.phpEinmaliger Download als .ics-Datei (für manuelle Importe)
Der Feed enthält RFC 7986 REFRESH-INTERVAL;VALUE=DURATION:PT60M und X-PUBLISHED-TTL:PT60M. Nextcloud und andere Kalender-Apps erkennen das Intervall automatisch.

Bludit-Kompatibilität

Da Bludit CMS alle Anfragen über seine eigene Router-Logik verarbeitet, muss RewriteEngine Off im SteamCal-Verzeichnis deaktiviert werden.

Root-.htaccess (im Webserver-Root)

Folgende Zeile vor den Bludit-Rewrite-Regeln einfügen:

RewriteRule ^SteamCal/ - [L]

SteamCal/.htaccess

RewriteEngine Off

<IfModule mod_php.c>
    php_flag display_errors On
    php_value error_reporting E_ALL
</IfModule>

<FilesMatch "\.(php)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Fehlerbehebung

Keine Spiele im Kalender

Bludit zeigt "404 Not Found"

Cache-Refresh schlägt fehl

Nextcloud aktualisiert nicht