Получение ссылки на видео ВКонтакте без использования программирования

Доброго времени суток.

Не так давно обратил внимание на то, что функция, описанная ранее, перестала выдавать корректные ссылки на видео-файлы. На первый взгляд в алгоритме формирования прямой ссылки на файл ничего не изменилось, содержимое самого плеера тоже осталось неизменным — регулярные выражения так же находят необходимые данные. Но в итоге файлы не открываются — выходит ошибка 404.

После некоторых раздумий решил попробовать на других хостингах испытать скрипт и тут появилось ощущение, что что-то изменилось в алгоритме. Потому что идентификатор видео vtag, который содержится в коде плеера, меняется от хостинга к хостингу. Например один хостинг выдал:

http://cs504407.vkontakte.ru/u3284471/video/790f88efd5.240.mp4

А другой:

http://cs504407.vkontakte.ru/u3284471/video/abfdd42568.240.mp4

Хорошо видно, что изменяется название файла.

Понять, как собирается ссылка на файл нам поможет http://vkontakte.ru/js/video_html5.js. Этот скрипт как раз и вырезает необходимые данные из полученного кода плеера. Разберем подробнее что же все-таки делает скрипт, чтобы понять и получить самостоятельно без использования особых навыков программирования ссылку на видео-файл.
Из него нам интересна вот эта функция:

function pathToHD(res) {
  var s = (video_host.substr(0, 4) == "http")
    ? video_host
    : 'http://cs' + video_host + '.vkontakte.ru/';

  return s + 'u' + video_uid + '/video/' + video_vtag + '.' + res + '.mov';
}

Эта функция как раз и собирает ссылку на файл, используя переменные. Замечу, что изменилось расширение файлов (либо либо смена произошла только на программном уровне, но все равно — раньше принималось либо flv, либо mp4, а сейчас mov). Необходимые переменные:

  • video_host - определяет адрес сервера, с которого воспроизводиться видео-файл
  • video_uid - определяет  UID пользователя, загрузившего видео-файл
  • video_vtag - что-то типа ID видео-файла
  • res — входящая переменная, разрешение необходимого файла (от 240 до 1080)

Все они содержаться в коде полученного плеера. Но где? Сейчас покажу. Вконтакте.API выдает ссылку на видеоплеер, в котором, собственно, и проигрывается необходимый нам файл. Так же эту ссылку можно получить из кода. который копируется в буфер, когда Вы нажимаете на видео в ВКонтакте и там выбираете пункт «Копировать код видео». У кого нет возможности сейчас получить ссылку — вот пример ссылки

http://vkontakte.ru//video_ext.php?oid=2832967&id=159626481&hash=0a66d687743afc54

Открываем ссылку в браузере. Открываем просмотр полученных данных (в хроме Ctrl+Shift+i например, потому что правой кнопкой не получиться — вызывается меню Flash-плеера). Там находим подобный код:

var video_host = 'http://cs12894.vkontakte.ru/';
var video_uid = '282814';
var video_vtag = '2f6ba41556';
var video_no_flv = 1;
var video_max_hd = '2';
...

Конкретно такой код у меня получился, когда я открыл ссылку, приведенную выше. В своем коды Вы заметите, что video_vtag имеет другое значение.Судя по всему эта переменная является неким шифром данных об имени файла непосредственно на самом сервере и клиентских данных, полученных от Вас в заголовке запроса. У меня стойкое впечатление что тут идет так же привязка и к IP-адресу. Но не будем об этом, потому что алгоритм создания этого кода мне неизвестен пока.

Итак, мы получили эти переменные. Теперь воспользуемся функцией, приведенной выше и получим ссылку к файлу. Имя хоста у нас содержит http, значит берем его целиком. Прикладываем с конца букву u и video_uid. Далее идет слово video. Далее следует video_vtag с точкой на конце. После него прибавляем необходимое разрешение. Теоретически доступно всего 5 видов — 240, 360, 480, 720 и 1080. Какие из них доступны нам подскажет переменная video_max_hd. Она представляет собой индекс максимально возможного разрешения, если представить, что перечисление его видов чуть ранее — это массив, первый индекс которого 0. То есть для данного видео максимально доступное разрешение 480. Есть так же переменная video_no_flv. В формате FLV хранятся старые видео-файлы. Для них идет фиксированное разрешение 360.
Вот вроде бы и все. В результате у меня получилось следующее:

http://cs12894.vkontakte.ru/u282814/video/2f6ba41556.480.mov

По ней я скачал успешно видео-файл 2f6ba41556.480.mov. Уверен, что у Вас ссылка, собранная мною, выдаст ошибку 404. Попробуйте собрать свою ссылку, она позволит скачать необходимый файл.

P.S. Очень надеюсь что объяснил понятно. Если не понятно — пишите в комменты, отвечу. И еще. Алгоритм работает только для видео, которое было загружено непосредственно в ВКонтакте. И не уверен, что есть видео ВКонтекте, которые имею разрешение 1080 и не уверен, что сработает со старыми видео-файлами. Вроде все.



5 Комментарии

  • Ссылки на видео будет работать только на том же компьютере, где их собрали, т.к. они привязываются к IP запросившего.

  • Vlad

    Спасибо, работает

  • Мне кажется, что проще пройти по ссылке на видео расположенной в коде плеера, в открывшемся окне правый клик и само собой сохранить видео как… вот и все проблемы, зачем ссылки собирать???

    • Эта статья уже давно потеряла актуальность и была написана, как дополнение . Изначально стояла задача получения большого числа ссылок на видео и отображение их через ТВ-приставку на экране телевизора пользователя ВК.
      Но с тех пор много воды утекло: ВК изменили процедуру выдачи ссылок на видео (щас я даже и не знаю как это происходит). Этот метод себя изжил и для личного использования и сохранения видео я использую лично тот же метод, что вы описали.
      Спасибо за ваш комментарий )

  • Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

    Яндекс.Метрика