Такаааа, има нещо гнило.
Досега можехме да дърпаме от vbox7 само като пренапишем адреса, за да получим името на flv файла. Обаче вече не става. Кое е различното?
Например следният клип: http://www.vbox7.com/play:d1a82e0e
Да почнем от html файла на тази връзка. След редактиране на сорса - коментиране, триене и проба дали все още се зарежда филма, стигаме до ето това, като функционалността му се запазва:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Funky G - Robinja / VBoX7</title>
<link href="http://i47.vbox7.com/design/class.css" rel="stylesheet" type="text/css">
</head>
<body>
<script type="text/javascript" src="http://i.vbox7.com/player/swfobject.js"></script>
</div>
<div id="flashcontent">
</div>
<script type="text/javascript">
var so = new SWFObject("http://i47.vbox7.com/player/vbox777.swf", "VBOXplayer", "450", "403", "7", "#000000");
so.addVariable("vid", "d1a82e0e");
so.addVariable("dWidth", "320");
so.addVariable("dHeight", "240");
so.addParam("allowScriptAccess", "always");
so.write("flashcontent");
</script>
</body>
</html> |
Общо взето се създава обект, който извиква флаш плеъра и му предава като параметър идентификатора на желаното от нас филмче.
Самият флаш плеър е видно че се намира на адрес http://i47.vbox7.com/player/vbox777.swf
А параметърът се предава чрез so.addVariable("vid", "d1a82e0e");
Така поотделно тези двете неща не ни вършат работа. За целта трябва да разберем какво прави flash плеъра този параметър vid. Плеъра може да се свали например с flashget. От там насетне един флаш декомпилатор би бил много полезен - например Flash Decompiler Trillix, макар че доста полезна се оказва и следната тема: http://www.download.bg/index.php?cls=forum&mtd=thread&t=62641&q=flash%20decompiler#post62706
След като се декомпилира въпросният плеър, в секцията със скриптовете се появява едно много интересно нещо, а именно:
stop()
if (getProperty("",_url).substr(0, 4) == "file") {
vid = "02299c6a"
}
getVideoFileLocation = new LoadVars ()
getVideoFileLocation.vid = _root.vid
getVideoFileLocation.onLoad = function (serverIsOnline) {
if (serverIsOnline == false) {
_root.unloadMovie()
}
if (this.videoFile != undefined) {
_root.videoFileLocation = this.videoFile
gotoAndStop(2)
trace(_root.videoFileLocation)
}
}
getVideoFileLocation.sendAndLoad("http://www.vbox7.com/play/magare.do", getVideoFileLocation, "POST") |
редът getVideoFileLocation.vid = _root.vid предава на обекта getVideoFileLocation параметъра, предаден по-рано.
И на последният ред е цялата магария:
getVideoFileLocation.sendAndLoad("http://www.vbox7.com/play/magare.do", getVideoFileLocation, "POST")
С това плеъра изпраща като POST заявка vid параметъра и в отговор получава реалното положение на .flv файла.
РЕШЕНИЕТО:
След като знаем механизма на работа (който между другото се среща доста често), можем да направим програма или скрипт, които да ни дават линк за директно дърпане на .flv файла.
Един подобен скрипт би трябвало да прави следното:
Да претърсва сорс кода на страницата, зададена от потребителя.
Да извлича vid параметъра
Да изпраща POST заявка към http://www.vbox7.com/play/magare.do съдържаща vid параметъра
Да извлича адреса на flv fайла от отговора на тази си заявка и да го показва на потребителя.
Направил съм набързо един php скрипт, който върши точно това. Внимание, ако го ползвате, сложете проверка за потребителския вход (Използва се функцията file)
Общо взето най тънкият момент е използване на сокети (затова може и да не работи навсякъде този скрипт) за изпращане на POST заявка. Останалото е лесно.
vbox7.php