Перейти к содержанию

Стол заказов

  • 16 787
  • 105
Проверить

Кошелёк в Telegram | Wallet

  • 1 065
  • 1
Проверить

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


Рекомендуемые сообщения

  • Aprel Team

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

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

<?php

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

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 );
}

 

Ссылка на комментарий
  • 2 месяца спустя...
  • Делегаты





Accredited Roofing Professionals in Wilmington North Carolina

Residing close to the shoreline has many benefits: ocean winds, picturesque scenery and the distinct sound of breakers hitting on the beach are some of them. However, living in such areas also brings distinctive issues: wind, showers and the ever-present salty breeze can harm roof surfaces causing leaks, moisture penetration and potentially fungus development under slates, thus necessitating hiring an expert roofing expert in Wilmington North Carol to tackle these problems efficiently. That is why maintaining access to dependable roofing contractors in Wilmington North Carol is vital!

Roofing experts accredited with the State can examine possible concerns and take preventative actions to keep roofing systems in good order - this could reduce money in fixes while ensuring a safer living space or working environment for inhabitants or laborers.

These businesses specialize in residential and commercial roof services such as metal roof installations, foam roof projects, reflective roof coating projects, shingle repair fixes, complete replacements of both residential and industrial roofing systems and maintenance tasks. Additionally, they can handle installations for HOAs to meet requirements.

Roofers certified in Wilmington must carry coverage and bond assurance when doing roofing at homes and commercial sites, to safeguard homeowners versus potential damages that may take place during a task and make certain their roof is fixed or replaced by competent professionals. Additionally, it assists the property owner validate whether their selected accredited roofing expert has the knowledge and ability to provide top-notch services.







[url=https://portcityexteriors.com/pressure-washing/]Roofing sealing offerings near me in Castle Hayne North Carolina[/url]


[url=https://leakedmodels.com/forum/threads/hotwifemisst-blackbreeding.10121/#post-398191]Tackling Roof Destruction from Descending Trees[/url] 8ab3cd0
Ссылка на комментарий

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей на связи

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Кто на связи   7 пользователей, 0 анонимных, 619 гостей (Посмотреть всех)

×
×
  • Создать...