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

Πώς να δημιουργήσετε μια αστρολογική εφαρμογή: ολοκληρωμένος οδηγός για προγραμματιστές

Βήμα προς βήμα οδηγός για τη δημιουργία μιας αστρολογικής εφαρμογής από την αρχή — επιλογή API, αρχιτεκτονική, πρώτη ναταλική χαρτογραφία, προσθήκη συναστρίας και μεταβάσεων, ανάπτυξη.

🕓 Δημοσίευση από 2026-04-14, ενημερώθηκε 2026-05-09. Τα TS / Python / PHP SDK βρίσκονται τώρα σε δημόσια μητρώα — @astroway/sdk (npm), astroway (PyPI), astroway/sdk (Packagist). Περισσότερες λεπτομέρειες στο changelog.

Θέλεις να φτιάξεις μια αστρολογική εφαρμογή; Από πού να ξεκινήσεις; Σε αυτόν τον οδηγό θα βρεις λύσεις και κώδικα: από την επιλογή API μέχρι την ανάπτυξη ενός λειτουργικού προϊόντος.

Πριν γράψεις κώδικα, αποφάσισε: υπολογισμοί στον πελάτη (client) ή στον διακομιστή (server);

Πελάτης (π.χ. Swiss Ephemeris WASM στο πρόγραμμα περιήγησης):

  • Πλεονεκτήματα: χωρίς κόστος ανά ερώτηση, λειτουργεί offline, πλήρης έλεγχος
  • Μειονεκτήματα: ~2 MB WASM ανά χρήστη, περίπλοκη αδειοδότηση (εμπορική χρήση Swiss Ephemeris έχει περιορισμούς), εσύ αναλαμβάνεις τη συντήρηση του κώδικα υπολογισμών

Διακομιστής API (AstroWay, Prokerala κ.ά.):

  • Πλεονεκτήματα: χωρίς εξαρτήσεις στον πελάτη, μικρό bundle της εφαρμογής, γρήγορο σε κινητά, χωρίς προβλήματα αδειοδότησης
  • Μειονεκτήματα: κόστος ανά ερώτηση (σε credits), καθυστέρηση σε «κρύες» ερωτήσεις

Στις περισσότερες περιπτώσεις, το API διακομιστή είναι η καλύτερη επιλογή. Οι χρήστες κινητών δε θα περιμένουν 2 MB WASM· δε χρειάζεται να ασχοληθείς με τις περιπλοκές των αδειών· και οι σύγχρονοι API κάνουν δωρεάν caching ταυτόσημων ερωτήσεων (το AstroWay χρησιμοποιεί caching 5 λεπτών με κεφαλίδα X-Cache: HIT).

Τι έχει σημασία:

  • Ακρίβεια — ψάξε για Swiss Ephemeris «κάτω από την κουκούλα» (±1 γωνιακή δευτερόλεπτα). Αν το API δεν το αναφέρει ξεκάθαρα, ρώτησε.
  • Κάλυψη — γενέθλια + synastry + transits είναι το ελάχιστο. Προόδους και επανόδου είναι το επόμενο επίπεδο. Σπάνιες τεχνικές (π.χ. rectification, Human Design) αποτελούν διαφοροποιητή.
  • Ποιότητα SDK — τυποποιημένα TypeScript και Python SDK σου εξοικονομούν ώρες.
  • Μοντέλο τιμολόγησης — η χρέωση βάσει credits κλιμακώνεται καλύτερα από την ανά ερώτηση, σε μικτά φορτία.

Για αυτό το tutorial, χρησιμοποιούμε το AstroWay API, καθώς περιλαμβάνει όλα τα τέσσερα (723 endpoints, Swiss Ephemeris, τυποποιημένα SDK, χρέωση βάσει credits).

Ποτέ μην καλείς απευθείας ένα αστρολογικό API από τον browser — το API key σου μπορεί να διαρρεύσει. Πάντα χρησιμοποίησε το δικό σου backend.

Terminal window
mkdir my-astrology-app
cd my-astrology-app
npm init -y
npm install express @astroway/sdk zod
npm install -D typescript @types/express @types/node tsx

Δημιούργησε το src/server.ts:

import express from 'express';
import { Astroway } from '@astroway/sdk';
import { z } from 'zod';
const app = express();
app.use(express.json());
const client = new Astroway({
apiKey: process.env.ASTROWAY_API_KEY!,
});
const BirthInput = z.object({
date: z.string(),
time: z.string(),
timezoneOffset: z.number(),
latitude: z.number(),
longitude: z.number(),
});
app.post('/api/chart', async (req, res) => {
const parsed = BirthInput.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
try {
const chart = await client.chart({
...parsed.data,
houseSystem: 'P',
});
res.json(chart);
} catch (err) {
res.status(500).json({ error: String(err) });
}
});
app.listen(3000, () => console.log('http://localhost:3000'));

Ξεκίνησε:

Terminal window
ASTROWAY_API_KEY=aw_test_... npx tsx src/server.ts

Έλεγχος μέσω curl:

Terminal window
curl -X POST http://localhost:3000/api/chart \
-H "Content-Type: application/json" \
-d '{"date":"1990-07-14","time":"14:30:00","timezoneOffset":3,"latitude":50.4501,"longitude":30.5234}'

Λάμβάνεις ένα πλήρες JSON γενέθλιας χάρτη.

Μπορείς να χρησιμοποιήσεις οποιοδήποτε framework. Για παράδειγμα, React με μια απλή φόρμα:

import { useState } from 'react';
type Chart = {
planets: { name: string; longitude: number; sign: string; house: number }[];
aspects: { planet1: string; planet2: string; type: string; orb: number }[];
};
export function NatalForm() {
const [chart, setChart] = useState<Chart | null>(null);
async function handleSubmit(formData: FormData) {
const body = Object.fromEntries(formData.entries());
const res = await fetch('/api/chart', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
date: body.date,
time: body.time + ':00',
timezoneOffset: Number(body.tz),
latitude: Number(body.lat),
longitude: Number(body.lng),
}),
});
setChart(await res.json());
}
return (
<div>
<form action={handleSubmit}>
<input name="date" type="date" required />
<input name="time" type="time" required />
<input name="tz" type="number" placeholder="Timezone offset (π.χ. 3)" required />
<input name="lat" type="number" step="0.0001" placeholder="Γεωγραφικό πλάτος" required />
<input name="lng" type="number" step="0.0001" placeholder="Γεωγραφικό μήκος" required />
<button>Δημιουργία χάρτη</button>
</form>
{chart && (
<div>
<h2>Πλανήτες</h2>
<ul>
{chart.planets.map(p => (
<li key={p.name}>{p.name}: {p.sign} (οίκος {p.house})</li>
))}
</ul>
<h2>Συμβάσεις</h2>
<ul>
{chart.aspects.map((a, i) => (
<li key={i}>{a.planet1} {a.type} {a.planet2} (orb {a.orb.toFixed(2)}°)</li>
))}
</ul>
</div>
)}
</div>
);
}

Η συμβατότητα είναι η επόμενη προφανής λειτουργία. Πρόσθεσε στο src/server.ts:

const SynastryInput = z.object({
chart1: BirthInput,
chart2: BirthInput,
});
app.post('/api/synastry', async (req, res) => {
const parsed = SynastryInput.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
const result = await client.synastry(parsed.data);
res.json({
score: result.compatibility.score,
label: result.compatibility.label,
aspects: result.crossAspects,
});
});

Έτοιμο. Μία endpoint, 50 credits ανά κλήση, επιστρέφει score 0–100 και cross-aspects.

Για engagement, οι καθημερινοί горοσκόποι είναι must have. Το AstroWay τους δημιουργεί από πραγματικά δεδομένα transits:

app.post('/api/horoscope/daily', async (req, res) => {
const parsed = BirthInput.safeParse(req.body);
if (!parsed.success) return res.status(400).json({ error: parsed.error });
const horoscope = await client.horoscopeDaily(parsed.data);
res.json({
text: horoscope.text,
disclaimer: horoscope.disclaimer, // υποχρεωτικό να εμφανίζεται στο UI!
});
});

Σημαντικό: Το περιεχόμενο που δημιουργείται από AI περιλαμβάνει disclaimer, το οποίο πρέπει να εμφανίζεις στους χρήστες (σύμφωνα με τους Όρους Χρήσης). Μην το αφαιρείς.

Οι καθημερινοί горοσκόποι είναι ίδιοι για όλους τους χρήστες με την ίδια ημέρα γέννησης και παρόμοιους γενέθλιους χάρτες. Κάνε caching επιθετικά:

import { LRUCache } from 'lru-cache';
const cache = new LRUCache<string, any>({ max: 1000, ttl: 86400 * 1000 });
app.post('/api/horoscope/daily', async (req, res) => {
const key = JSON.stringify(req.body);
const cached = cache.get(key);
if (cached) return res.json(cached);
const horoscope = await client.horoscopeDaily(req.body);
cache.set(key, horoscope);
res.json(horoscope);
});

Το AstroWay διαθέτει επίσης caching 5 λεπτών (X-Cache: HIT), αλλά για περιεχόμενο μεγάλης διάρκειας χρειάζεται caching από εσένα.

Μπορείς να χρησιμοποιήσεις οποιαδήποτε πλατφόρμα. Για γρήγορη εκκίνηση, χρησιμοποίησε το Vercel ή το Railway:

Terminal window
# vercel.json
{ "functions": { "src/server.ts": { "runtime": "@vercel/node" } } }

Στην πλατφόρμα, ρύθμισε το env ASTROWAY_API_KEY.

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

credits/month = DAU × (avg_charts_per_user × 20
+ avg_synastries × 50
+ avg_horoscopes × 20) × 30

Για 100 DAU με 1 χάρτη + 1 горοσκόπο + 0.3 synastry ανά χρήστη την ημέρα:

100 × (20 + 20 + 0.3 × 50) × 30 = 165 000 credits / μήνα

Αυτό αντιστοιχεί στο πλάνο Starter στα $19/μήνα (200K credits).

Προηγμένες λειτουργίες που αξίζει να προσθέσεις καθώς μεγαλώνεις:

  • Overlay transits — το /v1/transits δείχνει τις τρέχουσες θέσεις των πλανητών στον γενέθλιο χάρτη
  • Πρόοδοι — το /v1/progressions για την ψυχολογική ανάπτυξη
  • Solar return — το /v1/solar-return για την «πρόβλεψη για ένα χρόνο από την ημέρα γενεθλίων»
  • Human Design — το Human Design API ανοίγει έναν εντελώς νέο λειτουργικό τομέα
  • Αστροχαρτογραφία — το /v1/acg χαρτογραφεί πού πρέπει να ζήσει ο χρήστης

Κάθε λειτουργία είναι δύσκολο να υλοποιηθεί από το μηδέν, αλλά — μία κλήση API από το AstroWay.

AstroWay team

Η μηχανική ομάδα του AstroWay API. Τυλίγουμε το Swiss Ephemeris σε καθαρό REST και γράφουμε για τις βαρετές λεπτομέρειες που όμως έχουν σημασία.

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

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

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

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

Engineering 2026-06-05

Natal Chart API in TypeScript: SDK + React Example

Compute a natal chart in TypeScript with the AstroWay SDK — typed responses, a React component, and where it beats a local ephemeris library.

Ephemeris 2026-06-05

How Accurate Is the Swiss Ephemeris? Verified Benchmarks

Swiss Ephemeris accuracy in numbers — planetary positions under 0.1 arcsecond, exact house cusps, eclipses within a minute — and how AstroWay verifies it.

Ephemeris 2026-06-05

Swiss Ephemeris: REST API vs pyswisseph (When to Use Which)

pyswisseph vs a REST API for Swiss Ephemeris calculations — C dependencies, data files, licensing and deployment compared, with a decision guide.