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.
- 🚀 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
- Bun v1.2.5 o superior
- Una cuenta en Supabase para la base de datos
- Supabase CLI para desarrollo local (opcional)
- Clona este repositorio:
git clone https://github.com/Jlex11/anime-scrapper.git
cd anime-scrapper- Instala las dependencias:
bun install- Configura las variables de entorno:
cp .env.example .env
# Edita el archivo .env con tus credenciales de SupabasePara conectar tu aplicación a una base de datos remota de Supabase:
-
Crea un proyecto en Supabase
-
Actualiza el archivo
.envcon tus credenciales de Supabase:
SUPABASE_URL=https://tu-proyecto.supabase.co
SUPABASE_API_KEY=tu-clave-anon-key
- Inicia la aplicación:
bun run startPara configurar y ejecutar Supabase localmente:
- 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- Inicia los servicios de Supabase localmente:
# Desde la raíz del proyecto
supabase start- Actualiza el archivo
.envcon las credenciales locales:
SUPABASE_URL=http://localhost:54321
SUPABASE_API_KEY=tu-clave-anon-local # La clave se obtiene al ejecutar supabase start
- 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.sqlPara 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# Aplicar esquema y datos de una sola vez
supabase db reset
# O para aplicar solo los datos sin restablecer el esquema
supabase db seedPara sincronizar el esquema entre tu entorno local y remoto:
- Exporta el esquema de la base de datos local:
supabase db dump -f supabase/migrations/local_schema.sql- 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"
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:previewUna 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/
Iniciar el servidor:
bun run startEndpoints 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=12El 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
{
"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"
}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
Las contribuciones son siempre bienvenidas!
- Fork el proyecto
- Crea una nueva rama (
git checkout -b feature/amazing-feature) - Realiza tus cambios
- Commit tus cambios (
git commit -m 'Add some amazing feature') - Push a la rama (
git push origin feature/amazing-feature) - Abre un Pull Request
Distribuido bajo la licencia MIT. Consulta el archivo LICENSE para más información.
Desarrollado con ❤️ por Alexander