AstroWay/api v2.217.2 · de
alle Systeme in Ordnung

Wie wir die Genauigkeit unter Kontrolle halten: CI gegen swetest und NASA

In einer Astrologie-API verschlechtert sich die Genauigkeit leicht durch ein einziges Refactoring der Ephemeriden. Wir zeigen unseren Schutz: ein Swiss-Ephemeris-Kern für App und API, Hunderte eingefrorene Snapshots auf Referenzhoroskopen und die Triangulation jedes PR gegen swetest CGI, Kerykeion, Prokerala und den Finsterniskatalog der NASA.

Genauigkeit ist das, was Nutzer stillschweigend prüfen, indem sie dich mit Astrodienst vergleichen. Weicht ein Geburtshoroskop um eine Bogenminute ab, kommt die Beschwerde schnell. Und das Schlimmste daran: Genauigkeit lässt sich leicht unbemerkt kaputtmachen. Ein Refactoring im Ephemeriden-Code, und die Hälfte der Endpoints verrutscht still um Bogensekunden.

So verhindern wir das.

Die Planetenpositionen berechnet Swiss Ephemeris. Der entscheidende Punkt: Unsere App und die API teilen sich einen Rechenkern, eine Codebasis. Es gibt keine zwei Implementierungen, die auseinanderlaufen könnten, also läuft nichts auseinander.

Für Daten außerhalb des Hauptbereichs der Ephemeriden gibt es einen analytischen Fallback (Moshier), etwas gröber, aber ohne Sprünge an den Grenzen. Bewusste Ehrlichkeit: Eine konkrete Engine-Version nennen wir öffentlich nicht, weil die tatsächliche Version des Kerns älter ist als der neueste Upstream und eine große Zahl hinzuschreiben eine Lüge wäre.

Jeder Rechen-Endpoint hat einen Satz eingefrorener Snapshots: 873 JSON-Fixtures zum Zeitpunkt dieses Builds. Der Runner lässt den Endpoint über Referenzhoroskope laufen und vergleicht Byte für Byte (innerhalb einer Toleranz) mit der Fixture. Jede Abweichung der Planetenlänge über 5e-5° (0.18″) lässt den Test fehlschlagen.

Die Referenzhoroskope sind so gewählt, dass sie die Ränder treffen und nicht nur die “bequeme” Mitte:

  • Monroe, Diana, Einstein, Bowie: historische Horoskope mit bekannten Geburtsdaten
  • polare Breite: wo Häusersysteme entarten
  • äquatoriale: wo sie sich anders verhalten
  • südliche Hemisphäre: Prüfung der Spiegelung

Gerade die Grenzfälle fangen die Regressionen, die im Horoskop eines durchschnittlichen Kyjiwers nicht auffallen.

Snapshots fangen Regressionen relativ zu sich selbst. Um die absolute Wahrheit zu prüfen, wird jedes Release mit unabhängigen Quellen abgeglichen:

WogegenWas geprüft wirdAbweichung
swetest CGI (Astrodienst)Planetenlängen, Häuserspitzen0.000″
Kerykeion (Python, pyswisseph)unabhängige Implementierung von SwEph< 0.2″
Prokerala (sidereal Lahiri)siderische Positionen8-17″, systematischer Unterschied in der Ayanamsa-Formel, nicht in der Engine
NASA 5-Millennium Eclipse CatalogZeitpunkt und Typ von Finsternissen< 1 Min.

Die Abweichung zu Prokerala ist kein Fehler: Es sind unterschiedliche Implementierungen der Lahiri-Formel, und wir dokumentieren das ausdrücklich, statt es zu verstecken. Gegenüber swetest, dem Branchenstandard, ist die Drift null.

Astrokartografie-Linien werden separat geometrisch geprüft: Die Genauigkeit am Äquator liegt unter 1.5 km.

Genauigkeit ist ein CI-Gate, keine einmalige Prüfung:

  • api-accuracy.yml: führt bei jedem PR auf den Backend-Code den gesamten Snapshot-Satz + die Triangulation aus. Ein roter Test blockiert den Merge.
  • check-eclipse-accuracy.yml: gleicht einmal im Jahr die Finsternisse mit dem NASA-Katalog ab; eine Abweichung über dem Schwellenwert legt automatisch ein Issue an.
  • check-sweph-updates.yml: beobachtet wöchentlich den Upstream von Swiss Ephemeris; eine neue Version erzeugt ein Issue zum Review, ohne Auto-Merge (ein Update der Ephemeriden-Engine ist zu heikel für automatische Updates).

Die Garantie ist einfach: Planetenpositionen innerhalb von < 0.1 Bogensekunden gegenüber der Referenz Swiss Ephemeris, und diese Grenze ist durch Automatisierung abgesichert, nicht durch ein Versprechen im README. Taucht irgendwann eine Regression auf, schlägt sie in unserer CI fehl und nicht in der Beschwerde deines Nutzers.

Die öffentliche Version dieser Zahlen, mit einer Abweichungstabelle für konkrete Horoskope, steht auf der Seite Genauigkeit.

MakSeong · AstroWay

Ich entwickle das AstroWay API: packe Swiss Ephemeris in reines REST und schreibe über langweilige Details, die eigentlich wichtig sind.

// darauf aufbauen

Derselbe Swiss Ephemeris wie in Solar Fire - in 4 Zeilen Code.

Kostenloser Schlüssel ohne Kreditkarte. 5.000 Aufrufe pro Monat vor der ersten Zahlung.

Mehr aus dem Blog alle Beiträge →

Engineering 2026-07-15

Drei offizielle SDKs: TypeScript, Python, PHP statt rohem curl

Rohes HTTP funktioniert, aber ein typisierter Client spart Stunden: Autovervollständigung der Pfade, Request- und Response-Typen, eingebauter Retry bei 408/409/429/5xx und eine Fehlerhierarchie im Stainless-Stil. Wir gehen die drei offiziellen SDKs durch, @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist), und zeigen, wie sie aus einem einzigen OpenAPI-Vertrag generiert werden.

Industry 2026-06-05

Free Astrology API: Which One Has the Best Free Tier in 2026?

A side-by-side of free tiers across the major astrology APIs - credits, request caps, card requirements - and how much you can actually build for free.

Engineering 2026-06-05

Horoscope API Tutorial: Build a Daily Horoscope Feature

Add daily, weekly and monthly horoscopes to your app via API - sign-based text vs transit-based personalization - with TypeScript and Python code.