URL загрузки видео с YouTube - PullRequest
31 голосов
/ 22 июля 2010

Я написал программу, которая получает URL видео с YouTube и загружает ее
Сегодня я сделал это:
1. получить видео "токен" из "/ get_video_info? Video_id = ID" как:

http://www.youtube.com/get_video_info?video_id=jN0nWjvzeNc  

2. Загрузите видео, запросив его у "/ get_video? Video_id = ID & t = TOKEN & fmt = FORMAT_ID", например:

http://www.youtube.com/get_video?video_id=jN0nWjvzeNc&t=vjVQa1PpcFMgAK0HB1VRbinpVOwm29eGugPh3fBi6Dg%3D&fmt=18  

Но это больше не работает!
Какой новый URL для загрузки?

Спасибо

Ответы [ 5 ]

15 голосов
/ 14 ноября 2012

На самом деле я работаю над аналогичным проектом, который загружает видеофайл с YouTube. Я считаю, что get_video может быть заблокировано Youtube. поэтому вместо использования get_video. я использую информацию о видео, полученную из get_video_info, и извлекаю ее, чтобы получить URL видеофайла.

В get_video_info есть url_encoded_fmt_stream_map. После кодирования вы можете найти URL и значение подписи каждого видео в другом формате. Таким образом, URL файла имеет вид [значение URL] + '& signature =' + [значение sig].

Дополнительно я нахожу следующую тему, в которой используется тот же метод, что и у меня. Надеюсь, это поможет вам.

Не могу скачать с YouTube

Если вы заинтересованы в том, как загрузить видеофайл YouTube, существует небольшая программа, написанная мной для демонстрации процесса. Вы можете использовать его.

https://github.com/johnny0614/YoutubeVideoDownload

10 голосов
/ 20 декабря 2012

Вы можете получить поток напрямую, используя только

http://www.youtube.com/get_video_info?video_id=jN0nWjvzeNc

Я создал небольшой скрипт для потоковой передачи видео YouTube на PHP.Посмотрите, как скрипт получает видеофайл.

<?php 
@set_time_limit(0); 
$id = $_GET['id']; //The youtube video ID
$type = $_GET['type']; //the MIME type of the video

parse_str(file_get_contents('http://www.youtube.com/get_video_info?video_id='.$id),$info); 
$streams = explode(',',$info['url_encoded_fmt_stream_map']); 

foreach($streams as $stream){ 
    parse_str($stream,$real_stream); 
    $stype = $real_stream['type']; 
    if(strpos($real_stream['type'],';') !== false){ 
        $tmp = explode(';',$real_stream['type']); 
        $stype = $tmp[0]; 
        unset($tmp); 
    } 
    if($stype == $type && ($real_stream['quality'] == 'large' || $real_stream['quality'] == 'medium' || $real_stream['quality'] == 'small')){ 
        header('Content-type: '.$stype); 
        header('Transfer-encoding: chunked'); 
        @readfile($real_stream['url'].'&signature='.$real_stream['sig']); //Change here to do other things such as save the file to the filesystem etc.
        ob_flush(); 
        flush(); 
        break; 
    } 
}
?>

См. Рабочую демонстрацию здесь .Я надеюсь, что это может помочь вам.

10 голосов
/ 24 июля 2010

Добавьте &asv=2 в конец URL.

2 голосов
/ 06 апреля 2013

В прошлый раз я работал над исправлением одного из сломанных расширений Chrome для загрузки видео с YouTube.Я исправил это, изменив часть скрипта.

(Javascript)

var links = new String();
var downlink = new String();
var has22 = new Boolean();
has22 = false;
var Marked = false;

var FMT_DATA = fmt_url_map;//This is html text that you have to grab. In case of extension it was readily available through:document.getElementsByTagName('script');

var StrSplitter1 = '%2C', StrSplitter2 = '%26', StrSplitter3 = '%3D';
if (FMT_DATA.indexOf(',') > -1) { //Found ,
    StrSplitter1 = ',';
    StrSplitter2 = (FMT_DATA.indexOf('&') > -1) ? '&' : '\\u0026';
    StrSplitter3 = '=';
}

var videoURL = new Array();
var FMT_DATA_PACKET = new Array();
var FMT_DATA_PACKET = FMT_DATA.split(StrSplitter1);

for (var i = 0; i < FMT_DATA_PACKET.length; i++) {
    var FMT_DATA_FRAME = FMT_DATA_PACKET[i].split(StrSplitter2);
    var FMT_DATA_DUEO = new Array();

    for (var j = 0; j < FMT_DATA_FRAME.length; j++) {
        var pair = FMT_DATA_FRAME[j].split(StrSplitter3);
        if (pair.length == 2) {
            FMT_DATA_DUEO[pair[0]] = pair[1];
        }
    }

    var url = (FMT_DATA_DUEO['url']) ? FMT_DATA_DUEO['url'] : null;

    if (url == null) continue;
    url = unescape(unescape(url)).replace(/\\\//g, '/').replace(/\\u0026/g, '&');
    var itag = (FMT_DATA_DUEO['itag']) ? FMT_DATA_DUEO['itag'] : null;
    var itag = (FMT_DATA_DUEO['itag']) ? FMT_DATA_DUEO['itag'] : null;
    if (itag == null) continue;
    var signature = (FMT_DATA_DUEO['sig']) ? FMT_DATA_DUEO['sig'] : null;
    if (signature != null) {
        url = url + "&signature=" + signature;
    }
    if (url.toLowerCase().indexOf('http') == 0) { // validate URL 

        if (itag == '5') {
            links += '<a href="' + url + '&title=' + username + title + quality240 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v240p">FLV (240p)</span></a>';
        }
        if (itag == '18') {
            links += '<a href="' + url + '&title=' + username + title + quality360 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v360p">MP4 (360p)</span></a>';
        }
        if (itag == '35') {
            links += '<a href="' + url + '&title=' + username + title + quality480 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v480p">FLV (480p)</span></a>';
        }
        if (itag == '22') {
            links += '<a href="' + url + '&title=' + username + title + quality720 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v720p">MP4 HD (720p)</span></a>';
        }
        if (itag == '37') {
            links += ' <a href="' + url + '&title=' + username + title + quality1080 + '"style="text-decoration:none"><span class="yt-uix-button-menu-item" id="v1080p">MP4 HD (1080p)</span></a>';
        }
        if (itag == '38') {
            links += '<a href="' + url + '&title=' + username + title + quality4k + '"style="text-decoration:none"><span class="yt-uix-button-menu-item"  id="v4k">MP4 HD (4K)</span></a>';
        }

        FavVideo();
        videoURL[itag] = url;
        console.log(itag);
    }
}

Вы можете получить отдельную ссылку на видео из массива videoURL[itag].

Расширение можно загрузитьс здесь .

Надеюсь, это кому-нибудь поможет.Это рабочее решение (по состоянию на 06.04.2013)

1 голос
/ 07 ноября 2018

После многих неудачных попыток мне помогут эти репозитории на github:

https://github.com/rg3/youtube-dl

Получить URL только как:

youtube-dl 'https://www.youtube.com/watch?v=bo_efYhYU2A' --get-url

скачать mp4 и сохранить как a.mp4 как:

youtube-dl 'https://www.youtube.com/watch?v=bo_efYhYU2A' -f mp4 -o a.mp4

Удачи.

...