CalendarIA es una herramienta que combina inteligencia artificial (IA Gemini) y automatización para generar planes de estudio y trabajo, exportables como .ics y sincronizables con Google Calendar.
- ✨ Funcionalidades principales
- 🧰 Requisitos previos
- ⚙️ Instalación
- 🔑 Configuración de Google Calendar API
- 🤖 Obtener el token de la API de Gemini
- 🧭 Configuración de ejemplo
▶️ Uso- 🧹 Comando auxiliar: Purga de eventos
⚠️ Problemas comunes- 📜 Licencia
- 💬 Créditos
- 🎯 Generación automática de horarios mediante IA (Gemini).
- 🧩 Configuración modular: se puede editar el prompt, horario laboral y asignaturas.
- 📆 Conversión directa a formato
.icsy sincronización con Google Calendar. - 🔁 Mapeo inteligente de eventos por categoría (Estudios, Rutinas, Trabajo...).
- 🧹 Comando auxiliar para borrar eventos antiguos con modo simulación (
dry-run).
- Python 3.11+
- Clave de Gemini API → https://ai.google.dev/
- Proyecto en Google Cloud con Google Calendar API habilitada.
- Credenciales OAuth 2.0 (Aplicación de escritorio).
git clone https://github.com/DevOkana/CalendarIA.git
cd CalendarIApython -m venv .venv
# Windows
.\.venv\Scripts\Activate.ps1
# Linux/Mac
source .venv/bin/activatepip install -r requirements.txtcp .env.example .envEdita .env con tus valores:
GOOGLE_API_KEY=TU_API_KEY_DE_GEMINI
GOOGLE_CLIENT_SECRETS_FILE=secrets/calendar.json
TIMEZONE=Europe/Madrid
LANG=es- Accede a Google Cloud Console.
- Crea un nuevo proyecto llamado
CalendarIA. - Crear y entrar en el proyecto.
- Menú lateral: APIs y servicios → Biblioteca.
- Busca “Google Calendar API”.
- Pulsa Habilitar.
- Menú: APIs y servicios → Pantalla de consentimiento OAuth -> Comenzar.
- Configurar el nombre de la aplicación que se conectara(puede ponerle el mismo nombre).
- Contacto de asistancia: rellena tu correo.
- Tipo de usuario: Usuarios Externos.
- Rellena correo de contacto.
- Acepta los términos y guarda los cambios.
-
Menú → Clientes.
-
Crear cliente → ID de cliente de OAuth.
-
Tipo: Aplicación de escritorio, Nombre: el que prefieras.
-
Descarga el archivo JSON y colócalo en la ruta secrets/calendar.json con el nombre:
calendar.json -
Finalmente, en el apartado “Publicar”, haz público el proyecto, o el acceso podría estar bloqueado al iniciar sesión.
-
Al ejecutarse localmente, es normal que el navegador advierta sobre el certificado. Acepta continuar.
El archivo token.pickle no se descarga ni se crea manualmente.
Se genera automáticamente la primera vez que ejecutas el script (por ejemplo, python src/CalendarIA/cli.py plan) con tus credenciales OAuth correctas (secrets/calendar.json).
Durante la primera ejecución:
- Se abrirá una ventana del navegador.
- Inicia sesión con tu cuenta de Google y acepta los permisos.
- Tras autorizar, se crea el archivo:
ecrets/token.pickleEse archivo almacena el token de autenticación para que no tengas que volver a iniciar sesión.
Si lo eliminas, el programa volverá a pedir autorización en el siguiente uso.
👉 En el primer uso se abrirá una ventana del navegador para autorizar tu cuenta.
Después se generará automáticamente secrets/token.pickle.
- Entra en https://aistudio.google.com/app/apikey.
- Inicia sesión con tu cuenta de Google.
- Pulsa “Create API key” → selecciona “Personal project”.
- Copia la clave generada y añádela en tu archivo
.env:
GOOGLE_API_KEY = TU_API_KEY_DE_GEMINI
Recuerda renombrar y editar los archivos en config/ según tus necesidades.
Hay dos archivos que incluyo el ejemplo mínimo para que funcione. Pero antes hay que renombrar
quitandole el .example al final.
El plan lo genera un prompt que puedes modificar libremente.
- Archivo por defecto:
prompts/prompt_es.txt - Idioma: libre (el ejemplo está en español).
- Nota: el prompt incluido es solo un ejemplo; adáptalo a tu estilo y reglas.
En este apartado vas a definir el inicio de la semana y el final hasta donde quieres que se te cree el calendario luego en trabajo bas a definir el día que trabajas siendo la clave y el valor sera el horario de trabajo si descansa utiliza la palabra Libranza.
semana_inicio: "2025-11-05"
semana_final: "2025-11-16"
trabajo:
"2025-11-05": "Libranza"
"2025-11-06": "13:00 - 15:30"
"2025-11-07": "13:30 - 22:00"
"2025-11-08": "Libranza"
"2025-11-09": "13:00 - 15:30"
"2025-11-10": "Libranza"Ruta donde se encuentra:
- Configuración --> Configuración de mis calendarios
- "Nombre del calendario" --> Dirección pública en formato iCal
- SI NO CONFIGURA NINGUN CALENDARIO SE USARA EL PRINCIPAL (primary)
ESTUDIOS: "7c79...be7@group.calendar.google.com"
MEJORA: "0083...d2739@group.calendar.google.com"
RUTINAS: "3c17...a559c9e@group.calendar.google.com"
TRABAJO: "89aa...eedeb6@group.calendar.google.com"
DEFAULT: "primary"Aquí tienes esa información formateada como una sección de un archivo README.md, combinando tus descripciones con el bloque de código de ejemplo.
A continuación se describen las opciones disponibles en el archivo de configuración config/settings.toml.
Define las propiedades básicas del calendario que se va a generar.
name: El nombre que verá tu calendario en tu aplicación (ej. "Plan UNED — Semana").timezone: Tu zona horaria local. Es crucial para que los eventos se muestren a la hora correcta (ej. "Europe/Madrid", "America/New_York").
Define el motor de Inteligencia Artificial (IA) que generará el plan de estudios.
name: Especifica el modelo de Google Gemini a utilizar. La elección influye en la velocidad y el detalle del plan.gemini-2.5-pro: Más potente, ideal para planes detallados.gemini-2.5-flash: Más rápido y eficiente, para resultados inmediatos.Más modelos de gemini: Visitar la web https://ai.google.dev/gemini-api/docs?hl=es-419
Define los nombres de los archivos que se crearán.
base_name: Nombre base que se usará como prefijo para los archivos generados.json: El nombre del archivo.jsonque contendrá los datos brutos del plan.ics: El nombre del archivo.ics(iCalendar) que importarás a tu aplicación de calendario.
Ejemplo de configuración:
[calendar]
name = "Plan UNED — Semana"
timezone = "Europe/Madrid"
[model]
name = "gemini-2.5-pro"
[output]
base_name = "plan_example" # Base name for output files
json = "plan_example.json" # Output JSON file name
ics = "plan_example.ics" # Output ICS file namepython src/CalendarIA/cli.py planpython src/CalendarIA/cli.py generate-jsonpython src/CalendarIA/cli.py json-to-icspython src/CalendarIA/cli.py import-icsModo simulación (sin borrar):
python src/CalendarIA/cli.py purge --since 2025-11-04Borrado real:
python src/CalendarIA/cli.py purge --since 2025-11-04 --no-dry-runFiltrar por prefijo de título:
python src/CalendarIA/cli.py purge --since 2025-11-04 \
--prefix "📚 Estudio —" --prefix "💼 Trabajo" --no-dry-run| Error | Causa | Solución |
|---|---|---|
NoneType 'trabajo' |
YAML vacío o mal indentado | Verifica config/schedule.yaml |
JSONDecodeError |
Gemini devolvió texto extra o llaves {{ |
Abre el archivo y revisa el formato |
429 Quota exceeded |
Límite de peticiones Gemini gratis | Espera 60 s o habilita facturación |
TypeError: ensure_api_auth() |
Falta calendar.json |
Genera credenciales en Google Cloud |
ModuleNotFoundError |
Dependencias faltantes | pip install -r requirements.txt |
MIT License © 2025 Puedes modificar, distribuir y usar libremente siempre que mantengas la atribución original.
Desarrollado con 💡 por Okana Inspirado en los sistemas de planificación de la UNED y en la integración local con Gemini + Google Calendar. ¡Gracias por usar CalendarIA! 🚀