Найти - Пользователи
Полная версия: Как получить ссылку на видео с флешпроигрователя
Начало » Python для экспертов » Как получить ссылку на видео с флешпроигрователя
1 2
agryn
Есть популярный сервис видео например redtube . com (тематика ресурса выбрана случайно, просто в ето ресурсе защита от скачивания видео по максимуму), флеш-проигрыватель которого старательно прятает прямую ссылку на видео (например я вытянул с помощью HttpFox http://videos.flv2 .redtubefiles.com/_videos_t4vn23s9jc5498tgj49icfj4678/0000122/_h264flv/0122497.flv?47aac1f74dca44b0626f9b5acf21d75cd5dee7e8937c9cd51b27154db967dca9653b4ace69adce60a472f8e037936e2cd1c89f6d4be588e6ebb1&ec_seek=0), при анализе дампа флеш-проигрывателя и модулей которые он погружает конечно ни полной ссылки ни ее элементов не обнаружено (использовал SWFRETools) - отсюда предположение что ссылка генерируется внутри скомпилированного кода.
Вопрос: как достать оттуда ету самую прямую ссылку для скачивания видео?
Как грубый но надежный вариант использовать например селениум с браузером настроенным на прокси который логирует http-запросы, а запросы потом парсятса и вытаскиваются ссылки. Но многопоточность на такорм варианте точно не построить.
Есть предположения что существует некий отладчик под swf c выводом действий в которых и можно было б выловить ссылку, но почему то поисковый запрос “python swf debbuger” не дал результатов.
Так может кто сталкивался с подобными заданиями? Подскажите как решить?
s0rg
Декомпиляция и разбор алгоритма формирования ссылки внутри плеера один и самых вероятных вариантов - минус только в том, что при изменении (обновлении) плеера работу придется делать по-новой. На какой OC планируете делать?
Lexander
Твою дивизию! Предупреждать же надо что за ссылку даете. :mad:
Плюс ее написать нужно так, чтобы поисковые роботы не ассоциировали наш сайт с порноресурсом.

По теме.
Что потом с ссылкой делать будете?
Если скачивать файл, то вы зря отвергли решение с селениумом.
При загрузке у вас не селениум узкое место, а сеть и диск, куда сохранять будете.
Плюс систему нужно делить на две части:
1. парсит ссылки и складывает их в очередь на загрузку
2. загружает файлы по ссылкам из очереди
agryn
s0rg
Декомпиляция и разбор алгоритма формирования ссылки внутри плеера один и самых вероятных вариантов
Етим сейчас и занимаюс. Использую утлилиту SWFRETools (swfdump -D 87812.swf > 87812.swf.txt)
В полном дампе 87812.swf кажется начинаю находить необходимые куски. Только в структуре swf я вообще 0.
Например в дампе нашел такой кусок
     method <q>[public]::void <q>[private]NULL::updateHash=()(0 params, 0 optional)
[stack:4 locals:5 scope:5-8 flags:] slot:0
{
00000) + 0:0 getlocal_0
00001) + 1:0 pushscope
00002) + 0:1 pushnull
00003) + 1:1 coerce <q>[public]flash.net::URLLoader
00004) + 1:1 setlocal_1
00005) + 0:1 findpropstrict <q>[public]flash.net::URLLoader
00006) + 1:1 constructprop <q>[public]flash.net::URLLoader, 0 params
00007) + 1:1 coerce <q>[public]flash.net::URLLoader
00008) + 1:1 setlocal_1
00009) + 0:1 getlocal_1
00010) + 1:1 getlex <q>[public]flash.events::Event
00011) + 2:1 getproperty <q>[public]::COMPLETE
00012) + 2:1 getlocal_0
00013) + 3:1 getproperty <q>[private]NULL::xmlHandler
00014) + 3:1 callpropvoid <q>[public]::addEventListener, 2 params
00015) + 0:1 getlex <q>[public]::Math
00016) + 1:1 getlex <q>[public]::Math
00017) + 2:1 callproperty <q>[public]::random, 0 params
00018) + 2:1 pushshort 1000
00019) + 3:1 multiply
00020) + 2:1 callproperty <q>[public]::round, 1 params
00021) + 1:1 callproperty <q>[namespace]http://adobe.com/AS3/2006/builtin::toString, 0 params
00022) + 1:1 coerce_s
00023) + 1:1 setlocal_2
00024) + 0:1 getlex <q>[public]com.adobe.crypto::MD5
00025) + 1:1 getlocal_2
00026) + 2:1 pushstring "75678366gjhsgdf73624hgdfsjhgsf63245sdkjfh"
00027) + 3:1 add
00028) + 2:1 callproperty <q>[public]::hash, 1 params
00029) + 1:1 coerce_s
00030) + 1:1 setlocal_3
TRY {
00031) + 0:1 getlocal_1
00032) + 1:1 findpropstrict <q>[public]flash.net::URLRequest
00033) + 2:1 pushstring "http://embed.redtube.com/video/info/?id="
00034) + 3:1 getlocal_0
00035) + 4:1 getproperty <q>[protected]com.longtailvideo.jwplayer.model:PlayerConfig::_video_id
00036) + 4:1 add
00037) + 3:1 pushstring "&e="
00038) + 4:1 add
00039) + 3:1 getlocal_2
00040) + 4:1 add
00041) + 3:1 pushstring "&h="
00042) + 4:1 add
00043) + 3:1 getlocal_3
00044) + 4:1 add
00045) + 3:1 constructprop <q>[public]flash.net::URLRequest, 1 params
00046) + 2:1 callpropvoid <q>[public]::load, 1 params
00047) + 0:1 jump ->59
} // END TRY (HANDLER: 48)
CATCH(<q>[public]::Error <q>[public]::err)
00048) + 1:0 getlocal_0
00049) + 2:0 pushscope
00050) + 1:1 newcatch 0
00051) + 2:1 dup
00052) + 3:1 setlocal r4
00053) + 2:1 dup
00054) + 3:1 pushscope
00055) + 2:2 swap
00056) + 2:2 setslot 1
00057) + 0:2 popscope
00058) + 0:1 kill r4
00059) + 0:1 returnvoid
}
Я так понял ето функция, как тогда из swf выдрать “75678366gjhsgdf73624hgdfsjhgsf63245sdkjfh” и "http://embed.red tube.com/video/info/?id=" без лишних телодвижений со созданием дампа?
s0rg
какой OC планируете делать?
Да не очень важно. Но предпочтение для nix*
agryn
Lexander
Что потом с ссылкой делать будете?
Потом нужно сразу качать так как (на данном примере) через некоторое время ссылка стает неактуальной.
s0rg
Неужели так сложно посмотреть html код _внимательно_?
<div id=“html5_vid”> -> <source src=“вот тут ваша _прямая_ ссылка на объект”> только копируйте ее полностью - вместе с параметрами и скачивайте urllib-ом на здоровье.
lorien
> Твою дивизию! Предупреждать же надо что за ссылку даете. :mad:
> Плюс ее написать нужно так, чтобы поисковые роботы не ассоциировали наш сайт с порноресурсом.

Вы преувеличиваете, из-за одной ссылки никто не будет вас ассоциировать.
s0rg
lorien
Вы преувеличиваете, из-за одной ссылки никто не будет вас ассоциировать.
Решил проверить это в гугле и наткнулся на вот эту библиотеку которая будет интересна ТСу )))
Lexander
lorien
Вы преувеличиваете, из-за одной ссылки никто не будет вас ассоциировать.
Не вас, а нас.
Вы желаете проверить?
Особенно будет интересно разбираться что не так, если бомба сработает через пару лет после очередного изменения бан-фильтра гугл.

ЗЫ
И да, такая ссылка полностью соответствует правилам форума и точно в духе последних событий в Python комьюнити.
Давай, жги дальше!
lorien
Не вас, а нас.
Вы желаете проверить?
Особенно будет интересно разбираться что не так, если бомба сработает через пару лет после очередного изменения бан-фильтра гугл.
Вы плохо представляете о чём говорите. Плохо представляете масштабы спама в интернете, если думаете, что одна ссылка (причём на нормальный белый ресурс) может привести к пессемизации сайта. А что за события в python коммунити?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB