Potion Bottle Icon Manuel d'alchimie du code Potion Bottle Icon

Coder dans les étoiles - Créer une carte du ciel astrologique personnalisée avec Python

- 740 mots - Temps de lecture estimé: 4 minutes

J’entends souvent dire que les gens passionnés de technologie sont éloignés de la nature humaine, qu’ils et elles sont perdus dans les nuages. Aujourd’hui, on va aller plus loin que les nuages, dans les étoiles !

Le code peut aussi servir à explorer des domaines plus… ésotériques, tout en restant ancré dans la rigueur technique. Aujourd’hui, je présente comment j’ai conçu une application web pour générer des cartes du ciel astrologiques personnalisées pour une cliente. Ce projet m’a permis de ressortir des outils de dessin scientifique pour un usage complètement différent des tableaux de bord statistiques.

Comment prendre des concepts millénaires et les traduire en algorithmes précis, tout en offrant une expérience utilisateur fluide et intuitive ? J’ai voulu atteindre cet objectif avec cette application.

D’abord, j’ai cherché ce qu’on appelle une base de données d’éphémérides. C’est un outil qui permet de localiser les astres dans le ciel à une date et un lieu précis, en se basant sur la rotation de la Terre autour du soleil et autour d’elle-même. Fort heureusement, j’ai pu trouver une librairie de code sous licence libre, Swisseph, qui répondait à ce besoin. Sans ça, nous aurions dû recourir à des services web, et on voulait limiter ça le plus possible.

🌘 L’architecture de l’application : un duo efficace


Sun Face IconComment créer une application Python pour générer des cartes du ciel astrologiques ?Sun Face Icon


La bibliothèque Swisseph permet de localiser les astres à une date et un lieu précis. Une architecture FastAPI pour le calcul et Streamlit pour le frontal permet de créer une application interactive. ReportLab génère ensuite les PDF personnalisés avec les positions des planètes et des symboles astrologiques.

J’ai opté pour une architecture classique en développement logiciel : un client frontal et un service web du côté du serveur. Comme ça, je pouvais utiliser deux outils indépendants entre eux, reliés avec un contrat de données. J’ai choisi deux technologies que je maîtrise bien, Streamlit pour le frontal et FastAPI pour le côté serveur.

Mes principaux critères étaient:

🌘 Les modèles de données : la structure de notre application

Avant de plonger dans le code, il est important de comprendre la structure de données que nous utilisons. Grâce à Pydantic, j’ai défini des modèles typés qui garantissent la cohérence de nos données entre le frontal et le côté serveur de l’application.

Ces modèles sont la fondation de notre application :

# backend/app/models.py
from pydantic import BaseModel, Field
from typing import List

class BirthInfo(BaseModel):
    birth_date: str
    birth_time: str
    timezone: str
    longitude: float
    latitude: float

class AstroElement(BaseModel):
    position: float  # Position en degrés
    signe: str       # Signe du zodiaque

class AstrologyResponse(BaseModel):
    soleil: AstroElement
    lune: AstroElement
    mercure: AstroElement
    venus: AstroElement
    mars: AstroElement
    jupiter: AstroElement
    saturne: AstroElement
    uranus: AstroElement
    neptune: AstroElement
    pluton: AstroElement
    ascendant: AstroElement
    houses: List[float]

class DocumentInfo(BaseModel):
    nom_client: str = Field(description="Nom du client")
    courriel_client: str = Field(description="Courriel du client")
    info_naissance: BirthInfo = Field(description="Informations sur la date de naissance")
    local: bool = False
Abonne-toi au fil RSS pour ne rien manquer.

Étiquettes