PHP
-Как Namba.kz генерирует ссылки, для просмотра видео :)
На досуге решил заняться чем-нибудь интересным, а точнее написать граббёр видео с намбы) не тут-то было, прямых ссылок, при публикации видео нет, а значит генерируются уже по ходу дела, видимо защита от умников))
Пример, возьмём часть кода:
<object height="375" width="100%" type="application/x-shockwave-flash" data="http://video.namba.kz/swf/player/3.2.7/flowplayer-3.2.7.swf">
<param value="true" name="allowfullscreen" />
<param value="opaque" name="wmode" />
<param value="always" name="allowscriptaccess" />
<param name="src" value="http://video.namba.kz/swf/player/3.2.7/flowplayer-3.2.7.swf" />
<param value="config=http://video.namba.kz/flashvars.php?i=15702541_15702511__2962791_1" name="flashvars" /></object>
И так, мы имеем:
Плеер: http://video.namba.kz/swf/player/3.2.7/flowplayer-3.2.7.swf
Подгружаемый конфиг: http://video.namba.kz/flashvars.php?i=15702541_15702511__2962791_1
Покопавшись в конфиге, также не нашел прямых ссылок, зато нашел метод выполнения XSS :)
Далее, запустил обычный http снифер и обнаружил, что при нажатии кнопочки Play идёт видео поток:
http://download.files.namba.kz/files/0a93dd3c5883fa4048299f4c3936a619/4f4e3a1d/15702541/video.flv
Данные в сылке: 4f4e3a1d и 15702541 берутся из конфига:
4f4e3a1d - Штамп времени, для генерации временной ссылки, примерно выглядит так:
$time = time();
$time_hex = sprintf("%08x", $time);
15702541 - Уникальный ID ролика
А вот Хэш: 0a93dd3c5883fa4048299f4c3936a619, я так понял - генерируется самим плеером.
Пришлось копаться, в исходном коде плеера :) Думал что-то интересное, а это оказался стандартный Flowplayer) Вот исходной код функции:
internal function buildClipUrl(arg1:String, arg2:org.flowplayer.model.Clip):String
{
var loc1:*=0;
var loc2:*=null;
if (!arg1)
{
return null;
}
this.log.debug("main resolver is " + this._mainResolver);
if (org.flowplayer.util.URLUtil.isCompleteURLWithProtocol(arg2.getPreviousResolvedUrl(this._mainResolver)))
{
loc1 = arg2.url.lastIndexOf("/files/") + 6;
loc2 = [arg2.url.substring(0, loc1), arg2.url.substring(loc1 + 1)];
return org.flowplayer.util.URLUtil.appendToPath(org.flowplayer.util.URLUtil.appendToPath(loc2[0], this.generateProtection(arg1, loc2[1])), loc2[1]);
}
return org.flowplayer.util.URLUtil.appendToPath(this.generateProtection(arg1, arg2.getPreviousResolvedUrl(this._mainResolver)), arg2.url);
}
internal function generateProtection(arg1:String, arg2:String):String
{
var loc1:*=this._config.token;
return com.adobe.crypto.MD5.hash(loc1 + "/" + arg1) + "/" + arg2;
}
После изучения кода, пишем функцию на php и делаем всё, что нам нужно, от вставки в свой плеер до граббёра.