KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

Скрипт для скачивания видео с YouTube на PHP

Статьи / PHP

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


Итак, создаём php-файл и сразу начинаем писать код. Добавим переменную $link, запишем в неё ссылку на любое видео с ютуба:

<?php

$link = 'https://www.youtube.com/watch?v=y2YUJ186Ke4';

GET-параметр v - это идентификатор нашего видео. Его из общей ссылки необходимо как-то вычленить. Да, можно было бы сделать всё вручную и в $link вставлять уже вырезанный ID, но всё же лениться не будем и сделаем небольшой задел на будущее (например, для реализации какого-то интерфейса или интеграции скрипта в бота):

parse_str( parse_url( $link, PHP_URL_QUERY ), $params );
$video_id = $params['v'] ?? exit;


Далее формируем POST-запрос к конечной точке youtubei/v1/player:

$arr = [
    'context' => [
        'client' => [
            'hl' => 'en',
            'clientName' => 'WEB',
            'clientVersion' => '2.20210721.00.00',
            'mainAppWebInfo' => [
                'graftUrl' => '/watch?v=' . $video_id
            ]
        ]
    ],
    'videoId' => $video_id
];


$curl = curl_init();

curl_setopt( $curl, CURLOPT_URL, 'https://www.youtube.com/youtubei/v1/player?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8' );
curl_setopt( $curl, CURLOPT_HTTPHEADER, [ 'Content-Type:application/json' ] );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, json_encode( $arr ) );
curl_setopt( $curl, CURLOPT_ENCODING, 'gzip, deflate' );

$result = json_decode( curl_exec( $curl ), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES );
curl_close( $curl );


На данный момент в переменной $result хранится огромной массив полученных данных, некоторые из которых нам придётся вытащить и использовать для дальнейшей работы:

$video_details = $result['videoDetails'];
$streaming_data = $result['streamingData'];
$formats = $streaming_data['formats'];
$video_name = $video_details['title'];

$video = [];

foreach ( $formats as $key )
{
    $data = $key;

    $mime_type = explode( ';', $data['mimeType'] );
    $data['mime'] = $mime_type[0];
    $data['format'] = ltrim( substr( $mime_type[0], stripos( $mime_type[0], '/' ) ), '/' );

    $video[] = $data;
}

$video_file_name = strtolower( str_replace( ' ', '_', $video_name ) ) . '.' . $video[0]['format'];
$download_url = $video[0]['url'];
$file_name = preg_replace( '/[^A-Za-z0-9.\_\-]/', '', basename( $video_file_name ) );


Дальше проверяем переменную $download на пустоту:

if ( $download_url )
{
    header( 'Cache-Control: public' );
    header( 'Content-Description: File Transfer' );
    header( 'Content-Disposition: attachment; filename=' . $file_name );
    header( 'Content-Type: application/zip' );
    header( 'Content-Transfer-Encoding: binary' );

    readfile( $download_url );
}

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


Весь код:

<?php

$link = 'https://www.youtube.com/watch?v=y2YUJ186Ke4';

parse_str( parse_url( $link, PHP_URL_QUERY ), $params );
$video_id = $params['v'] ?? exit;

$arr = [
    'context' => [
        'client' => [
            'hl' => 'en',
            'clientName' => 'WEB',
            'clientVersion' => '2.20210721.00.00',
            'mainAppWebInfo' => [
                'graftUrl' => '/watch?v=' . $video_id
            ]
        ]
    ],
    'videoId' => $video_id
];


$curl = curl_init();

curl_setopt( $curl, CURLOPT_URL, 'https://www.youtube.com/youtubei/v1/player?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8' );
curl_setopt( $curl, CURLOPT_HTTPHEADER, [ 'Content-Type:application/json' ] );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_POST, true );
curl_setopt( $curl, CURLOPT_POSTFIELDS, json_encode( $arr ) );
curl_setopt( $curl, CURLOPT_ENCODING, 'gzip, deflate' );

$result = json_decode( curl_exec( $curl ), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES );
curl_close( $curl );


$video_details = $result['videoDetails'];
$streaming_data = $result['streamingData'];
$formats = $streaming_data['formats'];
$video_name = $video_details['title'];

$video = [];

foreach ( $formats as $key )
{
    $data = $key;

    $mime_type = explode( ';', $data['mimeType'] );
    $data['mime'] = $mime_type[0];
    $data['format'] = ltrim( substr( $mime_type[0], stripos( $mime_type[0], '/' ) ), '/' );

    $video[] = $data;
}

$video_file_name = strtolower( str_replace( ' ', '_', $video_name ) ) . '.' . $video[0]['format'];
$download_url = $video[0]['url'];
$file_name = preg_replace( '/[^A-Za-z0-9.\_\-]/', '', basename( $video_file_name ) );


if ( $download_url )
{
    header( 'Cache-Control: public' );
    header( 'Content-Description: File Transfer' );
    header( 'Content-Disposition: attachment; filename=' . $file_name );
    header( 'Content-Type: application/zip' );
    header( 'Content-Transfer-Encoding: binary' );

    readfile( $download_url );
}


download.zip

  • 5id15
  • 03.09.2022
  • 11 696
  • 3
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
Создаем собственного бота VK, подробная инструкция как создать бота VK за 5 минут!
16-01-2019, 06:02, Статьи / PHP
[Часть 1] Написание своего сайта. Регистрация и Авторизация
[Часть 1] Написание своего сайта. Регистрация и Авторизация
21-07-2019, 19:03, Статьи / PHP
Стейты для бота ВК (последовательный ввод step by step)
Стейты для бота ВК (последовательный ввод step by step)
20-07-2022, 20:03, PHP
[VK BOT] Бот раздающий ключи Steam
[VK BOT] Бот раздающий ключи Steam
12-07-2019, 11:56, PHP
Авторизация на сайте через ВК с занесением пользователя в базу данных (PHP)
Авторизация на сайте через ВК с занесением пользователя в базу данных (PHP)
27-06-2022, 18:21, PHP
  1. davidsoft

    davidsoft Гость 3 декабря 2022 01:02

    Русских названий нет

  2. Криминальный город

    Криминальный город Гость 7 декабря 2022 21:41

    Не всё качает

  3. Павел

    Павел Гость 12 марта 2025 08:45

    Уже не работает.

{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Планируете ли вернуться к динамической обложке?
Скрипт для скачивания видео с YouTube на PHP
Уже не работает.
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 936
Добавлено за сутки: +0
Пользователей: 4124
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2023. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль