@soymaycol/maysite
v1.0.0
Published
Descarga sitios web completos como archivos ZIP usando wget
Maintainers
Readme
@soymaycol/maysite
🌐 Descarga sitios web completos como archivos ZIP usando wget
📦 Instalación
npm install @soymaycol/maysiteEl paquete intentará instalar wget automáticamente durante la instalación si no está disponible en tu sistema.
🚀 Uso
Uso Básico (Promesas)
const { downloadWebsiteAsZip } = require('@soymaycol/maysite');
async function descargarSitio() {
try {
const zipPath = await downloadWebsiteAsZip({
url: 'https://example.com',
outputDir: './descargas',
filename: 'mi_sitio_web'
});
console.log('Sitio descargado en:', zipPath);
} catch (error) {
console.error('Error:', error.message);
}
}
descargarSitio();Con Callbacks de Progreso
const { downloadWebsiteAsZip } = require('@soymaycol/maysite');
downloadWebsiteAsZip({
url: 'https://example.com',
onProgress: (message) => console.log('📥', message),
onError: (error) => console.error('❌', error.message),
onComplete: (zipPath) => console.log('✅ Completado:', zipPath)
});Con Express.js
const express = require('express');
const { downloadWebsiteAsZipExpress } = require('@soymaycol/maysite');
const app = express();
// Para URLs en query parameters: GET /download?url=https://example.com
app.get('/download', downloadWebsiteAsZipExpress);
// Para URLs en el body: POST /download con { "url": "https://example.com" }
app.use(express.json());
app.post('/download', downloadWebsiteAsZipExpress);
// Para URLs como parámetros: GET /download/https://example.com
app.get('/download/:url', downloadWebsiteAsZipExpress);
app.listen(3000, () => {
console.log('Servidor corriendo en puerto 3000');
});⚙️ Opciones
downloadWebsiteAsZip(options)
| Opción | Tipo | Descripción | Por defecto |
|--------|------|-------------|-------------|
| url | string | URL del sitio web a descargar (requerido) | - |
| outputDir | string | Directorio donde guardar los archivos | './downloads' |
| filename | string | Nombre del archivo ZIP (sin extensión) | Basado en la URL |
| onProgress | function | Callback para mostrar progreso | null |
| onError | function | Callback para manejar errores | null |
| onComplete | function | Callback cuando termine | null |
🛠️ Requisitos
- Node.js >= 14.0.0
- wget (se instala automáticamente si no está disponible)
Instalación manual de wget
Si la instalación automática falla, puedes instalar wget manualmente:
macOS
# Con Homebrew
brew install wget
# Con MacPorts
sudo port install wgetLinux (Ubuntu/Debian)
sudo apt-get update
sudo apt-get install wgetLinux (CentOS/RHEL)
sudo yum install wgetWindows
# Con Chocolatey
choco install wget
# Con winget
winget install GNU.Wget🔧 Características
- ✅ Descarga sitios web completos con todos sus recursos
- ✅ Convierte enlaces para navegación offline
- ✅ Comprime automáticamente en formato ZIP
- ✅ Limpieza automática de archivos temporales
- ✅ Compatible con Express.js
- ✅ Callbacks de progreso y error
- ✅ Instalación automática de dependencias
- ✅ Soporte multiplataforma (Windows, macOS, Linux)
📝 Ejemplos Avanzados
Descarga con configuración personalizada
const { downloadWebsiteAsZip } = require('@soymaycol/maysite');
downloadWebsiteAsZip({
url: 'https://mi-blog.com',
outputDir: './sitios-descargados',
filename: 'mi-blog-backup',
onProgress: (msg) => {
console.log(`[${new Date().toLocaleTimeString()}] ${msg}`);
},
onError: (err) => {
console.error('💥 Error durante la descarga:', err.message);
// Aquí puedes enviar el error a un servicio de logging
},
onComplete: (zipPath) => {
console.log(`🎉 ¡Descarga completada!`);
console.log(`📁 Archivo guardado en: ${zipPath}`);
// Aquí puedes hacer algo con el archivo, como subirlo a la nube
// uploadToCloud(zipPath);
}
});API REST completa
const express = require('express');
const { downloadWebsiteAsZip } = require('@soymaycol/maysite');
const app = express();
app.use(express.json());
app.post('/api/download-website', async (req, res) => {
const { url, filename } = req.body;
if (!url) {
return res.status(400).json({
success: false,
message: 'URL es requerida'
});
}
try {
const zipPath = await downloadWebsiteAsZip({
url,
filename,
onProgress: (message) => {
console.log(`[${url}] ${message}`);
}
});
res.json({
success: true,
message: 'Sitio web descargado exitosamente',
zipPath
});
} catch (error) {
res.status(500).json({
success: false,
message: error.message
});
}
});🤝 Contribuir
¿Encontraste un bug o tienes una sugerencia? ¡Las contribuciones son bienvenidas!
📄 Licencia
MIT © SoyMaycol
🏷️ Etiquetas
wget website download zip scraper mirror nodejs express
