Develop app delijn / belgium

I made an app to check the hours of the bus near my house.
In python it looks like + working:

import urllib.request
import json

Configuratie voor De Lijn API

API_URL = “https://api.delijn.be/DLKernOpenData/api/v1/haltes/2/202485/real-time?maxAantalDoorkomsten=4
HEADERS = {
“Cache-Control”: “no-cache”,
“Ocp-Apim-Subscription-Key”: “18930f3cc1784a319f9b51c9e32f1d09”, # Jouw API-sleutel
}

Functie om de API-response op te halen

def fetch_json():
try:
req = urllib.request.Request(API_URL, headers=HEADERS)
with urllib.request.urlopen(req) as response:
if response.getcode() != 200:
raise Exception(f"API gaf statuscode {response.getcode()}“)
data = response.read().decode(“utf-8”)
return json.loads(data) # Retourneer als JSON-dict
except Exception as e:
print(f"Fout bij ophalen van API: {e}”)
return None

Functie om een overzicht te maken van alle lijnen en tijden

def get_departures_overview(data):
try:
items =
# Controleer of de JSON correct is
halte_doorkomsten = data.get(“halteDoorkomsten”, )
if not halte_doorkomsten:
return “Geen doorkomsten gevonden.”

    # Doorloop de doorkomsten en voeg ze toe aan de lijst
    for halte in halte_doorkomsten:
        for doorkomst in halte.get("doorkomsten", []):
            lijn = doorkomst.get("lijnnummer", "??")
            tijd = doorkomst.get("real-timeTijdstip", "??")
            if tijd != "??":
                tijd = tijd[-8:]  # Alleen HH:MM:SS
            items.append(f"Lijn {lijn}: {tijd}")
    
    if not items:
        return "Geen doorkomsten beschikbaar."
    return "\n".join(items)  # Elke lijn op een nieuwe regel
except Exception as e:
    print(f"Fout bij verwerken van gegevens: {e}")
    return "Fout bij verwerken gegevens."

Hoofdfunctie

def main():
# Haal JSON op
data = fetch_json()
if data:
# Toon overzicht
overview = get_departures_overview(data)
print(“Output naar scherm:”)
print(overview) # Print overzicht naar console
else:
print(“Geen gegevens opgehaald.”)

if name == “main”:
main()


but starlark doesn’t want to work…

load(“http.star”, “http”)
load(“render.star”, “render”)
load(“encoding/json.star”, “json”)

def main():
# API URL
url = “https://api.delijn.be/DLKernOpenData/api/v1/haltes/2/202485/real-time?maxAantalDoorkomsten=4

# Headers voor de API-aanroep
headers = {
    "Cache-Control": "no-cache",
    "Ocp-Apim-Subscription-Key": "18930f3cc1784a319f9b51c9e32f1d09"  # Jouw API-sleutel
}

# Haal gegevens op via http.get()
response = http.get(url = url, headers = headers)

# Controleer of de aanvraag succesvol was
if response.status_code != 200:
    return render.Root(
        child = render.Text(
            "Fout bij ophalen gegevens: Status {}".format(response.status_code),
            font = "6x13"
        )
    )

# Decodeer de JSON-response
try:
    data = json.decode(response.body)
except:
    return render.Root(
        child = render.Text(
            "Fout bij decoderen JSON",
            font = "6x13"
        )
    )

# Verwerk de JSON en genereer een overzicht
items = []
for halte in data.get("halteDoorkomsten", []):
    for doorkomst in halte.get("doorkomsten", []):
        lijn = doorkomst.get("lijnnummer", "??")
        tijd = doorkomst.get("real-timeTijdstip", "??")[-8:]  # Alleen HH:MM:SS
        items.append("Lijn {}: {}".format(lijn, tijd))

# Controleer of er items zijn
if not items:
    text = "Geen doorkomsten gevonden."
else:
    text = "\n".join(items)  # Genereer een string met nieuwe regels

# Toon het overzicht in een WrappedText-widget
return render.Root(
    child = render.WrappedText(
        text = text,
        font = "6x13",
        width = 64
    )
)

Does anyone knows what’s going wrong here ?
Thx, Kristof

I don’t think starlark supports try/except blocks. Take those out.