Partner-API
› Referenz › Rezepte
Rezepte
Tagesaktuelle Deal-Liste aufbauen
Der übliche Anwendungsfall einer Deal-Redaktion. Einmal täglich alles holen, bei sich ablegen, daraus die eigene Auswahl treffen.
/categorieseinmal holen und ablegen.- Je interessanter Kategorie
/dealsmitmin_points=10durchblättern. - Nach eigenen Kriterien filtern, etwa Mindestpreis oder Marke.
- Für die ausgewählten Artikel
/history/{id}nachladen und den Verlauf als Beleg zeigen.
Einen Preis gegenprüfen
Ein Shop bewirbt einen Artikel als Schnäppchen, und du willst wissen, ob das stimmt.
/search?q=…mit der Produktbezeichnung.- Aus dem passenden Treffer die
idnehmen. /history/{id}holen undprice_minsowieprice_maxmit dem beworbenen Preis vergleichen.
Fehler sauber behandeln
import requests, time
def hole(pfad, params=None, versuche=3):
for n in range(versuche):
r = requests.get("https://goodsway.de/api/partner/v1" + pfad,
headers={"X-API-Key": "gw_DEIN_SCHLUESSEL"},
params=params, timeout=30)
if r.status_code == 200:
return r.json()
fehler = r.json().get("error", {})
code = fehler.get("code")
# Diese Fehler gehen auch beim zweiten Versuch nicht weg.
if code in ("parameter_ungueltig", "kein_schluessel",
"schluessel_ungueltig", "nicht_freigegeben",
"bereich_nicht_freigegeben", "nicht_gefunden"):
raise RuntimeError(f"{code}: {fehler.get('message')}")
if code == "tageslimit_erreicht":
raise RuntimeError("Kontingent aufgebraucht, morgen weiter")
time.sleep(2 ** n * 2) # 2 s, 4 s, 8 s
raise RuntimeError("nach mehreren Versuchen keine Antwort")Nur Allzeittiefs herausfiltern
Ein Artikel ist auf seinem tiefsten je gemessenen Stand, wenn
price_current und price_lowest gleich sind.
tiefs = [d for d in deals
if d["price_current"] == d["price_lowest"]
and d["measurements"] >= 15]
for d in sorted(tiefs, key=lambda x: -x["discount_pct"])[:10]:
print(f'{d["discount_pct"]:5.1f} % {d["title"][:60]}')