Отказ от ответственности

Загрузка видео с YouTube противоречит политике YouTube. Единственные видео, которые вам разрешено скачивать, - это ваши собственные, что вы уже можете делать с помощью YouTube Studio.

Создание загрузчика YouTube может показаться действительно сложным, но на самом деле это не так. Для создания загрузчика YouTube необходимо знать некоторые HTML, JavaScript и Node.js, и вы должны быть достаточно хорошо в состоянии создать свой собственный загрузчик YouTube.

HTML

Если у вас будет загрузчик с YouTube, вам понадобится HTML для создания элементов, которые мы собираемся использовать для взаимодействия с нашим веб-сайтом. Во-первых, я создал простой HTML-документ с заголовком, полем ввода и кнопкой. Итак, сначала создайте HTML-файл с именем index.html. Это HTML-код нашей простой веб-страницы:

<!DOCTYPE html>
<html>
<head>
    <title>YouTube Downloader</title>
</head>
<body>
    <h1 class="heading">My Own YouTube Downloader !</h1>
    <input class="URL-input" placeholder="Video URL e.g. https://www.youtube.com/watch?v=MtN1YnoL46Q">
    <button class="convert-button">Convert</button>
</body>
</html>

Результат:

CSS

После этого мы добавим стили к нашей странице с помощью CSS. Вы можете использовать CSS-фреймворки, такие как Bootstrap или Bulma. Итак, сначала я связал свой файл CSS (style.css), добавив тег ссылки внутри заголовка:

<link rel="stylesheet" href="style.css">

Затем в style.css мы можем настроить нашу веб-страницу. Итак, вот мой простой код CSS для действительно простого стиля:

* {
    text-align: center;
}
.heading {
    font-family: Arial;
    margin-top:40vh;
}
.URL-input, .convert-button {
    font-size:1.3em;
    padding:5px 10px;
}
.URL-input {
    border-radius:4px 0px 0px 4px;
    width:30em;
    text-align: left;
    border:2px solid #EEEEEE;
    background: #EEEEEE;
    outline:none;
}
.URL-input:focus {
    border:2px solid #0485ff;
}
.convert-button {
    border-radius:0px 4px 4px 0px;
    border:2px solid #0485ff;
    background: #0485ff;
    color:white;
}

JavaScript и Node.js

Теперь нам нужно настроить наш JavaScript и наш сервер Node.js. Сначала давайте создадим файл JavaScript. Назовем его script.js. Затем мы собираемся связать его с нашим HTML-файлом, добавив теги скрипта внизу (очень важно).

<script src='script.js'></script>

В файле script.js мы собираемся записать этот небольшой фрагмент кода, выводящий на консоль значение ввода. Мы делаем это, чтобы убедиться, что все работает.

var convertBtn = document.querySelector('.convert-button');
var URLinput = document.querySelector('.URL-input');
convertBtn.addEventListener('click', () => {
    console.log(`URL: ${URLinput.value}`);
    sendURL(URLinput.value);
});
function sendURL(URL) {
    // We will put code here later
}

Функция sendURL() отправит URL на наш сервер. Теперь мы собираемся начать писать код для нашего Сервера с использованием Node.js. Сначала мы создадим папку с именем Server, а затем создадим файл с именем index.js внутри папки Server. Это будет код для запуска сервера. После создания файла нам нужно запустить эту команду в командной строке или терминале в папке Server:

npm init

Вам будет задан ряд вопросов о проекте. Все ответы по умолчанию подойдут. После этого мы собираемся установить несколько пакетов, которые собираемся использовать.

Введите команду ниже, чтобы установить необходимые пакеты: express, ytdl-core и cors.

npm install express cors ytdl-core

Чтобы настроить наш сервер, нам нужно ввести код в файл index.js. Нам нужно потребовать пакеты и настроить сервер:

const express = require('express');
const cors = require('cors');
const ytdl = require('ytdl-core');
const app = express();
app.listen(4000, () => {
    console.log('Server Works !!! At port 4000');
});

Вот небольшая настройка. Нам потребовались пакеты, и мы заставили сервер прослушивать порт 4000.

Если мы введем в командной строке / терминале:

node index.js

мы должны увидеть Server Works !!! At port 4000. Если вы не поняли, значит, вы сделали что-то не так.

После этого нам нужно заставить сервер прислушиваться к получению запроса на пути /download. Итак, мы добавили это:

const express = require('express');
const cors = require('cors');
const ytdl = require('ytdl-core');
const app = express();
app.use(cors());
app.listen(4000, () => {
    console.log('Server Works !!! At port 4000');
});
app.get('/download', (req,res) => {
    var URL = req.query.URL;
    res.json({url:URL});
})

поэтому, когда пользователь отправляет запрос GET на сервер по пути /download, сервер ответит запросом, вставленным с запросом. Вернемся к интерфейсу и попробуем заставить JavaScript отправлять GET-запрос на сервер. Кроме того, я использовал промежуточное ПО cors(), чтобы мой сервер мог получать запросы. Я использовал fetch() для отправки запроса из JavaScript:

var convertBtn = document.querySelector('.convert-button');
var URLinput = document.querySelector('.URL-input');
convertBtn.addEventListener('click', () => {
    console.log(`URL: ${URLinput.value}`);
    sendURL(URLinput.value);
});
function sendURL(URL) {
    fetch(`http://localhost:4000/download?URL=${URL}`, {
        method:'GET'
    }).then(res => res.json())
    .then(json => console.log(json));
}

Итак, мы можем увидеть, если мы нажмем на кнопку, мы получим ответ от сервера с URL-адресом, который мы отправили. Теперь нам нужно использовать ytdl-core, который обозначает ядро ​​YouTube DownLoader, которое будет загружать для нас видео. Вернемся к index.js. Мы собираемся заставить его загрузить видео, а затем отправить его:

const express = require('express');
const cors = require('cors');
const ytdl = require('ytdl-core');
const app = express();
app.use(cors());
app.listen(4000, () => {
    console.log('Server Works !!! At port 4000');
});
app.get('/download', (req,res) => {
var URL = req.query.URL;
res.header('Content-Disposition', 'attachment; filename="video.mp4"');
ytdl(URL, {
    format: 'mp4'
    }).pipe(res);
});

По сути, он делает следующее: когда пользователь отправляет запрос GET, он принимает запрос, указанный в URL-адресе, а затем добавляет заголовок, в котором говорится, что любое отправленное вложение должно называться video.mp4. затем используйте ytdl для загрузки видео в формате mp4, затем отправьте его (отправьте) пользователю для загрузки.

Когда вы запустите это и протестируете, вы быстро обнаружите, что это не работает. Это потому, что запрос должен быть в URL-адресе, а не в виде выборки. Итак, мы можем в основном заменить выборку перенаправлением на URL-адрес для загрузки видео.

var convertBtn = document.querySelector('.convert-button');
var URLinput = document.querySelector('.URL-input');
convertBtn.addEventListener('click', () => {
    console.log(`URL: ${URLinput.value}`);
    sendURL(URLinput.value);
});
function sendURL(URL) {
    window.location.href = `http://localhost:4000/download?URL=${URL}`;
}

и теперь у вас будет собственный загрузчик YouTube. Вы также можете поиграть с ytdl-core и попробовать добавить форматы .mp3 или .flv. Вы также можете сделать то, что я делал раньше, а именно связать API данных YouTube с вашим веб-приложением. Возможно, поиск видео и его загрузка.

ytdl-core

ytdl-core - это модуль, который можно установить в ваш проект узла. Он позволяет загружать видео с YouTube. Этот замечательный модуль сделал человек по имени fent. В нем много замечательных функций, таких как ytdl.videoInfo, который дает вам различную информацию о видео. Я использовал эту функцию для создания загрузчика YouTube, где вы можете искать видео или вставлять ссылку для загрузки видео. ytdl-core можно использовать для самых разных целей. Позвольте привести пример. Если вы хотите, чтобы на вашем веб-сайте было видео, которое вы загрузили на YouTube, и вы не хотите, чтобы оно блокировалось в местах, где YouTube заблокирован, например в школах. Затем вы можете использовать ytdl-core, чтобы загрузить собственное видео и использовать его. ytdl также позволяет проверять URL-адреса Youtube и проверять идентификаторы видео Youtube.

[Если хочешь поддержать меня]

[Этот проект находится на GitHub]

[Подробнее о ydtl-core]

Если у вас есть вопросы или вы хотите поздороваться, посетите мой сервер Discord

[Сервер Discord]

а также

- Спасибо за чтение. -

- Поделитесь своими мыслями в комментариях -