Zum Inhalt springen

Einen zuverlässigen Feed-Abgleich entwickeln

Entwicklerhandbuch · Zuletzt aktualisiert am 16.08.2026

Auf dieser Seite
  1. Empfohlene Strategie
  2. Feed-Umfang zuerst abgleichen
  3. Neue Posts mit updated_since abrufen
  4. Warum since für einen Sync nicht genügt
  5. Alle Cursor-Seiten vollständig durchlaufen
  6. Entfernte Posts sicher erkennen
  7. Robuster Ablauf als Pseudocode

Ein zuverlässiger Client muss zwei Aufgaben getrennt behandeln: neue Posts schnell übernehmen und regelmäßig feststellen, welche Inhalte nicht mehr zum Feed gehören. Ein einzelner Zeitfilter kann beides nicht leisten.

Empfohlene Strategie#

  1. Rufe zuerst /api/v1/feeds ab und prüfe den aktuellen Feed-Umfang.
  2. Hole neu eingetroffene Posts mit updated_since.
  3. Führe regelmäßig einen vollständigen Durchlauf durch alle Cursor-Seiten aus.
  4. Entferne lokale Posts erst, wenn ein vollständiger Durchlauf erfolgreich abgeschlossen wurde.
  5. Behalte den lokalen Bestand bei Netzwerkfehlern, 5xx-Antworten oder einer unlesbaren Antwort unverändert.

Feed-Umfang zuerst abgleichen#

GET /api/v1/feeds liefert genau die Feeds, die das verwendete Token aktuell abdeckt und die aktiv ausgeliefert werden. Verknüpfungen mit „Alle Feeds“ nehmen auch später angelegte Feeds automatisch auf.

Eine gültige, wohlgeformte Antwort darf deinen lokalen Umfang verändern:

  • Neue Feed-ID → lokalen Feed anlegen.
  • Bekannte Feed-ID mit geändertem updated_at → Metadaten und Darstellung aktualisieren.
  • Lokal vorhandene Feed-ID fehlt → lokale Kopie entfernen oder deaktivieren.

Wichtig

Eine Zeitüberschreitung, ein Verbindungsfehler oder eine unlesbare Antwort ist keine leere Feed-Liste. Nur eine erfolgreiche Antwort mit data als Array darf zum Entfernen lokaler Feeds führen.

Neue Posts mit updated_since abrufen#

updated_since filtert nach dem Zeitpunkt, zu dem Feedivo einen Post erstmals gesehen hat. Damit erfasst du auch Beiträge, die erst nach ihrem eigentlichen Veröffentlichungszeitpunkt bei Feedivo angekommen sind.

GET /api/v1/feeds/{uuid}/posts?updated_since=2026-08-16T08:00:00Z

Speichere als Wasserzeichen den Startzeitpunkt des erfolgreichen Laufs, nicht dessen Ende:

run_started_at = now()
alle Cursor-Seiten mit updated_since=last_successful_run abrufen
erst nach vollständigem Erfolg:
    last_successful_run = run_started_at

So werden Posts, die während eines längeren Laufs eintreffen, beim nächsten Durchgang nicht übersprungen.

Hinweis

updated_since bedeutet „erstmals gesehen“, nicht „zuletzt bearbeitet“. Änderungen an älteren Posts und Löschungen erkennst du nur über einen vollständigen Abgleich.

Warum since für einen Sync nicht genügt#

since filtert nach published_at, also nach dem Veröffentlichungszeitpunkt auf der Plattform. Dieser kann deutlich vor dem Zeitpunkt liegen, zu dem der Post bei Feedivo eintrifft. Setzt du since exakt auf den letzten Lauf, kann ein verspätet eingetroffener Post unbemerkt fehlen.

Nutze since deshalb für fachliche Zeiträume wie „alle Posts seit dem Monatsanfang“. Für die technische Synchronisierung ist updated_since die richtige Achse.

Alle Cursor-Seiten vollständig durchlaufen#

Jede Post-Liste enthält:

{
  "meta": {
    "pagination": {
      "next_cursor": "eyJ…",
      "count": 25
    }
  }
}

Sende next_cursor unverändert als cursor an den nächsten Aufruf. Der Cursor ist opak: nicht dekodieren, verändern oder selbst erzeugen. Erst next_cursor: null bestätigt die letzte Seite.

Eine leere Seite ohne vorhandenen next_cursor-Schlüssel ist keine gültige Abschlussmeldung. Behandle eine solche Antwort als fehlerhaft und behalte den lokalen Bestand.

Entfernte Posts sicher erkennen#

Ein Vollabgleich läuft ohne updated_since über alle Seiten. Markiere dabei jede lokal gefundene Kombination aus Feed-ID, Plattform und Post-ID als gesehen. Erst wenn die letzte Seite erfolgreich erreicht wurde, entfernst du lokale Zuordnungen, die in diesem Lauf nicht vorkamen.

Das erfasst unter anderem:

  • auf der Plattform gelöschte Posts
  • nachträglich ausgeblendete Posts
  • Änderungen an Feed-Filtern
  • zusammengefasste Duplikate
  • eine verkleinerte Grenze bei Posts insgesamt
  • abgelaufene Stories

Ein Post kann zu mehreren Feeds gehören. Lösche deine lokale Post-Kopie daher erst, wenn sie keinem aktiven Feed mehr zugeordnet ist.

Robuster Ablauf als Pseudocode#

feeds = fetch_and_validate('/api/v1/feeds')
if request_failed:
    keep_everything()
    retry_later()

for each feed in feeds:
    run_started_at = now()
    pages = fetch_all_pages(feed, updated_since=watermark[feed])
    if every_page_valid:
        upsert(pages.posts)
        watermark[feed] = run_started_at

if full_reconciliation_due:
    for each feed in feeds:
        pages = fetch_all_pages(feed)
        if every_page_valid:
            replace_feed_membership(feed, pages.post_ids)

Fehlerbehandlung und Wiederholungsregeln stehen unter Fehler und Rate-Limits behandeln.

Frage nicht beantwortet? Schreib uns — wir ergänzen die Seite.