2011-12-28 30 views
6

Estoy tratando de obtener la URL del video de cualquier vídeo de YouTube como esto:Usando get_video en YouTube para descargar un video

abierto

http://youtube.com/get_video_info?video_id=VIDEOID 

luego tomar el valor del token account_playback_token y abrir esta URL:

http://www.youtube.com/get_video?video_id=VIDEOID&t=TOKEN&fmt=18&asv=2 

Esto debería abrir una página solo con el video o iniciar una descarga del video. Pero no ocurre nada, la ventana de actividad de Safari dice 'No encontrado', por lo que hay algo mal con la URL. Quiero integrar esto en una aplicación para iPad, y el método javascript para obtener la URL del video que uso en la versión de iPhone de la aplicación no funciona, por lo que necesito otra solución.

YouTube cambia todo el tiempo, y creo que la URL está desactualizada. Por favor ayuda :)

Editar: Parece que el método get_video ya no funciona. Realmente apreciaría si alguien pudiera decirme otra forma de encontrar la URL del video.

Gracias, realmente necesito ayuda.

Respuesta

9

Lo sentimos, ya no es posible. Limitan el token al IP que lo obtuvo.

Aquí hay una solución mediante el uso de la función get_headers(), que le proporciona una matriz con el enlace al video. No sé nada sobre ios, así que espero que puedas reescribir este código PHP tú mismo.

<?php 
if(empty($_GET['id'])) { 
    echo "No id found!"; 
} 

else { 

    function url_exists($url) { 
     if(file_get_contents($url, FALSE, NULL, 0, 0) === false) return false; 
     return true; 
    } 

    $id = $_GET['id']; 

    $page = @file_get_contents('http://www.youtube.com/get_video_info?&video_id='.$id); 

    preg_match('/token=(.*?)&thumbnail_url=/', $page, $token); 

    $token = urldecode($token[1]); 

    $get = $title->video_details; 

    $url_array = array ("http://youtube.com/get_video?video_id=".$id."&t=".$token, 
    "http://youtube.com/get_video?video_id=".$id."&t=".$token."&fmt=18"); 

    if(url_exists($url_array[1]) === true) { 
     $file = get_headers($url_array[1]); 
    } 

    elseif(url_exists($url_array[0]) === true) { 
     $file = get_headers($url_array[0]); 
    } 

    $url = trim($file[19],"Location: "); 

    echo '<a href="'.$url.'">Download video</a>'; 
} 
?> 
+0

Pero está utilizando GET_URL también? ¿Y qué es get_headers(), es parte de la url o una función? ¿Podrías explicar tu código en palabras? Realmente me gustaría darte la recompensa, solo necesito un poco más de ayuda. Gracias – JonasG

+0

Por favor ayuda! ¡Necesito saber esto! – JonasG

+0

Lo busqué de nuevo y luego lo entendí por completo: D pero ¿por qué no da enlaces a todos los formatos en cada resolución (en 720p da mp4 y x-flv, en 480p da los enlaces para flv yx -flv ...) ¿Hay alguna manera de obtener los enlaces para video mp4 en todas las resoluciones? gracias – JonasG

3

utilizo esto y rocas: http://rg3.github.com/youtube-dl/

Sólo tienes que copiar una URL de YouTube desde su navegador y ejecutar este comando con la dirección URL de YouTube como el único argumento. Se dará cuenta de cómo encontrar el mejor video de calidad y descargarlo por usted.

1

Genial! Necesitaba una forma de tomar una lista de reproducción completa de videos.

En Linux, esto es lo que he utilizado:

y = http://www.youtube.com; f = "http://gdata.youtube.com/feeds/api/playlists/PLeHqhPDNAZY_3377_DpzRSMh9MA9UbIEN?start-index=26"; para i en $ (curl -s $ f | grep -o "url = '$ y/watch? V = [^'] '"); do d = $ (echo $ i | sed "s | url \ = '$ y/watch? v = (.) &. *' | \ 1 | "); youtube-dl --restrict-filenames "$ y/watch? v = $ d"; hecho

Tienes que encontrar el ID de lista de reproducción a partir de una URL de Youtube común como: https://www.youtube.com/playlist?list=PLeHqhPDNAZY_3377_DpzRSMh9MA9UbIEN

Además, esta técnica utiliza la API de GData, limitando 25 registros por página.
De ahí el parámetro? Start-index = 26 (para obtener la página 2 en mi ejemplo)

Esto podría necesitar un poco de limpieza y lógica extra para iterar a través de todos los conjuntos de 25, también.

Créditos:

https://stackoverflow.com/a/8761493/1069375

http://www.commandlinefu.com/commands/view/3154/download-youtube-playlist (que a su vez no funcionó bastante)

Cuestiones relacionadas