Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using get_video on YouTube to download a video

I am trying to get the video URL of any YouTube video like this:

Open

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

then take the account_playback_token token value and open this URL:

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

This should open a page with just the video or start a download of the video. But nothing happens, Safari's activity window says 'Not found', so there is something wrong with the URL. I want to integrate this into a iPad app, and the javascript method to get the video URL I use in the iPhone version of the app isn't working, so I need another solution.

YouTube changes all the time, and I think the URL is just outdated. Please help :)

Edit: It seems like the get_video method doesn't work anymore. I'd really appreciate if anybody could tell me another way to find the video URL.

Thank you, I really need help.

like image 471
JonasG Avatar asked Dec 28 '11 22:12

JonasG


2 Answers

Sorry, that is not possible anymore. They limit the token to the IP that got it.

Here's a workaround by using the get_headers() function, which gives you an array with the link to the video. I don't know anything about ios, so hopefully you can rewrite this PHP code yourself.

<?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>';
}
?>
like image 108
Wouter Dorgelo Avatar answered Sep 28 '22 09:09

Wouter Dorgelo


I use this and it rocks: http://rg3.github.com/youtube-dl/

Just copy a YouTube URL from your browser and execute this command with the YouTube URL as the only argument. It will figure out how to find the best quality video and download it for you.

like image 25
Teddy Avatar answered Sep 28 '22 08:09

Teddy