QR-codes automatiseren met Python: bibliotheek of REST-API?
Wat een Python-bibliotheek kan
Wie QR-codes met Python wil maken, vindt meerdere gratis bibliotheken. Ze maken van een tekst een afbeelding, vaak ook een SVG, lokaal en zonder dienst. Voor etiketten met serienummers, interne documenten of wifitoegang is dat precies goed.
Waar statische afbeeldingen tegen grenzen aanlopen
Een zo gemaakte QR-code is statisch, de inhoud zit in het patroon. Verandert de bestemming door een relaunch, valt een typefout pas na het drukken op of wil je weten hoe vaak er wordt gescand, dan helpt hij niet verder. Daarvoor zijn er dynamische QR-codes: Same-QR bewaart de bestemming achter een kort, gelijkblijvend adres, telt scans en controleert 's nachts of elke bestemming bereikbaar is.
Dynamische QR-codes via de REST-API
De API staat op https://sameqr.com/api/v1. Maak in het dashboard onder Account, „Toegang voor CLI, scripts en agents”, een sleutel aan, „lezen + schrijven” om aan te maken, en zet hem als omgevingsvariabele SAMEQR_API_KEY. Dit voorbeeld gebruikt alleen de standaardbibliotheek:
import json, os, urllib.request
API = "https://sameqr.com/api/v1"
KEY = os.environ["SAMEQR_API_KEY"]
def rufe(methode, weg, daten=None):
req = urllib.request.Request(
API + weg, method=methode,
data=json.dumps(daten).encode() if daten else None,
headers={"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"})
with urllib.request.urlopen(req) as r:
return json.load(r)
code = rufe("POST", "/qr", {"name": "Anleitung Modell A", "targetUrl": "https://example.com/anleitung-a"})
print(code["id"])Antwoordt de API met een fout, dan gooit urlopen een uitzondering. De inhoud bevat altijd een object error met status, code en message. Werk het uit in plaats van het script blind door te laten lopen.
Een werkwijze uit de praktijk
Een fabrikant drukt op elke verpakking een QR-code naar de handleiding:
- Het script leest de productlijst uit een CSV-bestand.
- Voor elk nieuw product maakt het een QR-code aan en onthoudt de code ervan naast het artikelnummer.
- Verschijnt er een nieuwe versie van de handleiding, dan wijzigt het via PATCH op /qr/<id> alleen de bestemming. Daarvoor heeft het een sleutel „volledig” nodig en de kopregel X-Confirm met de uitgelezen stand.
- Een tweede script met een leessleutel haalt één keer per maand de scanaantallen op.
Houd rekening met de grenzen: hoogstens 10 wijzigingen van de bestemming per uur en 30 per dag via de API, 120 verzoeken per minuut per sleutel, per uur 60 in het gratis abonnement, 300 in Start, 1.000 in Pro en 5.000 in Agentur. Bij 429 wacht je de seconden af die in de header Retry-After staan.
Sleutel veilig in het script
- Schrijf de sleutel nooit in het .py-bestand, maar lees hem uit de omgeving.
- Gebruik voor scripts die alleen lezen een sleutel „alleen lezen”.
- Een eigen sleutel per script, met een duidelijke naam en een passende looptijd.
Conclusie: waarom Same-QR
Voor statische QR-codes volstaat een bibliotheek. Zodra er gedrukt wordt, is Same-QR de betere basis: een slanke REST-API in elk abonnement, begrijpelijke fouten, bescherming tegen gelijktijdig overschrijven en bestemmingen die je na het drukken nog kunt wijzigen.
Begin meteen: registreer je gratis op sameqr.com, 20 dynamische QR-codes zijn blijvend gratis. API, CLI en MCP-server zijn er in elk abonnement, de documentatie staat op sameqr.com/entwickler.
Veelgestelde vragen
Nee. De REST-API werkt met de standaardbibliotheek of met elke bibliotheek voor webverzoeken.
Ja. Voor vaste inhoud volstaat een statische QR-code, voor alles wat gedrukt wordt en mogelijk verandert neem je een dynamische.
In het dashboard als PNG, SVG of PDF, of via de API met dezelfde sleutel. De manieren beschrijft de documentatie op sameqr.com/entwickler.
Nieuwe artikelen rechtstreeks in je inbox
Tips over dynamische QR-codes, nieuwe functies, geen spam. Altijd opzegbaar.
Door je aan te melden stem je in met het ontvangen van de nieuwsbrief. Je kunt je toestemming op elk moment intrekken via de afmeldlink in elke e-mail.