Dateistruktur
| Datei | Beschreibung |
|---|---|
| config.php | Konfiguration (Steam-ID, Cache, Token) |
| SteamWishlist.php | Hauptklasse: API-Abfrage, Cache, ICS-Generierung |
| index.php | HTML-Kalender-Ansicht (Webseite) |
| feed.php | ICS-Feed für Kalender-Abos (Nextcloud, Google, etc.) |
| export.php | ICS-Datei-Download (einmaliger Import) |
| refresh.php | Cache-Neuaufbau (token-geschützt) |
| cron-refresh.php | Cron-Hilfsskript (intern) |
| setup-cron.sh | Interaktives Cron-Setup-Skript |
| clear-cache.php | Cache komplett löschen |
| hilfe.html | Diese Anleitung |
| style.css | Steam-Dark-Theme Styling |
| .htaccess | Apache-Konfiguration (Bludit-Kompatibilität) |
| cache/ | Cache-Verzeichnis (wird automatisch erstellt) |
Installation
Voraussetzungen
- Apache Webserver mit PHP 8.x
- PHP-Erweiterungen:
curl,json,fileinfo - Schreibrechte im
cache/-Verzeichnis für den Webserver - (Optional) Bludit CMS - via
.htaccessbereits konfiguriert
Schritt-für-Schritt
- Alle Dateien in den Webserver-Ordner kopieren (z.B.
/var/www/html/SteamCal/) - Verzeichnisrechte prüfen:
chown www-data:www-data /var/www/html/SteamCal/cache && chmod 755 /var/www/html/SteamCal/cache config.phpöffnen und Steam-ID eintragen (siehe Konfiguration)- Cache initial aufbauen:
https://deinedomain.de/SteamCal/refresh.php?token=DEIN_TOKEN - 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
| Parameter | Beschreibung |
|---|---|
steam_vanity_url | Dein Steam-Benutzername (aus der Profil-URL, z.B. steampowered.com/id/LAN-Taverne) |
steam_id_64 | Deine Steam-ID im64er-Format. Wird von der App automatisch aus dem Benutzernamen aufgelöst. Kann auch unter steamid.io ermittelt werden. |
cache_dir | Pfad zum Cache-Verzeichnis. Standard: __DIR__ . '/cache' |
cache_ttl | Cache-Lebensdauer in Sekunden. 1800 = 30 Minuten. |
calendar_name | Name des Kalenders in der ICS-Datei und im Nextcloud/Google Kalender. |
refresh_interval | Aktualisierungsintervall in Minuten (RFC 7986 REFRESH-INTERVAL in der ICS). |
secret_token | Schlüssel für den refresh.php-Endpunkt. Nur wer diesen Token kennt, kann den Cache neu aufbauen. |
Steam-ID herausfinden
- Gehe zu
https://steamcommunity.com/id/DEIN_NAME - Rechtsklick → Seite Quelltext anzeigen
- Suche nach
steamid→ die Nummer ist deinesteam_id_64 - 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)
- Nextcloud Calendar öffnen
- Auf + (Neuen Kalender abonnieren) klicken
- Link-Adresse eingeben:
https://deinedomain.de/SteamCal/feed.php - Kalender-Name vergeben (z.B. "Steam Wishlist")
- Fertig → Nextcloud aktualisiert automatisch alle 60 Minuten
Alternativen
| Methode | Beschreibung |
|---|---|
feed.php | Abo-Feed mit Auto-Refresh (empfohlen für Nextcloud, Google Calendar, Thunderbird) |
export.php | Einmaliger 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
- Prüfe ob die
cache/-Dateien vorhanden sind - Cache neu aufbauen:
refresh.php?token=DEIN_TOKENaufrufen - Schreibrechte prüfen:
ls -la /var/www/html/SteamCal/cache/
Bludit zeigt "404 Not Found"
- Prüfe ob
RewriteRule ^SteamCal/ - [L]in der Root-.htaccesssteht - Prüfe ob
RewriteEngine OffinSteamCal/.htaccessgesetzt ist
Cache-Refresh schlägt fehl
- Prüfe den Token in
config.php(der im Browser muss genau übereinstimmen) - PHP
max_execution_timeprüfen: Inrefresh.phpwirdset_time_limit(300)gesetzt - Server-Logs prüfen:
/var/log/apache2/error.log
Nextcloud aktualisiert nicht
- Prüfe ob
feed.phpim Browser die ICS-Datei korrekt ausgibt - Nextcloud-Seite neu laden (Strg+Shift+R)
- In Nextcloud Calendar: Abo-URL neu eintragen