Zum Inhalt

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:

npm install 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:

python -m pip install pandas 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.

Install-Module -Name ImportExcel -RequiredVersion 7.8.10 -Scope CurrentUser
$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.