Kapitel 13/Tutorial.md aktualisiert

This commit is contained in:
2025-08-28 17:46:46 +00:00
parent c70210c46b
commit 942a3348c7

View File

@@ -373,67 +373,56 @@ Im Ergebnis findest du im Feld `data[0].id` deine **User-ID** (z. B. `123456789`
{"file_exists":true,"non_empty":false,"vods":[]} {"file_exists":true,"non_empty":false,"vods":[]}
{"file_exists":true,"non_empty":true,"vods":["123456789","987654321"]} {"file_exists":true,"non_empty":true,"vods":["123456789","987654321"]}
``` ```
5. Set Node Felder übernehmen
5. **Set Node Felder übernehmen** Direkt nach dem SSH Node einen Edit Fields (Set) Node einfügen.
Direkt nach dem SSH Node fügen wir einen **Edit Fields (Set)** Node ein. Damit parsen wir das JSON aus stdout in echte Felder.
Damit parsen wir das JSON aus `stdout` in echte Felder, die wir später leicht in IF- oder anderen Nodes verwenden können.
**Felder (Expressions):** Felder (Expressions):
* `file_exists``={{ JSON.parse($json.stdout).file_exists }}` file_exists → ={{ JSON.parse($json.stdout).file_exists }}
* `non_empty` → `={{ JSON.parse($json.stdout).non_empty }}`
* `vods` → `={{ JSON.parse($json.stdout).vods }}`
```md non_empty → ={{ JSON.parse($json.stdout).non_empty }}
## Schritt 3: Workflow bauen (n8n-Weboberfläche)
1. **Cron-Trigger:** alle 10 Minuten vods → ={{ JSON.parse($json.stdout).vods }}
2. **HTTP Request (Get Videos):**
```
[https://api.twitch.tv/helix/videos?user\_id=](https://api.twitch.tv/helix/videos?user_id=)\<DEINE\_TWITCH\_USER\_ID>\&type=archive\&first=1 6. State ermitteln (Set-Node EIN Feld)
### 6. State ermitteln (Set-Node EIN Feld) Wir bewerten nur den Dateistatus. vodId aus Twitch wird erst später benötigt, wenn die Datei existiert und nicht leer ist.
Wir bewerten **nur den Dateistatus**. `vodId` aus Twitch wird erst später benötigt, wenn die Datei existiert **und** nicht leer ist. Feld: state
Expression:
**Feld:** `state` ```json
**Expression:**
```js
{{ $json.file_exists === false {{ $json.file_exists === false
? 'CREATE_AND_DOWNLOAD' ? 'CREATE_AND_DOWNLOAD'
: ($json.non_empty === false : ($json.non_empty === false
? 'APPEND_AND_DOWNLOAD' ? 'APPEND_AND_DOWNLOAD'
: 'NEED_CHECK') }} : 'NEED_CHECK') }}
``` ```
7. Switch-Node drei klare Wege
--- Switch → Property Name: ={{ $json.state }}
### 7. Switch-Node drei klare Wege Cases:
**Switch → Property Name:** `={{ $json.state }}` CREATE_AND_DOWNLOAD → Datei anlegen und VOD sofort downloaden.
**Cases:** APPEND_AND_DOWNLOAD → Datei ist leer → VOD-ID direkt eintragen und downloaden.
* **CREATE\_AND\_DOWNLOAD** → Datei anlegen **und** VOD sofort downloaden. NEED_CHECK → Datei existiert und ist nicht leer → hier prüfen, ob die aktuelle VOD-ID schon enthalten ist.
* **APPEND\_AND\_DOWNLOAD** → Datei ist leer → VOD-ID direkt eintragen und downloaden.
* **NEED\_CHECK** → Datei existiert und ist nicht leer → hier prüfen, ob die aktuelle VOD-ID schon enthalten ist.
--- Branch NEED_CHECK
### Branch `NEED_CHECK` Set (kurz)
1. **Set (kurz)** currentVod → ={{ $json.vodId ?? $json.data[0].id }}
* `currentVod``={{ $json.vodId ?? $json.data[0].id }}` contains_vod → ={{ Array.isArray($json.vods) && $json.vods.includes($json.currentVod) }}
* `contains_vod` → `={{ Array.isArray($json.vods) && $json.vods.includes($json.currentVod) }}`
2. **IF Node (einmalig in diesem Branch)** IF Node (einmalig in diesem Branch)
* **Bedingung:** `={{ $json.contains_vod === true }}` Bedingung: ={{ $json.contains_vod === true }}
* **True:** Pfad beenden (VOD bereits verarbeitet)
* **False:** Download & Analyse starten, danach ID anhängen
True: Pfad beenden (VOD bereits verarbeitet)
False: Download & Analyse starten, danach ID anhängen