File size: 7,219 Bytes
19cdf96 f220e14 fef9587 184efa3 fef9587 f220e14 fef9587 f220e14 fef9587 f220e14 fef9587 f220e14 fef9587 f220e14 fef9587 f220e14 4c71f23 19cdf96 68b46dc 19cdf96 17ad50f 19cdf96 4c71f23 19cdf96 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ---------------------------
# 🔧 CONFIGURAR SWISSEPH
# ---------------------------
import os
import swisseph as swe
# Ruta donde están tus efemérides dentro del contenedor
# -----------------------------------------------------------
# CONFIGURAR RUTA DE EFEMÉRIDES PARA SWISSEPH
# -----------------------------------------------------------
# MUY IMPORTANTE: esta carpeta debe existir en el contenedor
# y debe contener archivos como:
# seas_18.se1
# seas_18.se2
# ...
EPHE_PATH = "/app/ephemeris"
# 1) Configurar ANTES que flatlib
swe.set_ephe_path(EPHE_PATH)
os.environ["SWEPH_PATH"] = EPHE_PATH
# ---------------------------
# 📦 IMPORTAR FLATLIB
# ---------------------------
from flatlib.chart import Chart
from flatlib.datetime import Datetime
from flatlib.geopos import GeoPos
from flatlib import const
# Algunos sistemas necesitan esto porque flatlib pisa la ruta:
swe.set_ephe_path(EPHE_PATH)
# ---------------------------
# 🌐 IMPORTAR FASTAPI
# ---------------------------
from fastapi import FastAPI, Query
from urllib.parse import quote
# -------------------------
# Función principal Nut
# -------------------------
def Nut(datos: str) -> str:
# Limpiar el comando y separar líneas
datos = datos.split(sep='|')
# Validar que haya 5 líneas
if len(datos) != 5:
return f"{len(datos)} => {datos[0]} = {datos[-1]} Error: se esperan 5 líneas de datos (fecha, hora, zona horaria, latitud, longitud)"
# Crear fecha y posición
date = Datetime(datos[0], datos[1], datos[2])
pos = GeoPos(datos[3], datos[4])
#--------------------------------------------------------
'''
pip uninstall pyswisspeh
Found existing installation: pyswisseph 2.8.0.post0
Uninstalling pyswisseph-2.8.
pip install pyswisseph==2
Pero Pyswisseph == 2.00.00-2 no se puede instalar en sistemas win10. Este error aparecerá:
Solo se puede instalar pyswisseph-2.8.0 en
Finalmente descubrí cómo hacer que el módulo funcione en Windows.
tenemos que usar un archivo de rueda binario de Windows no oficial de
' https://www.lfd.uci.edu/~gohlke/pythonlibs/ '.
hay diferentes ruedas para diferentes versiones de Python y actualizaciones
del módulo. Usé: pyswisseph ‑ 2.5.1.post0 ‑ cp37 ‑ cp37m ‑ win_amd64.whl.
use la rueda que se adapte a su versión de python / windows
Solución: todo lo que tiene que hacer es abrir la ventana de comandos, escribir
'pip install pyswisseph ‑ 2.5.1.post0 ‑ cp37 ‑ cp37m ‑ win_amd64.whl' y se instala.
'''
#------------------------------------------------
# Build a chart with Regiomontanus houses
chart = Chart(date, pos, hsys=const.HOUSES_EQUAL)
# Build a chart including modern planets
chart = Chart(date, pos, IDs=const.LIST_OBJECTS)
# Obtener casas
house1 = chart.get(const.HOUSE1) # Ascendente
house2 = chart.get(const.HOUSE2)
house3 = chart.get(const.HOUSE3)
house4 = chart.get(const.HOUSE4)
house5 = chart.get(const.HOUSE5)
house6 = chart.get(const.HOUSE6)
house10 = chart.get(const.HOUSE10) # Medio cielo
# Obtener planetas principales
Sun = chart.get(const.SUN)
Moon = chart.get(const.MOON)
Mercury = chart.get(const.MERCURY)
Venus = chart.get(const.VENUS)
Mars = chart.get(const.MARS)
Jupiter = chart.get(const.JUPITER)
Saturn = chart.get(const.SATURN)
Uranus = chart.get(const.URANUS)
Neptune = chart.get(const.NEPTUNE)
Pluto = chart.get(const.PLUTO)
North_Node = chart.get(const.NORTH_NODE)
South_Node = chart.get(const.SOUTH_NODE)
Syzygy = chart.get(const.SYZYGY)
Pars_Fortuna = chart.get(const.PARS_FORTUNA)
'''
Algenib = chart.getFixedStar(const.STAR_ALGENIB)
Alpheratz = chart.getFixedStar(const.STAR_ALPHERATZ)
Algol = chart.getFixedStar(const.STAR_ALGOL)
...
# Aquí estaban tus comentarios de estrellas fijas
'''
# Construir URL de forma segura
url = (
"https://horoscopes.astro-seek.com/horoscope-chart1-700__radix_ClanNot.png?"
# -------------------------------------------------
# Configuración de asteroides y nodos
"chiron_seda=1" # Mostrar Chiron en color
"&lilith_seda=1" # Mostrar Lilith en color
"&chiron_asp=1" # Mostrar aspectos de Chiron
"&lilith_asp=1" # Mostrar aspectos de Lilith
"&uzel_asp=1" # Mostrar aspectos de nodo norte
"&true_uzel=on" # Nodo norte verdadero
"&minor_45=on" # Aspectos menores 45°
"&minor_135=on" # Aspectos menores 135°
"&equal=1" # Casas iguales
# -------------------------------------------------
# Casas
f"&dum_1_new={quote(str(house1.lon))}" # Ascendente
f"&dum_2={quote(str(house2.lon))}"
f"&dum_3={quote(str(house3.lon))}"
f"&dum_4={quote(str(house4.lon))}"
f"&dum_5={quote(str(house5.lon))}"
f"&dum_6={quote(str(house6.lon))}"
f"&dum_10_new={quote(str(house10.lon))}" # Medio cielo
# -------------------------------------------------
# Planetas
f"&planeta_slunce={quote(str(Sun.lon))}" # Sol
f"&planeta_luna={quote(str(Moon.lon))}" # Luna
f"&planeta_merkur={quote(str(Mercury.lon))}" # Mercurio
f"&planeta_venuse={quote(str(Venus.lon))}" # Venus
f"&planeta_mars={quote(str(Mars.lon))}" # Marte
f"&planeta_jupiter={quote(str(Jupiter.lon))}" # Júpiter
f"&planeta_saturn={quote(str(Saturn.lon))}" # Saturno
f"&planeta_uran={quote(str(Uranus.lon))}" # Urano
f"&planeta_neptun={quote(str(Neptune.lon))}" # Neptuno
f"&planeta_pluto={quote(str(Pluto.lon))}" # Plutón
f"&planeta_uzel={quote(str(North_Node.lon))}" # Nodo Norte
f"&planeta_fortune={quote(str(Pars_Fortuna.lon))}"# Parte de la Fortuna
f"&planeta_syzygy={quote(str(Syzygy.lon))}" # Luna Nueva / Llena (Syzygy)
# -------------------------------------------------
# Retrogradaciones
"&r_saturn=ANO" # Saturno retrógrado
"&r_pluto=ANO" # Plutón retrógrado
"&r_uzel=ANO" # Nodo Norte retrógrado
# -------------------------------------------------
# Otras configuraciones
"&tolerance=1" # Tolerancia de aspecto
"&tolerance_paral=1.2" # Tolerancia de paralelos
"&house_system=equal" # Sistema de casas igual
"&terms=#tabs_redraw" # Redibujar la carta
)
return url
# -------------------------
# Crear app FastAPI
# -------------------------
app = FastAPI(title="Nut API FastAPI")
# Ruta de inicio
@app.get("/")
def root():
return {"message": "Nut API FastAPI"}
# Ruta para generar la URL de Nut
@app.get("/nut")
def procesar_cadena(
datos: str = Query(
"???",
description="Ejemplo de entrada:1962/02/04|14:30|-05:00|05n00|75w32"
)
):
url_generada = Nut(datos)
return {"input": datos, "output": url_generada} |