<?
/**
Genereller Ablauf:
1.) Normale Downloadseite öffnen
2.) Link zur Countdownseite aus Quelltext holen
3.) Countdown von 60 Sekunde verstreichen lassen
4.) Aus Countdownseite während Countdown läuft definitiven Downoadlink holen
5.) Nach Countdownablauf cURL auf definitiven Downloadlink ausführen
**/
// Var Deklaration
$dir = "/volume1/web/rs_downloader/";
$download_dir = "/volume1/web/rs_downloader/downloads/";
$txt_error = $dir."error.txt";
$txt_done = $dir."done.txt";
$txt_todo = $dir."todo.txt";
// Countdownzeit für Datei holen
function get_countdown_time($quelltext,$prefix,$suffix){
$countdown_time = substr($quelltext,strpos($quelltext,$prefix)+strlen($prefix),strpos($quelltext,$suffix)-strpos($quelltext,$prefix)-strlen($prefix));
return $countdown_time;
}
// Größe holen
function get_size($quelltext){
$size = substr($quelltext, strpos($quelltext, 'color:#8E908F')+17, (strpos($quelltext, ' KB</font></p>')- strpos($quelltext, 'color:#8E908F')-17));
return $size;
}
// Link zur Countdownseite
function dl_link_1($quelltext){
# $dl_link = substr($quelltext, strpos($quelltext, 'id="ff" action="')+16, (strpos($quelltext, '" method="post') - strpos($quelltext, 'id="ff" action="')-16));
$dl_link = substr($quelltext, strpos($quelltext, '<form action="')+14, (strpos($quelltext, '" method="post') - strpos($quelltext, '<form action="')-14));
return $dl_link;
}
// Downloadlink für Datei holen
function dl_link_2($quelltext){
$dl_link = substr($quelltext, strpos($quelltext, 'name="dlf" action="')+19, (strpos($quelltext, '" method="post') - strpos($quelltext, 'name="dlf" action="')-19));
return $dl_link;
}
function dl_file($quelltext){
# $dl_link = substr($quelltext, strpos($quelltext, 'id="ff" action="')+16, (strpos($quelltext, '" method="post') - strpos($quelltext, 'id="ff" action="')-16));
$dl_link = substr($quelltext, strpos($quelltext, '<form action="')+14, (strpos($quelltext, '" method="post') - strpos($quelltext, '<form action="')-14));
$file_arr = explode('/', $dl_link);
$file = array_pop($file_arr);
return $file;
}
function dl_verification($quelltext){
// DL-Limit erreicht. Wielange zu warten?
if(eregi('download limit',$quelltext)){
$dl_wait_time = substr($quelltext, strpos($quelltext, 'about ')+6, (strpos($quelltext, 'minutes') - strpos($quelltext, 'about ')-7));
echo 'Standby...<br>'.$dl_wait_time.' min. to wait! '.date(' - d.m.Y H:i:s');
echo $dl_wait_time;
return $dl_wait_time;
// Bereits ein DL am laufen.
}elseif(eregi('IP address',$quelltext)){
echo 'No parallel DLs';
return false;
// Datei nicht vorhanden
}elseif(eregi('check the download link',$quelltext)){
echo 'Link corrupt';
return false;
// Datei nicht vorhanden - durch RS gelöscht
}elseif(eregi('violation of our terms',$quelltext)){
echo 'File deleted by RS';
return false;
// Datei nicht vorhanden - durch RS gesperrt
}elseif(eregi('suspected to contain',$quelltext)){
echo 'File blocked by RS';
return false;
// Dl möglich.
}else{
return "true";
}
}
// Link in jeweiliger Datei speichern : ready.txt oder error.txt
function save_link($txt_file, $txt_link){
$handle = fopen($txt_file, 'a');
$txt_link .= chr(9);
$txt_link .= date(' - d.m.Y H:i:s');
fwrite($handle, $txt_link);
fwrite($handle, "\r\n");
fclose($handle);
}
// Obersten Eintrag aus der todo Datei einlesen
function get_link($txt_todo){
$handle = fopen($txt_todo, 'r');
$temp_link = fgets($handle, 1024);
fclose($handle);
return $temp_link;
}
// Nach erfolgreichem Download ersten Eintrag löschen
function delet_first_entry($txt_todo){
$array = file($txt_todo);
array_shift($array);
$fp = fopen($txt_todo,"w");
for ($i = 0; $i<count($array); $i++){
fputs($fp, $array[$i]);
}
fclose($fp);
}
// Aktuellen Link einlesen - DL Link nur löschen, wenn DL möglich.
$rs_adresse = trim(get_link($txt_todo));
//Prüfung ob es einen Link gibt, wenn nicht Abbruch
if ($rs_adresse != "") {
// Link zur Countdownseite und Dateinamen holen
echo 'Rapidshare-URL: <a href="'.$rs_adresse.'">'.$rs_adresse.'</a><br>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $rs_adresse);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.0.7) Gecko/2009011913 Firefox/3.0.6');
$page_link = curl_exec($ch);
curl_close($ch);
$link_countdown = dl_link_1($page_link);
$size = get_size($page_link);
$file = dl_file($page_link);
echo 'Größe ist: '.$size.'<br>';
echo 'Countdown-URL: '.$link_countdown.'<br>';
echo 'Filename: '.$file.'<br>';
// Wenn RS-Link ok ist:
if((dl_verification($page_link)) == true){
// Countdownseite öffnen und Dateilink holen
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $link_countdown);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'dl.start=Free');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6');
$page_countdown = curl_exec($ch);
curl_close($ch);
// Abfragen ob Download möglich ist
if(($dl_verify = dl_verification($page_countdown)) == "true"){
echo $dl_verify;
$def_dl_link = dl_link_2($page_countdown);
echo 'Download-URL: '.$def_dl_link.'<br>';
echo 'DL possible<br>';
echo 'Waiting for 60 seconds!<br>';
// Zwangspause
$countdown_prefix = "var c=";
$countdown_suffix = "; ";
$countdown_time = get_countdown_time($page_countdown,$countdown_prefix,$countdown_suffix);
// Random Offset zw. 2 und 120 Sekunden
srand((double)microtime()*1000000);
$offset = rand(2,120);
$i = $countdown_time+$offset;
echo "Waiting for $i seconds!<br>";
while($i >= 1){
echo $i.'-';
flush();
sleep(1);
$i--;
}
echo '<br>Def. DL-Link: '.$def_dl_link;
echo '<br>DL started.'.date(' - d.m.Y H:i:s')."<br><br>";
flush();
// nach Countdownablauf Dateidownload starten
$handle = fopen($download_dir.$file,'w');
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $def_dl_link);
curl_setopt($ch2, CURLOPT_TIMEOUT, 90000);
curl_setopt($ch2, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6');
curl_setopt($ch2, CURLOPT_FILE, $handle);
curl_setopt($ch2, CURLOPT_FOLLOWLOCATION, true);
curl_exec($ch2);
fclose($handle);
curl_close($ch2);
echo "<br>DL finished - ".date('d.m.Y H:i:s')."<br><br><br><br><br>";
// erfolgreichen Downloadlink in ready.txt speichern
save_link($txt_done, $rs_adresse);
delet_first_entry($txt_todo);
} else if ($dl_verify != false){
$wait_time = $dl_verify;
$i = $wait_time * 2;
while($i >= 1){
$min = $i / 2;
echo $min.'-';
flush();
sleep(30);
$i--;
}
}
} else {
// Aktuellen Link in error.txt speichern
save_link($txt_error, $rs_adresse);
delet_first_entry($txt_todo, $rs_adresse);
}
# system("php /volume1/web/rs_downloader/index.php >> /volume1/web/rs_downloader/err.html&");
system("php /volume1/web/rs_downloader/index.php&");
} else {
$load_it = "false";
echo date('d.m.Y H:i:s')." - kein Link zur Verfügung<br><br><br><br>";
}
?>