AstroWay/api v2.190.0 · el
όλες οι υπηρεσίες λειτουργούν κανονικά

Πώς διατηρούμε την ακρίβεια υπό έλεγχο: CI εναντίον swetest και NASA

Η ακρίβεια στο astro-API υποβαθμίζεται εύκολα από μια μόνο ανασυγκρότηση των εφεμερίδων. Αναλύουμε την προστασία: ένας πυρήνας Swiss Ephemeris για το πρόγραμμα περιήγησης και τον διακομιστή, εκατοντάδες παγωμένα snapshots σε πρότυπους χάρτες και τριγωνοποίηση κάθε PR εναντίον swetest CGI, Kerykeion, Prokerala και του καταλόγου σκιών της NASA.

Η ακρίβεια είναι αυτό που ο χρήστης ελέγχει σιωπηλά σε Astrodienst. Αν ο γενέθλιος χάρτης διαφέρει κατά μια γωνιακή λεπτό, η καταγγελία θα έρθει γρήγορα. Και το χειρότερο είναι ότι η ακρίβεια είναι εύκολο να σπάσει αθόρυβα: μια αναδιάρθρωση στον κώδικα των εφεμείρων, και τα μισά endpoint έφυγαν σιωπηλά σε δευτερόλεπτα τόξου.

Αυτή είναι η προσέγγισή μας για να μην το αφήσουμε να συμβεί.

Οι πλανητικές θέσεις υπολογίζονται από το Swiss Ephemeris, μεταγλωττισμένο σε WASM. Το κλειδί: είναι ο ίδιος πυρήνας τόσο στο πρόγραμμα περιήγησης της εφαρμογής μας όσο και στον διακομιστή API. Μία βάση κώδικα core/, ενσωματωμένη στο backend μέσω cross-repo alias και ενσωματωμένη στο bundle στο build. Δεν υπάρχει «προγραμματιστική» και «διακομιστική» υλοποίηση που μπορεί να διαφέρει - δεν υπάρχει διαφορά.

Για ημερομηνίες εκτός του κύριου εύρους, τα εφεμερίδια έχουν αναλυτικό fallback (Moshier), λίγο πιο αδρό, αλλά χωρίς κενά στα όρια. Ειλικρινής ειλικρίνεια: δεν δηλώνουμε δημόσια την ακριβή έκδοση του κινητήρα, επειδή η πραγματική έκδοση του πυρήνα είναι χαμηλότερη από το πιο πρόσφατο upstream, και η αναφορά ενός μεγάλου αριθμού θα ήταν ψέμα.

Κάθε υπολογιστικό endpoint έχει ένα σύνολο παγωμένων snapshots - 873 JSON fixtures τη στιγμή αυτού του build. Ο runner εκτελεί το endpoint σε αναφορά χάρτες και byte‑wise (μέσα στο tolerance) συγκρίνει με τη fixture. Οποιαδήποτε απόκλιση της πλανητικής μακρογώνου μεγαλύτερη από 5e-5° (0.18″) αποτυγχάνει το τεστ.

Οι αναφορά χάρτες έχουν επιλεγεί ώστε να δοκιμάζουν τα άκρα, όχι μόνο το «βολικό» κέντρο:

  • Monroe, Diana, Einstein, Bowie - ιστορικοί χάρτες με γνωστά δεδομένα γέννησης
  • πολική latitude - όπου τα συστήματα οίκων παραμορφώνονται
  • ισημερινή - όπου συμπεριφέρονται διαφορετικά
  • νότια ημισφαίριο - έλεγχος συμμετρίας

Οι άκρες περιπτώσεις εντοπίζουν ακριβώς εκείνες τις παλινδρομήσεις που δεν φαίνονται στον χάρτη ενός υποθετικού κίγανου.

Τριγωνοποίηση έναντι εξωτερικών πηγών

Ενότητα με τίτλο «Τριγωνοποίηση έναντι εξωτερικών πηγών»

Τα snapshots εντοπίζουν παλινδρομήσεις σε σχέση με τον εαυτό τους. Για να ελέγξουμε την απόλυτη αλήθεια, κάθε έκδοση συγκρίνεται με ανεξάρτητες πηγές:

Αντί γιαΤι ελέγχειΔιαφορές
swetest CGI (Astrodienst)πλανητικές μακρογώνους, cuspids οίκων0.000″
Kerykeion (Python, pyswisseph)ανεξάρτητη υλοποίηση SwEph< 0.2″
Prokerala (sidereal Lahiri)sidereal θέσεις8-17″, συστημική διαφορά τύπου ayanamsa, όχι του κινητήρα
NASA 5-Millennium Eclipse Catalogχρόνος και τύπος εκλείψεων< 1 хв

Οι διαφορές με το Prokerala δεν είναι σφάλμα: είναι διαφορετικές υλοποιήσεις του τύπου Lahiri, και το τεκμηριώνουμε ρητά, όχι κρύβουμε. Με το swetest, που είναι το βιομηχανικό πρότυπο, η απόκλιση είναι μηδενική.

Οι αστρο‑καρτογραφικές γραμμές ελέγχονται ξεχωριστά γεωμετρικά - η ακρίβεια στον ισημερινό είναι καλύτερη από 1.5 km.

Η ακρίβεια είναι CI-gate, όχι μια εφάπαξ έλεγχος:

  • api-accuracy.yml - σε κάθε PR ο κώδικας backend εκτελεί όλο το σύνολο των snapshots + τριγωνοποίηση. Ένα κόκκινο τεστ μπλοκάρει το merge.
  • check-eclipse-accuracy.yml - μία φορά το χρόνο συγκρίνει τις εκλείψεις με τον κατάλογο NASA· η διαφορά πάνω από το όριο δημιουργεί αυτόματα issue.
  • check-sweph-updates.yml - κάθε εβδομάδα παρακολουθεί το upstream Swiss Ephemeris και το WASM πακέτο· νέα έκδοση - issue για review, χωρίς auto‑merge (η ενημέρωση του κινητήρα εφεμερίδων είναι πολύ ευαίσθητη για auto‑update).

Η εγγύηση είναι απλή: πλανητικές θέσεις εντός < 0.1 γωνιακό δευτερόλεπτο από το πρότυπο Swiss Ephemeris, και αυτό το όριο προστατεύεται από αυτοματισμούς, όχι από υπόσχεση στο README. Αν κάποια στιγμή εμφανιστεί παλινδρόμηση, θα πέσει στο CI μας, όχι στην καταγγελία του χρήστη σου.

Η δημόσια έκδοση αυτών των αριθμών, με τον πίνακα διαφορών για συγκεκριμένους χάρτες, βρίσκεται στη σελίδα Ακρίβεια.

MakSeong · AstroWay

Δημιουργώ το AstroWay API: τυλίγω το Swiss Ephemeris σε καθαρό REST και γράφω για τις βαρετές λεπτομέρειες που είναι πραγματικά σημαντικές.

// δημιούργησε πάνω σε αυτό

Αυτή η ίδια Swiss Ephemeris που υπάρχει στο Solar Fire - σε 4 γραμμές κώδικα.

Δωρεάν κλειδί χωρίς κάρτα. 5.000 αιτήματα ανά μήνα μέχρι την πρώτη πληρωμή.

Περισσότερα από το blog όλες οι δημοσιεύσεις →

Engineering 2026-07-15

Τρία επίσημα SDK: TypeScript, Python, PHP αντί για ακατέργαστο curl

Ακατέργαστο HTTP λειτουργεί, αλλά ο τυποποιημένος πελάτης εξοικονομεί ώρες: αυτόματη συμπλήρωση διαδρομών, τύποι αιτήματος και απάντησης, ενσωματωμένο retry σε 408/409/429/5xx και ιεραρχία σφαλμάτων τύπου Stainless. Αναλύουμε τρία επίσημα SDK - @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist) - και πώς δημιουργήθηκαν από ένα OpenAPI συμβόλαιο.

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.