<?php
/*
MegaVideo Video Scraper
Premium Account Required
Written by Aziz S. Hussain
@
www.AzizSaleh.com
Produced under LGPL license
@
http://www.gnu.org/licenses/lgpl.html
Class Structure
class megaVideo
{
# MegaVideo link
private megaVideoURL
# Final link
private finalLink
void __construct(string videoURL) # Store video link
array getMegaVideoVars(string megaVideoURL) # Returns vars needed to create viewing key
string decrypt(string str, string key1, string key2)# Actually decrypts the vars into the key
void doScrape() # Does the scraping
string getLink() # Return the URL for download or streaming
}
*/
class megaVideo
{
# MegaVideo link
private $megaVideoURL;
# Final link
private $finalLink;
# Construct, just store the vide link
function __construct($videoURL)
{
$this->finalLink = $videoURL;
}
# This function will return the megaVideo vars
# Note that it uses CURL and the COOKIE megavideoCookie.txt
# Cookie text file must be in this format:
/*
# Netscape HTTP Cookie File
# http://www.netscape.com/newsref/std/cookie_spec.html
# This file was generated by libcurl! Edit at your own risk.
.megavideo.com TRUE / FALSE 1263332544 user 4BDHJJNEJOKDF4KJHKJFJIUGHUYG3.JKLHDU4
*/
# You need to change the user number 1263332544 and session 4BDHJJNEJOKDF4KJHKJFJIUGHUYG3.JKLHDU4
# You can get that information by viewing the cookie information (using firefox)
# URL passed must be in this format: http://www.megavideo.com/?v=6PTHEVUY
function getMegaVideoVars()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$this->finalLink);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'megavideoCookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'megavideoCookie.txt');
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
$buffer = curl_exec($ch);
curl_close($ch);
preg_match('/flashvars\.un = "(.*)";.*flashvars\.k1 = "(.*)";.*flashvars\.k2 = "(.*)";.*flashvars\.s = "(.*)";/Ums',
$buffer,$results);
# Return required vars
$finalResults = array($results[4],$results[1],$results[2],$results[3]);
return $finalResults;
}
# This function will decrypt the required keys form megavideo
function decrypt($str, $key1, $key2)
{
$reg1 = array();
for($reg3=0; $reg3<strlen($str); $reg3++)
{
$reg0 = $str[$reg3];
switch($reg0)
{
case '0': $reg1[] = '0000'; break;
case '1': $reg1[] = '0001'; break;
case '2': $reg1[] = '0010'; break;
case '3': $reg1[] = '0011'; break;
case '4': $reg1[] = '0100'; break;
case '5': $reg1[] = '0101'; break;
case '6': $reg1[] = '0110'; break;
case '7': $reg1[] = '0111'; break;
case '8': $reg1[] = '1000'; break;
case '9': $reg1[] = '1001'; break;
case 'a': $reg1[] = '1010'; break;
case 'b': $reg1[] = '1011'; break;
case 'c': $reg1[] = '1100'; break;
case 'd': $reg1[] = '1101'; break;
case 'e': $reg1[] = '1110'; break;
case 'f': $reg1[] = '1111'; break;
}
}
$reg1 = join($reg1);
$reg6 = array();
for($reg3=0; $reg3<384; $reg3++)
{
$key1 = ($key1 * 11 + 77213) % 81371;
$key2 = ($key2 * 17 + 92717) % 192811;
$reg6[] = ($key1 + $key2) % 128;
}
for($reg3=256; $reg3>=0; $reg3--)
{
$reg5 = $reg6[$reg3];
$reg4 = $reg3 % 128;
$reg8 = $reg1[$reg5];
$reg1[$reg5] = $reg1[$reg4];
$reg1[$reg4] = $reg8;
}
for($reg3=0; $reg3<128; $reg3++)
{
$reg1[$reg3] = $reg1[$reg3] ^ ($reg6[$reg3+256] & 1);
}
$reg12 = $reg1;
$reg7 = array();
for($reg3=0; $reg3<strlen($reg12); $reg3+=4)
{
$reg9 = substr($reg12, $reg3, 4);
$reg7[] = $reg9;
}
$reg2 = array();
for($reg3=0; $reg3<count($reg7); $reg3++)
{
$reg0 = $reg7[$reg3];
switch($reg0)
{
case '0000': $reg2[] = '0'; break;
case '0001': $reg2[] = '1'; break;
case '0010': $reg2[] = '2'; break;
case '0011': $reg2[] = '3'; break;
case '0100': $reg2[] = '4'; break;
case '0101': $reg2[] = '5'; break;
case '0110': $reg2[] = '6'; break;
case '0111': $reg2[] = '7'; break;
case '1000': $reg2[] = '8'; break;
case '1001': $reg2[] = '9'; break;
case '1010': $reg2[] = 'a'; break;
case '1011': $reg2[] = 'b'; break;
case '1100': $reg2[] = 'c'; break;
case '1101': $reg2[] = 'd'; break;
case '1110': $reg2[] = 'e'; break;
case '1111': $reg2[] = 'f'; break;
}
}
return join($reg2);
}
# Actually return the URL that the video can be viewed without time restrictions
function doScrape()
{
# Retrieve info
list($serverID,$un,$k1,$k2) = $this->getMegaVideoVars();
# Get the key
$decKey = $this->decrypt($un,$k1,$k2);
$this->finalLink = "http://www$serverID.megavideo.com/files/$decKey/randomName$un.flv";
}
# Return the link begotten after scraping
function getLink()
{
return $this->finalLink;
}
}
?>
|