Skip to content

JLex11/anime-scrapper

Repository files navigation

🍥 Anime Scrapper 🍥

Una herramienta potente para extraer información de sitios web de anime

Bun JS JavaScript TypeScript Supabase Express Estado

📋 Descripción

Anime Scrapper es una solución completa para obtener información sobre animes desde varios sitios web populares. Incluye una herramienta de scraping de línea de comandos y una API REST para acceder a los datos almacenados. Con esta herramienta puedes obtener datos como títulos, sinopsis, episodios, calificaciones y más, todo de manera rápida y eficiente.

✨ Características

  • 🚀 Rápido y Eficiente: Aprovecha la velocidad de Bun.js para realizar scraping rápido
  • 🌐 Soporte Multi-Sitio: Extrae información de múltiples fuentes de anime
  • 💾 Exportación de Datos: Guarda los resultados en formatos JSON o CSV
  • 🔍 Búsqueda Avanzada: Encuentra animes por nombre, género, temporada, etc.
  • 🖼️ Descarga de Imágenes: Opción para descargar portadas e imágenes
  • 🔄 API REST: Accede a los datos a través de una API bien estructurada
  • 📊 Base de Datos: Almacenamiento persistente con Supabase
  • 📱 Búsqueda en Tiempo Real: Búsqueda de texto completo para encontrar animes rápidamente

📦 Requisitos previos

🚀 Instalación

  1. Clona este repositorio:
git clone https://github.com/Jlex11/anime-scrapper.git
cd anime-scrapper
  1. Instala las dependencias:
bun install
  1. Configura las variables de entorno:
cp .env.example .env
# Edita el archivo .env con tus credenciales de Supabase

🗄️ Configuración de Supabase

Configuración Remota (Producción)

Para conectar tu aplicación a una base de datos remota de Supabase:

  1. Crea un proyecto en Supabase

  2. Actualiza el archivo .env con tus credenciales de Supabase:

SUPABASE_URL=https://tu-proyecto.supabase.co
SUPABASE_API_KEY=tu-clave-anon-key
  1. Inicia la aplicación:
bun run start

Configuración Local (Desarrollo)

Para configurar y ejecutar Supabase localmente:

  1. Instala la CLI de Supabase:
# En Linux/macOS
curl -s https://packages.supabase.com/install.sh | bash

# En Windows (con PowerShell)
iwr https://packages.supabase.com/install.ps1 -useb | iex
  1. Inicia los servicios de Supabase localmente:
# Desde la raíz del proyecto
supabase start
  1. Actualiza el archivo .env con las credenciales locales:
SUPABASE_URL=http://localhost:54321
SUPABASE_API_KEY=tu-clave-anon-local # La clave se obtiene al ejecutar supabase start
  1. Migra el esquema de la base de datos:
supabase db push
### Gestión de datos con Supabase

#### Crear un archivo de seed personalizado

Si ya has realizado scraping y quieres guardar esos datos como seed para futuras instalaciones:

```bash
# Exportar solo los datos (sin estructura) a un archivo personalizado
supabase db dump --data-only -f supabase/seeds/my_anime_data.sql

# Exportar estructura y datos
supabase db dump -f supabase/seeds/full_backup.sql

Para usar tu seed personalizado, edita el archivo supabase/config.toml:

[db.seed]
enabled = true
sql_paths = ["./seeds/my_anime_data.sql"] # Reemplaza con tu archivo

Restaurar datos desde un seed

# Aplicar esquema y datos de una sola vez
supabase db reset

# O para aplicar solo los datos sin restablecer el esquema
supabase db seed

Sincronización entre Entornos

Para sincronizar el esquema entre tu entorno local y remoto:

  1. Exporta el esquema de la base de datos local:
supabase db dump -f supabase/migrations/local_schema.sql
  1. Aplica el esquema a la base de datos remota:
    • Opción 1: Desde la interfaz de Supabase, ve a "SQL Editor" y ejecuta el contenido del archivo SQL generado.
    • Opción 2: Usa la CLI con la conexión remota:
      supabase db push --db-url "postgresql://postgres:[PASSWORD]@tu-proyecto.supabase.co:5432/postgres"

📚 Uso

Documentación interactiva

La documentación de la API está construida con Astro y se genera como un sitio estático alojado en /api-docs.

Comandos útiles:

# Modo desarrollador con recarga en caliente
bun run docs:dev

# Generar la versión estática en public/api-docs
bun run docs:build

# Revisar la build estática localmente
bun run docs:preview

Una vez generada, la documentación queda disponible en:

http://localhost:3000/api-docs/

El sitio permite:

  • Consultar todo el contenido en Markdown por categorías
  • Visualizar ejemplos de peticiones y respuestas
  • Probar endpoints con el playground interactivo sin salir del navegador

También puedes obtener la lista de rutas en formato JSON desde:

http://localhost:3000/api/api-routes/

API REST

Iniciar el servidor:

bun run start

Endpoints disponibles:

Algunos endpoints principales:

# Obtener todos los animes (paginados)
GET /api/animes?page=1

# Obtener los últimos animes
GET /api/animes/latest?limit=10

# Obtener animes en emisión
GET /api/animes/broadcast?limit=20

# Obtener animes por rating
GET /api/animes/rating?limit=15

# Buscar animes por texto
GET /api/animes/search/:query?page=1&pageSize=10

# Obtener información detallada de un anime
GET /api/animes/:animeId

# Obtener episodios de un anime
GET /api/animes/:animeId/episodes?offset=0&limit=12

📊 Ejemplos

Datos iniciales (Seed)

El archivo seed incluye:

  • Estructura completa de la base de datos con tablas para animes y episodios
  • Relaciones y restricciones entre tablas
  • Funciones útiles como búsqueda de texto completo
  • Políticas de seguridad configuradas para Supabase
  • Un conjunto de datos de ejemplo con algunos animes populares

Para inspeccionar o modificar el archivo seed, consulta:

supabase/seeds/seed.sql

Ejemplo de salida JSON de la API

{
  "animeId": "overlord-movie-3-sei-oukokuhen",
  "title": "Overlord Movie 3: Sei Oukoku-hen",
  "type": "Película",
  "rank": 4.6,
  "otherTitles": [
    "Gekijouban Overlord: Sei Oukoku-hen",
    "劇場版「オーバーロード」聖王国編"
  ],
  "description": "",
  "originalLink": "https://www3.animeflv.net/anime/overlord-movie-3-sei-oukokuhen",
  "status": "Finalizado",
  "genres": ["Acción", "Aventuras", "Fantasía"],
  "images": {
    "coverImage": "http://localhost:3002/api/image/overlord-movie-3-sei-oukokuhen.webp",
    "carouselImages": [
      {
        "link": "http://localhost:3002/api/image/Overlord%20Movie%203:%20Sei%20Oukoku-hen-carouselImage-0.webp",
        "width": 4500,
        "height": 8001,
        "position": "50% 20%"
      },
      {
        "link": "http://localhost:3002/api/image/Overlord%20Movie%203:%20Sei%20Oukoku-hen-carouselImage-1.webp",
        "width": 1896,
        "height": 1033,
        "position": "50% 50%"
      }
    ]
  },
  "created_at": "2025-05-04T17:32:25.307+00:00",
  "updated_at": "2025-05-04T17:32:25.307+00:00"
}

📁 Estructura del proyecto

anime-scrapper/
├── index.js          # Punto de entrada CLI
├── src/
│   ├── scrapers/     # Módulos de scraping para cada sitio
│   ├── services/     # Servicios (base de datos, etc.)
│   ├── utils/        # Utilidades y helpers
│   ├── enums/        # Enumeraciones y constantes
│   └── types/        # Tipos TypeScript
├── api/
│   ├── router/       # Rutas de la API
│   ├── controllers/  # Controladores de la API
│   └── index.ts      # Punto de entrada de la API
├── config.js         # Configuración principal
└── README.md         # Este archivo

🤝 Contribución

Las contribuciones son siempre bienvenidas!

  1. Fork el proyecto
  2. Crea una nueva rama (git checkout -b feature/amazing-feature)
  3. Realiza tus cambios
  4. Commit tus cambios (git commit -m 'Add some amazing feature')
  5. Push a la rama (git push origin feature/amazing-feature)
  6. Abre un Pull Request

📜 Licencia

Distribuido bajo la licencia MIT. Consulta el archivo LICENSE para más información.


Desarrollado con ❤️ por Alexander

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors