2010-12-09 7 views
4

У меня есть сценарий, который загружает файлы mp4 с youtube. Что он делает, так это генерировать ссылку формы http://youtube.com/get_video?video_id= * VIDEO_ID * & & t = * THE_TOKEN * = & fmt = 18 & asv = 2, но он больше не работает (заметил сегодня). Как вы думаете?Не удается загрузить с youtube

+5

Мы все серьезно нуждаемся в проекте с открытым исходным кодом, чтобы не отставать от ссылки youtube dl для нас. Я устаю не отставать от своей игры. – samquo

ответ

12

Вместо того чтобы пытаться использовать get_video для получения видео, попробуйте вместо этого выполнить разбор fmt_url_map (format-url map).

Вы должны найти fmt_url_map в том же месте, где вы нашли токен (например, в флеш-картах флеш-ролика YouTube или на странице YouTube). Если вы не можете найти его, отправьте запрос на http://www.youtube.com/get_video_info?video_id=VIDEO_ID, и вы получите очень длинный результат, который находится в формате name=value&name=value&.... Найдите внутри этого результата «fmt_url_map» (выполните поиск результата для строки, которая начинается с " & fmt_url_map = "и заканчивается на" & ").

После получения этого значения (возможно, придется URL-расшифровывает его), то это будет что-то вроде (без разрывов строк):

22|http://blah.youtube.com/videoplayback?blah, 
35|http://blah.youtube.com/videoplayback?blah, 
... 

, где каждый из разделенных запятыми запись начинается со значением FMT (22 или 35 в примере), за которым следует символ канала, за которым следует URL, где вы можете использовать для загрузки видео в этом формате. (Этот URL-адрес зависит от клиента, поэтому URL-адрес для определенного клиента, скорее всего, не будет работать с другим клиентом из-за проверки IP-адресов YouTube. Кроме того, через некоторое время URL-адреса истекают.)

Список различные значения fmt, см.: http://en.wikipedia.org/wiki/YouTube#Quality_and_formats и покажите «Comarison of the media media encoding options». ПРИМЕЧАНИЕ. Не все форматы могут быть доступны для всех видео.

+0

спасибо вам! – Leg10n

+0

+10 если можно. Вопрос: вы сказали, что это зависит от клиента, так что это не сработает, если я создам URL-адрес для пользователя, чтобы загрузить файл самостоятельно? Любые другие решения для этого? – samquo

+0

Это может быть проблема (хотя у get_video была и эта проблема). Если вы действительно запрашиваете страницу и получаете URL-адрес загрузки на внешнем сервере, YouTube связывает IP-адрес сервера с этим URL-адресом (точно так же, как он связывает IP-адрес с каждым токеном в методе get_video). Предполагая, что вы пытаетесь сделать это в веб-браузере, вы можете попробовать и сделать это на стороне клиента с помощью апплета Java (это то, что делают многие сайты, такие как clipnabber.com, хотя это может быть довольно неуклюжим). Если вы просто пишете полностью клиентскую программу, это должно быть хорошо, потому что все запросы отправляются с IP-адресом клиента – jhartz

2

Если вы хотите загрузить на сервер, вы можете использовать youtube-dl, который все еще работает.

0

Ну, похоже, что они удалили опцию fmt. См. http://en.wikipedia.org/wiki/YouTube#Quality_and_codecs.

+0

Это совсем не хорошо! Интересно, может ли кто-нибудь найти хак ... – Alex1987

+2

Если вы разобрали fmt_url_map (с http://www.youtube.com/get_video_info?video_id=*VIDEO_ID*), вы можете получить более прямой URL для загрузки, t есть все возможные форматы ... – jhartz

+0

Это замечательный человек! вы действительно должны сказать это как ответ! – Alex1987

Смежные вопросы