PHP Classes
elePHPant
Icontem

File: megavideo.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Aziz S. Hussain  >  Megavideo Premium Link Generator  >  megavideo.class.php  >  Download  
File: megavideo.class.php
Role: Class source
Content type: text/plain
Description: Main Class
Class: Megavideo Premium Link Generator
Retrieve URLs of video streams of Megavideo.com
Author: By
Last change:
Date: 4 years ago
Size: 5,210 bytes
 

Contents

Class file image Download
<?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;
    }

}


?>