Kapitel 13/Tutorial.md hinzugefügt
This commit is contained in:
105
Kapitel 13/Tutorial.md
Normal file
105
Kapitel 13/Tutorial.md
Normal file
@@ -0,0 +1,105 @@
|
||||
## Abschnitt 3 – n8n ↔ Twitch: VOD & Clips importieren, in Nextcloud ablegen, Clipper starten
|
||||
|
||||
In diesem Abschnitt verbinden wir n8n mit Twitch, legen die Dateien auf dem Clipper ab und laden sie nach Nextcloud hoch. **Wichtig:** Twitch unterscheidet zwischen deinem **Login** (sichtbarer Kanalname, z. B. `bratonien_tv`) und deiner **User-ID** (eine **numerische** Kennung, z. B. `123456789`). **Alle** späteren Abfragen nutzen die **User-ID**, nicht den Login. Wir holen sie zuerst und tragen sie dann überall ein.
|
||||
|
||||
---
|
||||
|
||||
### Schritt 1: Zugänge vorbereiten
|
||||
|
||||
**1.1 SSH von n8n → Clipper (passwortlos)**
|
||||
Wechsle in den **n8n-LXC** und richte eine Schlüssel-Anmeldung zum **Clipper-LXC** ein:
|
||||
```bash
|
||||
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
|
||||
ssh-copy-id clipper@<CLIPPER-IP>
|
||||
ssh clipper@<CLIPPER-IP> "echo OK"
|
||||
```
|
||||
Ersetze `<CLIPPER-IP>` durch die IP/den Hostnamen deines Clipper-Containers (z. B. `10.0.0.42`). Wenn **OK** erscheint, steht die Verbindung.
|
||||
|
||||
**1.2 Nextcloud App-Passwort (WebDAV)**
|
||||
Erzeuge in Nextcloud (*Einstellungen → Sicherheit → App-Passwörter*) ein App-Passwort. n8n verwendet später **Basic Auth** (Benutzername = `<DEIN_NC_BENUTZER>`, Passwort = App-Passwort) gegen **genau** dieses WebDAV-Schema:
|
||||
```
|
||||
https://<DEINE_NEXTCLOUD_DOMAIN>/remote.php/dav/files/<DEIN_NC_BENUTZER>/
|
||||
```
|
||||
Beispiel: `https://stream.example.com/remote.php/dav/files/streamer/`
|
||||
|
||||
**1.3 Twitch OAuth (Client-Credentials)**
|
||||
Lege in der [Twitch Developer Console](https://dev.twitch.tv/console) eine App an und notiere **Client ID** und **Client Secret**. In n8n → **Credentials → OAuth2**:
|
||||
Grant Type = *Client Credentials*, Access Token URL = `https://id.twitch.tv/oauth2/token`, Client ID/Secret eintragen, speichern. Details zum Auth-Flow findest du auch in der [Twitch Auth-Dokumentation](https://dev.twitch.tv/docs/authentication).
|
||||
|
||||
---
|
||||
|
||||
### Schritt 2: Deine Twitch **User-ID** (numerisch) einmalig ermitteln
|
||||
|
||||
Viele scheitern hier: Die Helix-API benötigt **immer** die **User-ID**, nicht den Login. Wir holen sie in n8n mit einem **HTTP Request**. Setze das eben angelegte OAuth2-Credential ein und trage zusätzlich den Header `Client-Id: <DEINE_CLIENT_ID>` ein. URL:
|
||||
```
|
||||
https://api.twitch.tv/helix/users?login=<DEIN_LOGIN>
|
||||
```
|
||||
Ersetze `<DEIN_LOGIN>` durch deinen **sichtbaren Kanal-Login**, exakt wie auf Twitch (z. B. `bratonien_tv`). Die Antwort enthält unter `data[0].id` deine **User-ID** (z. B. `123456789`). Notiere diese Zahl und verwende sie ab jetzt überall als `<DEINE_TWITCH_USER_ID>`. Offizielle Referenz: [Twitch API Get Users](https://dev.twitch.tv/docs/api/reference#get-users).
|
||||
|
||||
---
|
||||
|
||||
### Schritt 3: Workflow in n8n – VOD erkennen → herunterladen → Nextcloud → Analyse
|
||||
|
||||
**3.1 Neueste VOD-Metadaten holen (mit User-ID, nicht Login)**
|
||||
Lege in n8n einen **Cron**-Trigger (z. B. alle 10 Minuten) an. Dahinter ein **HTTP Request**:
|
||||
```
|
||||
https://api.twitch.tv/helix/videos?user_id=<DEINE_TWITCH_USER_ID>&type=archive&first=1
|
||||
```
|
||||
Auch hier: OAuth2-Credential + Header `Client-Id: <DEINE_CLIENT_ID>`. In `data[0]` stehen `id`, `title`, `url`, `created_at`, `published_at`. Speichere die letzte verarbeitete `id` in der **Static Data**; wenn die neue `id` identisch ist, beende den Lauf.
|
||||
|
||||
Offizielle Referenz: [Twitch API Get Videos](https://dev.twitch.tv/docs/api/reference#get-videos).
|
||||
|
||||
**3.2 (Optional) Clips zum VOD laden**
|
||||
Füge einen zweiten **HTTP Request** an, der die Clips im Zeitraum des VOD abruft. Nutze **die numerische User-ID** als `broadcaster_id` und die ISO-Zeitstempel aus dem VOD:
|
||||
```
|
||||
https://api.twitch.tv/helix/clips?broadcaster_id=<DEINE_TWITCH_USER_ID>&started_at=<created_at>&ended_at=<published_at>
|
||||
```
|
||||
Das Ergebnis ist eine Liste mit Clip-IDs (z. B. `AgileClip-XYZ`). Offizielle Referenz: [Twitch API Get Clips](https://dev.twitch.tv/docs/api/reference#get-clips).
|
||||
|
||||
**3.3 VOD direkt auf dem Clipper speichern (SSH)**
|
||||
Damit große Dateien nicht zwischen Containern geschoben werden, lädt der **Clipper-LXC** selbst. In n8n fügst du einen **Execute Command (SSH)** ein (Ziel: `clipper@<CLIPPER-IP>`):
|
||||
```bash
|
||||
mkdir -p "/srv/clipper/inbox/{{ $json.data[0].id }}"
|
||||
yt-dlp -o "/srv/clipper/inbox/{{ $json.data[0].id }}/%(title)s.%(ext)s" {{ $json.data[0].url }}
|
||||
```
|
||||
So entsteht lokal `/srv/clipper/inbox/<VOD-ID>/Titel.mp4`. Achte auf die Anführungszeichen – viele Titel enthalten Leerzeichen.
|
||||
|
||||
**3.4 (Optional) Twitch-Clips ablegen**
|
||||
Für jeden Clip rufst du per SSH `yt-dlp` mit der öffentlichen URL auf (z. B. `https://clips.twitch.tv/<CLIP_ID>`). Lege je Clip einen Unterordner an, damit alles getrennt bleibt (z. B. `/srv/clipper/inbox/<CLIP_ID>/…`).
|
||||
|
||||
**3.5 Upload nach Nextcloud (WebDAV, Basic Auth)**
|
||||
In n8n nutzt du für **jede Datei** einen **HTTP Request** (Methode **PUT**) auf das WebDAV-Ziel. Zusammensetzung des Pfads:
|
||||
```
|
||||
https://<DEINE_NEXTCLOUD_DOMAIN>/remote.php/dav/files/<DEIN_NC_BENUTZER>/Clips/{{ $json.data[0].id }}/<Dateiname>
|
||||
```
|
||||
Beispiel: `https://stream.example.com/remote.php/dav/files/streamer/Clips/2075310051/Titel.mp4`
|
||||
|
||||
**3.6 Analyse auf dem Clipper starten**
|
||||
Zum Schluss stößt n8n die Analyse mit einer **eindeutigen Job-ID** an. Per SSH:
|
||||
```bash
|
||||
/srv/clipper/bin/clipper-analyze \
|
||||
"/srv/clipper/inbox/{{ $json.data[0].id }}/{{ $json.data[0].title }}.mp4" \
|
||||
"vod-{{ $json.data[0].id }}"
|
||||
```
|
||||
Das Skript legt eine `candidates.json` im temporären Job-Ordner an. Mit dieser Datei arbeiten wir in Abschnitt 4 weiter.
|
||||
|
||||
---
|
||||
|
||||
### Alternativ (wenn du möchtest): Twitch-Community-Node in n8n
|
||||
|
||||
Falls du statt „HTTP Request“ einen **fertigen Twitch-Node** verwenden willst, kannst du in self-hosted n8n einen **Community-Node** installieren. Das ist bequemer, erfordert aber zusätzliche Pflege (Updates, öffentliche Erreichbarkeit für Webhooks). Für einen robusten Dauerbetrieb bleibt der oben beschriebene Weg über die **offizielle Helix-API** die zuverlässigste Variante. Mehr Infos findest du im [n8n Community Nodes Guide](https://docs.n8n.io/integrations/community-nodes/).
|
||||
|
||||
---
|
||||
|
||||
### Kurz prüfen, ob alles passt
|
||||
|
||||
Logge dich auf dem Clipper ein und kontrolliere Downloads und Logs:
|
||||
```bash
|
||||
su - clipper
|
||||
ls -lh /srv/clipper/inbox
|
||||
ls -lh /srv/clipper/inbox/<VOD-ID>
|
||||
tail -n 80 /srv/clipper/logs/clipper.log
|
||||
```
|
||||
In Nextcloud sollte ein Ordner `Clips/<VOD-ID>/…` mit den Dateien erscheinen. Bei 401/403-Fehlern prüfe **Twitch-Headers (OAuth2 + Client-Id)** und **Nextcloud-Pfad/Anmeldedaten** exakt – Groß/Kleinschreibung und der Teil `remote.php/dav/files/…` sind entscheidend.
|
||||
|
||||
Damit ist die Twitch-Anbindung vollständig implementiert: n8n erkennt neue VODs, lädt VOD und Clips auf dem Clipper, speichert alles strukturiert in Nextcloud und startet die Analyse. Im nächsten Abschnitt kombinieren wir die Clipper-Analyse mit der KI-Auswertung und erzeugen daraus belastbare Schnittbereiche.
|
||||
Reference in New Issue
Block a user