Skriptbeispiele¶
Für die Beispiele hier wird der Endpunkt zum Abruf von Schichten verwendet. Andere Endpunkte funktionieren natürlich analog.
Snippets¶
Die folgenden kompakten Beispiele zeigen den Ablauf „technisches Login → Session-Token → JSON-Schichtabruf“. Die verwendeten Variablen müssen vor der Ausführung gesetzt werden.
Hurl¶
# Die Variablen host, username, password, shift_group_token, start_date und
# end_date werden beispielsweise mit --variable oder HURL_VARIABLE_* gesetzt.
GET https://{{host}}/partner-auth/v1/token
Accept: application/json
[BasicAuth]
{{username}}: {{password}}
HTTP 200
[Captures]
session_token: jsonpath "$.tokenString"
# Das zuvor abgerufene Session-Token berechtigt den Datenabruf.
GET https://{{host}}/planerio/planning/shifts/api/external/{{shift_group_token}}/shifts
X-Planerio-API-Gateway-Auth: {{session_token}}
Accept: application/json
[Query]
startDate: {{start_date}}
endDate: {{end_date}}
format: json
HTTP 200
Node.js mit fetch¶
// Technisches Login per HTTP Basic Auth gegen ein Session-Token tauschen.
const basicAuth = Buffer.from(`${username}:${password}`, 'utf8').toString('base64');
const tokenResponse = await fetch(`https://${host}/partner-auth/v1/token`, {
headers: { Authorization: `Basic ${basicAuth}`, Accept: 'application/json' },
});
if (!tokenResponse.ok) throw new Error(`Token-Abruf fehlgeschlagen: HTTP ${tokenResponse.status}`);
const { tokenString } = await tokenResponse.json();
const shiftsUrl = new URL(`https://${host}/planerio/planning/shifts/api/external/${encodeURIComponent(shiftGroupToken)}/shifts`);
shiftsUrl.search = new URLSearchParams({ startDate, endDate, format: 'json' });
// Das Session-Token berechtigt den folgenden Datenabruf.
const shiftsResponse = await fetch(shiftsUrl, {
headers: { 'X-Planerio-API-Gateway-Auth': tokenString, Accept: 'application/json' },
});
if (!shiftsResponse.ok) throw new Error(`Schichtabruf fehlgeschlagen: HTTP ${shiftsResponse.status}`);
const shifts = await shiftsResponse.json();
Python¶
import base64
import json
from urllib.parse import quote, urlencode
from urllib.request import Request, urlopen
# Technisches Login per HTTP Basic Auth gegen ein Session-Token tauschen.
basic_auth = base64.b64encode(f"{username}:{password}".encode("utf-8")).decode("ascii")
token_request = Request(
f"https://{host}/partner-auth/v1/token",
headers={"Authorization": f"Basic {basic_auth}", "Accept": "application/json"},
)
with urlopen(token_request, timeout=30) as response:
token_string = json.loads(response.read().decode("utf-8"))["tokenString"]
query = urlencode({"startDate": start_date, "endDate": end_date, "format": "json"})
shifts_url = f"https://{host}/planerio/planning/shifts/api/external/{quote(shift_group_token, safe='')}/shifts?{query}"
# Das Session-Token berechtigt den folgenden Datenabruf.
shifts_request = Request(
shifts_url,
headers={"X-Planerio-API-Gateway-Auth": token_string, "Accept": "application/json"},
)
with urlopen(shifts_request, timeout=30) as response:
shifts = json.loads(response.read().decode("utf-8"))
PowerShell¶
# Technisches Login per HTTP Basic Auth gegen ein Session-Token tauschen.
$credentialText = "$TechnicalUsername`:$TechnicalPassword"
$basicAuth = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($credentialText))
$tokenResponse = Invoke-RestMethod -Method Get -Uri "https://$PlanerioHost/partner-auth/v1/token" -Headers @{
Authorization = "Basic $basicAuth"
Accept = 'application/json'
}
$shiftsUri = "https://$PlanerioHost/planerio/planning/shifts/api/external/$([Uri]::EscapeDataString($ShiftGroupToken))/shifts?startDate=$StartDate&endDate=$EndDate&format=json"
# Das Session-Token berechtigt den folgenden Datenabruf.
$shifts = Invoke-RestMethod -Method Get -Uri $shiftsUri -Headers @{
'X-Planerio-API-Gateway-Auth' = $tokenResponse.tokenString
Accept = 'application/json'
}
Vollständige, herunterladbare Skriptbeispiele¶
Die vollständigen Abrufskripte lesen Zugangsdaten und Parameter ein, rufen ein Session-Token ab, laden Schichten als JSON herunter und speichern die Antwort formatiert. Die separaten Konverter erzeugen daraus eine Excel-Datei.
Konfiguration und Sicherheit¶
Die folgenden Werte werden für die Abrufskripte benötigt. Kommandozeilenoptionen haben stets Vorrang vor Umgebungsvariablen.
| Umgebungsvariable | Bedeutung |
|---|---|
PLANERIO_HOST |
API-Gateway-Host, z. B. example.api-gw.planer.io. Die Skripte ergänzen bei Bedarf https://. |
PLANERIO_TECHNICAL_USERNAME |
Benutzername des technischen Logins |
PLANERIO_TECHNICAL_PASSWORD |
Passwort des technischen Logins |
PLANERIO_SHIFT_GROUP_TOKEN |
Schichtgruppen-Token für den Datenzugriff |
PLANERIO_START_DATE |
Beginn des Abrufzeitraums im Format YYYY-MM-DD |
PLANERIO_END_DATE |
Ende des Abrufzeitraums im Format YYYY-MM-DD |
PLANERIO_JSON_OUTPUT |
Optionaler Pfad der erzeugten JSON-Datei; Standard: schichten.json |
Für die Konvertierung werden PLANERIO_JSON_INPUT für die Eingabe und PLANERIO_EXCEL_OUTPUT für die Ausgabedatei verwendet. Der Standardname der Excel-Datei ist schichten.xlsx.
⚠️ Übergeben Sie Zugangsdaten bevorzugt per Umgebungsvariable oder über einen Secrets Manager. Passwortoptionen in der Kommandozeile können in der Shell-Historie oder Prozessliste sichtbar sein. Verwenden Sie ausschließlich das technische Login, nicht das Benutzer- oder Administrator-Login von Planerio.
Node.js mit fetch¶
Voraussetzung ist Node.js 18 oder neuer; der JSON-Abruf verwendet das darin enthaltene fetch. Für die Excel-Konvertierung installieren Sie einmalig das Paket write-excel-file:
export PLANERIO_HOST='example.api-gw.planer.io'
export PLANERIO_TECHNICAL_USERNAME='REPORT04-BEISPIEL-3783035927'
export PLANERIO_TECHNICAL_PASSWORD='Ihr-technisches-Passwort'
export PLANERIO_SHIFT_GROUP_TOKEN='aaa-bbb-ccc'
export PLANERIO_START_DATE='2026-08-01'
export PLANERIO_END_DATE='2026-08-31'
node examples/nodejs/download-shifts.mjs
node examples/nodejs/json-to-excel.mjs --input schichten.json --output schichten.xlsx
Python mit pandas¶
Der JSON-Abruf verwendet ausschließlich die Python-Standardbibliothek. Für die Excel-Konvertierung installieren Sie pandas und die XLSX-Engine openpyxl:
export PLANERIO_HOST='example.api-gw.planer.io'
export PLANERIO_TECHNICAL_USERNAME='REPORT04-BEISPIEL-3783035927'
export PLANERIO_TECHNICAL_PASSWORD='Ihr-technisches-Passwort'
export PLANERIO_SHIFT_GROUP_TOKEN='aaa-bbb-ccc'
export PLANERIO_START_DATE='2026-08-01'
export PLANERIO_END_DATE='2026-08-31'
python examples/python/download_shifts.py
python examples/python/json_to_excel.py --input schichten.json --output schichten.xlsx
PowerShell mit ImportExcel¶
Für die Excel-Konvertierung installieren Sie das Modul ImportExcel 7.8.10. Microsoft Excel muss dafür nicht lokal installiert sein.
$env:PLANERIO_HOST = 'example.api-gw.planer.io'
$env:PLANERIO_TECHNICAL_USERNAME = 'REPORT04-BEISPIEL-3783035927'
$env:PLANERIO_TECHNICAL_PASSWORD = 'Ihr-technisches-Passwort'
$env:PLANERIO_SHIFT_GROUP_TOKEN = 'aaa-bbb-ccc'
$env:PLANERIO_START_DATE = '2026-08-01'
$env:PLANERIO_END_DATE = '2026-08-31'
.\examples\powershell\Download-Shifts.ps1
.\examples\powershell\Convert-JsonToExcel.ps1 -InputPath schichten.json -OutputPath schichten.xlsx
Kommandozeilenoptionen¶
Bei Node.js und Python entsprechen die Optionen den Variablennamen in Kleinbuchstaben: --host, --username, --password, --shift-group-token, --start-date, --end-date und --output. Für die Konverter stehen --input und --output zur Verfügung.
PowerShell verwendet die Parameter -PlanerioHost, -TechnicalUsername, -TechnicalPassword, -ShiftGroupToken, -StartDate, -EndDate und -OutputPath; für die Konvertierung -InputPath und -OutputPath.