Использование get_video на YouTube для загрузки видео - PullRequest
6 голосов
/ 29 декабря 2011

Я пытаюсь получить URL-адрес любого видео на YouTube, например:

Открыть

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

затем возьмите значение токена account_playback_token и откройте этот URL:

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

Это должно открыть страницу только с видео или начать загрузку видео. Но ничего не происходит, окно активности Safari показывает «Не найдено», поэтому с URL-адресом что-то не так. Я хочу интегрировать это в приложение для iPad, и метод javascript для получения URL-адреса видео, который я использую в версии приложения для iPhone, не работает, поэтому мне нужно другое решение.

YouTube постоянно меняется, и я думаю, что URL просто устарел. Пожалуйста, помогите:)

Edit: похоже, что метод get_video больше не работает. Буду очень признателен, если кто-нибудь скажет мне другой способ найти URL видео.

Спасибо, мне действительно нужна помощь.

Ответы [ 3 ]

10 голосов
/ 31 декабря 2011

Извините, это больше невозможно. Они ограничивают токен IP-адресом, который его получил.

Вот обходной путь, используя функцию get_headers(), которая дает вам массив со ссылкой на видео. Я ничего не знаю о ios, поэтому, надеюсь, вы сможете переписать этот код PHP самостоятельно.

<?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>';
}
?>
3 голосов
/ 06 января 2012

Я использую это, и оно качается: http://rg3.github.com/youtube-dl/

Просто скопируйте URL-адрес YouTube из браузера и выполните эту команду с URL-адресом YouTube в качестве единственного аргумента.Он выяснит, как найти видео наилучшего качества и загрузить его для вас.

1 голос
/ 06 декабря 2014

Отлично! Мне нужен был способ получить целый плейлист видео.

В Linux это то, что я использовал:

у = http://www.youtube.com; F = "http://gdata.youtube.com/feeds/api/playlists/PLeHqhPDNAZY_3377_DpzRSMh9MA9UbIEN?start-index=26"; для меня в $ (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"; сделано

Вы должны найти идентификатор плейлиста по обычному URL-адресу Youtube, например: https://www.youtube.com/playlist?list=PLeHqhPDNAZY_3377_DpzRSMh9MA9UbIEN

Кроме того, этот метод использует API gdata, ограничивая 25 записей на страницу.
Следовательно, параметр? Start-index = 26 (чтобы получить страницу 2 в моем примере)

Это может использовать некоторую очистку и дополнительную логику для перебора всех наборов из 25 тоже.

Кредиты:

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

http://www.commandlinefu.com/commands/view/3154/download-youtube-playlist (что само по себе не вполне работало)

...