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