/
marazmdev
/
rutube-down
Обзор
Документация
Войти
/
marazmdev
/
rutube-down
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
master
src/server.js
72 строки
2 KB
TwixoffStudio
Create: index.html, analyzer.js, server.js, .gitignore, package.json, README.md
14 июн 2026, 15:07
Верифицирован
14 июн 2026, 15:07
f4cc50d
Код
Авторство
О чём код?
import express from 'express'; import cors from 'cors'; import path from 'path'; import { fileURLToPath } from 'url'; import { analyzeUrl } from './analyzer.js'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const app = express(); const PORT = process.env.PORT || 3000; app.use(cors()); app.use(express.json()); app.use(express.static(path.join(__dirname, '../public'))); // ── Главный эндпоинт анализа ────────────────────────────────── app.post('/api/analyze', async (req, res) => { const { url } = req.body; if (!url || typeof url !== 'string') { return res.status(400).json({ success: false, error: 'URL не указан' }); } const platform = detectPlatform(url); if (!platform) { return res.status(400).json({ success: false, error: 'Поддерживаются только: rutube.ru, vkvideo.ru, vk.com/video, ok.ru' }); } console.log(`[${new Date().toISOString()}] ${platform.toUpperCase()} → ${url}`); try { const result = await analyzeUrl(url, platform); res.json({ success: true, platform, ...result }); } catch (err) { console.error(`Ошибка [${platform}]:`, err.message); res.status(500).json({ success: false, error: err.message }); } }); // ── Прокси для m3u8 (обход CORS при парсинге качества) ───────── app.get('/api/proxy-m3u8', async (req, res) => { const { url } = req.query; if (!url) return res.status(400).send('no url'); try { const axios = (await import('axios')).default; const r = await axios.get(url, { headers: { 'User-Agent': 'Mozilla/5.0', 'Referer': 'https://rutube.ru/' }, responseType: 'text', timeout: 10000, }); res.setHeader('Content-Type', 'application/x-mpegURL'); res.send(r.data); } catch { res.status(502).send('upstream error'); } }); function detectPlatform(url) { try { const h = new URL(url).hostname.replace('www.', ''); if (h === 'rutube.ru') return 'rutube'; if (h === 'vkvideo.ru' || h === 'vk.com') return 'vk'; if (h === 'ok.ru') return 'ok'; return null; } catch { return null; } } app.listen(PORT, () => { console.log(`\n🎬 RuTube Downloader Web → http://localhost:${PORT}\n`); });