Zum Inhalt springen
  • Dunkel
  • Hell
  • System

Fetch URL: HTTP-Requests an externe APIs

Ruft eine externe URL auf und parst die Antwort. Damit baust du API-Commands: Wetter, Witze, Übersetzungen, Pokémon-Daten und alles andere was eine öffentliche API anbietet.

Core Network Fetch URL

Doku: docs.streamer.bot · Fetch URL

FeldBedeutungEmpfehlung
URLDie API-URL. Unterstützt %variablen%z.B. https://api.example.com/data?q=%input0%
MethodHTTP-Methode: GET, POST, PUT, DELETE, PATCHmeist GET für Lese-Abfragen
Content TypeBody-Format bei POST/PUT: application/json, text/plain, etc.application/json bei JSON-Body
BodyRequest-Body (nur bei POST/PUT/PATCH)JSON-String mit %variablen%
HeadersZusätzliche HTTP-Header (Key-Value-Paare)für API-Keys: Authorization: Bearer %apiKey%

Nach einem erfolgreichen Fetch stehen diese Variablen zur Verfügung:

VariableInhalt
Argument %fetchUrlStatusCode% HTTP Status-Code der Antwort. 200 = OK, 404 = Not Found, 500 = Server Error. Variablen-Doku HTTP Status-Code (200, 404, 500, …)
Argument %fetchUrlIsSuccess% bool: true wenn Status 2xx, false bei Fehler. Variablen-Doku true wenn Status 2xx

Streamer.bot parst JSON-Antworten automatisch und legt die Werte als Variablen ab. Bei dieser API-Antwort:

{
"location": { "name": "Berlin" },
"current": {
"temp_c": 22.5,
"condition": { "text": "Sonnig" }
}
}

Entstehen automatisch:

VariableWert
%fetchUrlResult.location.name%Berlin
%fetchUrlResult.current.temp_c%22.5
%fetchUrlResult.current.condition.text%Sonnig

Die Punkt-Notation folgt der JSON-Verschachtelung.

Bei Arrays nutzt SB eckige Klammern mit Index:

{
"results": [
{ "text": "Erster Witz" },
{ "text": "Zweiter Witz" }
]
}
VariableWert
%fetchUrlResult.results[0].text%Erster Witz
%fetchUrlResult.results[1].text%Zweiter Witz
[Cmd] !joke
├── 1. Fetch URL
│ URL: https://official-joke-api.appspot.com/random_joke
│ Method: GET
├── 2. If/Else: %fetchUrlIsSuccess% Equals false
│ ├── Send Message: "@%user% API gerade nicht erreichbar."
│ └── Break
├── 3. Send Message: "%fetchUrlResult.setup% — %fetchUrlResult.punchline%"
[Cmd] !weather
├── 1. If/Else: %input0% Is Null or Empty
│ ├── Send Message: "@%user% Nutzung: !weather Berlin"
│ └── Break
├── 2. Fetch URL
│ URL: https://wttr.in/%input0%?format=3
│ Method: GET
├── 3. Send Message: "@%user% %fetchUrlResult%"
├── Fetch URL
│ URL: https://api.example.com/data
│ Method: POST
│ Content Type: application/json
│ Body: {"username": "%userName%", "message": "%input0%"}

Manche APIs brauchen einen API-Key im Header:

├── Fetch URL
│ URL: https://api.example.com/translate
│ Method: GET
│ Headers:
│ X-Api-Key: (dein Key hier)

Immer nach einem Fetch den Erfolg prüfen:

├── Fetch URL: ...
├── If/Else: %fetchUrlIsSuccess% Equals false
│ ├── Send Message: "@%user% API gerade nicht erreichbar. Versuch's später."
│ └── Break
├── (normaler Ablauf mit API-Daten)
  • API-URL falsch: Kein Ergebnis, aber auch kein Fehler im Chat. Status prüfen.
  • JSON-Pfad falsch: %fetchUrlResult.data.text% statt %fetchUrlResult.text%. Die Struktur der API-Antwort VORHER prüfen (Browser oder curl).
  • Rate Limiting: Viele APIs haben Limits (z.B. 60 Requests/Minute). Cooldown auf den Command setzen.
  • HTTPS Pflicht: Manche APIs funktionieren nur über HTTPS. http:// kann geblockt werden.
  • Timeout: Wenn die API > 5 Sekunden braucht, gibt SB auf. Nichts was du konfigurieren kannst.
  • Sonderzeichen im Input: !weather New York → Leerzeichen in URL. $urlEncode()$ nutzen.