Добрый день. Получаю с помощью PHP информацию о видео таким образом:
$link = 'https://www.youtube.com/watch?v=lw4T8gfcKZ0';
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'];
echo "<pre>";
print_r($streaming_data);
echo "</pre>";
В итоге на некоторых видео, вместо параметра url, я получаю
signatureCipher, который шифрует подпись, в JS YouTube меняет местами символы, насколько я понял, функции для расшифровки насколько я понял находятся здесь
https://www.youtube.com/s/player/c353919c/player_i... но не могу понять точно, как это работает.
Подскажите пожалуйста, кто копал в этом направлении или кто может помочь подсказать, как сформировать правильную ссылку для скачивания таких видео.
Видео, которое отдаёт signatureCipher -
https://www.youtube.com/watch?v=lw4T8gfcKZ0