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.

  1. /categories einmal holen und ablegen.
  2. Je interessanter Kategorie /deals mit min_points=10 durchblättern.
  3. Nach eigenen Kriterien filtern, etwa Mindestpreis oder Marke.
  4. 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.

  1. /search?q=… mit der Produktbezeichnung.
  2. Aus dem passenden Treffer die id nehmen.
  3. /history/{id} holen und price_min sowie price_max mit 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]}')