Rapidshare-Downloadmanager für Free-User

Status
Für weitere Antworten geschlossen.

ralftopas

Benutzer
Mitglied seit
04. Feb 2009
Beiträge
84
Punkte für Reaktionen
0
Punkte
0
Salü alle zusammen,

habe seit einiger Zeit meine DS207+ und wollte nun auch mal etwas "basteln".

Da ich keinen Premiumaccount bei RS habe und mir das warten immer auf den Senkel geht, habe ihc mir folgendes überlegt:

ein Downloadmanager für Free-User.
Soll heißen: Eine PHP-Applikation die per Cronjob aufgerufen wird und sich regelmäßig aus einer Textdatei bzw. MySQL-DB die Links zieht und automatisiert runterläd.

Bevor ich das Ding nun bastel meine Frage:
Ist das legal, oder verstößt das gegen die AGB's von RS?
habe dort nur diesen Komentar gefunedn, aber keine eindeutige Beschreibung was nun genau verboten oder gemeint ist.

Personen, die Programme schreiben mit dem Ziel, gegen diese Nutzungsbedingungen zu verstossen, werden strafrechtlich verfolgt und für den entstandenen Schaden bzw. Verlust haftbar gemacht.
http://rapidshare.com/agb.html

euer Ralf
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344
Anyone writing a program with the aim to breach the conditions of use, will be prosecuted and made liable for any damage caused.

Sieht fuer mich so aus...

Bin allerdings kein Anwalt, also lhne Gewaehr :rolleyes:

MfG Matthieu
 

ralftopas

Benutzer
Mitglied seit
04. Feb 2009
Beiträge
84
Punkte für Reaktionen
0
Punkte
0
Ich hab dem Support mal ne eMail geschrieben.
Sicher ist sicher...

Aber für Test und Schulungszwecke kann ich das ja einmalig sicher ausprobieren... ;)
 

raily

Benutzer
Mitglied seit
09. Mrz 2009
Beiträge
73
Punkte für Reaktionen
0
Punkte
6
Rapidshare kann gar nicht mitbekommen, dass ein Programm die Anfragen stellt, da das in Augen von RS immer wie eine normalte GET Anweisung über HTP aussieht.

Zu deinem Thema: http://rsdm.kingofcomedy.de/

Das ist denke ich mal das was du pogrammieren willst. Ich habe den RSDM zur Zeit auf meiner DS209 in Betrieb und funktioniert ganz gut. Habe hier auch schon ein paar Modifikationen erstellt:
http://www.synology-forum.de/showthread.html?p=41999#post41999

Wenn du mehr Ahnung von PHP und perl hast, dann kannst du dir das ja mal anschauen und ggf. weiterentwickeln.
 

ralftopas

Benutzer
Mitglied seit
04. Feb 2009
Beiträge
84
Punkte für Reaktionen
0
Punkte
0
@ raily:

Jein ;)
Das ist ja für jemanden, der einen Premium-Account hat.
Ich will ja nichts zahlen ...

Daher habe ich vor ein Script zu schreiben, dass als Free-User das gleiche erfüllt wie der RSDM.
Mit dem Unterschied, dass der alle 15 min automatisiert eine Liste mit Files abarbeitet.
Diese Funktion bietet der RSDM nicht, oder?
Nicht das ihc mir hier die Mühe umsonst mache :eek:
 

raily

Benutzer
Mitglied seit
09. Mrz 2009
Beiträge
73
Punkte für Reaktionen
0
Punkte
6
Mit dem RSDM kann man als free user laden (so wie ich das auch mache) wenn man sich als user "free" einloggt.

Mit meiner Erweiterung aus dem anderen Thread muss man auch nicht 15 Minuten warten, da der Router angewiesen wird sich eine neue IP zu holen.

Wenn du willst kannst du dir das ja mal genauer anschauen und z.b. einen button für den reconnect und pausieren (meine Modifikationen) in php basteln. Denn ich habe kaum Ahnung von php.

Oder du programmierst eine neue, bessere Konkurrenz zum RSDM. Wäre sicher auch nicht schlecht :D
 

Supaman

Benutzer
Mitglied seit
26. Jan 2007
Beiträge
1.447
Punkte für Reaktionen
0
Punkte
62
die idee ist nicht neu, sowas gibts schon - allerdings nicht für die synology. das tierchen kann mit 50+ filehostern zusammenarbeiten, und hat eine außerordentlich mächtige script-engine um einen router-reconnect durchzuführen.

http://www.jdownloader.org

alternativ kann man auch router disconnects per CURL durchführen.
http://reconnect.thau-ex.de/

wenn in der datenbank das exakte router-modell nicht zu finden ist, einfach mal bei artverwandten modellen schauen, da geht immer was.

zur rechtlichen seite:
natürlich mögen es die firmen nicht, wenn jemand die zeitsperren umgeht und schreiben unter umständen drakonische strafen in ihre AGBs. strafrechtliche folgen wegen router-reconencts sind nicht zu befürchten, eine firma ist nicht der gesetzgeber.
(meine laienhafte einschätzung ohne gewähr)
 

raily

Benutzer
Mitglied seit
09. Mrz 2009
Beiträge
73
Punkte für Reaktionen
0
Punkte
6
Naja der Jdownloader hat aber ein GUI und kann somit auf der DS nicht genutzt werden. Oder sehe ich das falsch? Das wäre mir natürlich das liebste wenn man direkt den JDownloader verwenden könnte
 

ralftopas

Benutzer
Mitglied seit
04. Feb 2009
Beiträge
84
Punkte für Reaktionen
0
Punkte
0
Hi,

hab mir die ganzen schon bestehenden Lösungen mal angesehen.
Der RSDM ist shcon ganz cool, aber ich glaub ich werde dennoch mein eigenes Programm basteln.
Ich kann zwar kein Java, was das ganze nicht soo toll werden lassen wird, aber so rosten meine rudimentären PHP-Kenntnisse nicht ein ;-)

Zu den reconnects: ich hab ein Provider der leider eine fixe IP vergibt. somit bringen mir reconnects nichts. Des weiteren nervt es etwas wenn ICQ läuft oder man am PC surft und ständig reconnects hat. (Kann man höchstens nachts laufen lassen)

Kleines Rechenexempel: 2,66 gb/Tag bei Premium Accounts
~100mb/Datei -> alle 15 min eine Datei => 4*24*100mb = 9,6 gb/Tag
Immer noch das 3,5fache was man am Tag ohne reconnects rausholt OHNE zu zahlen.

Da ich nicht sonderlich scharf drauf bin winzip und andere Programme zu installieren damit RSDM läuft hab ich es anders gelöst.

Eine einzige PHP-Datei.
Diese per Crontab alle 16 min aufrufen.
Fertig.

Installation:
PHP-Datei in ein Verzeichnis packen und eine todo.txt Datei anlegen.
In diese Datei einfach alle Links speichern.
Je ein Link pro Zeile.

Features:
Läd alle Dateien in das Script-Verzeichnis
Fertige Downloads werden aus der todo.txt gelöscht.
Fertige Downloads werden in einer ready.txt gespeichert zur gegekontrolle.
Fehlerhafte Links oder Downloads werden in einer error.txt gespeichert.
Es wird überprüft ob parallele Downloads laufen.
Es wird geprüft ob die zu ladene Datei noch existiert.
Es wird die noch verbleibende Zeit bis zum nächst möglichen Download angezeigt.

Das Programm ist schnell runtergeschrieben weil cih sehen wollte ob es überhaupt so klappt wie ich mir das vorstelle.

Werdei n Zukunft noch eine MySQL Anbindung, eine configfile und eine GUI basteln.
Je nachdem wieviel Zeit ich neben dem Studium habe.

Wer an meinem Code basteln will: gerne zugreifen!

Und Entschuldigung für den schlechten Programmierstiel ;-)
bin total aus der Übung.
Werd demnächst mal eine Klasse dazu schreiben.

PHP:
<?
/**
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	
**/

// 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));
	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));
	$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!';
		return false;
	
	// 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;		
	
	// 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 einlsesen
function get_link(){
	$handle = fopen('todo.txt', 'r');
	$temp_link = fgets($handle, 1024);	
	fclose($handle);
	return $temp_link; 
}

// Nach erfolgreichem Download ersten Eintrag löschen
function delet_first_entry(){
	$array = file('todo.txt');
	array_shift($array); 
	$fp = fopen('todo.txt',"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());
echo 'Rapidshare-URL : <a href="'.$rs_adresse.'">'.$rs_adresse.'</a><br>';

// Link zur Countdownseite und Dateinamen holen
$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; de; 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);
$file = dl_file($page_link);
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; de; 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_verification($page_countdown) == true){
		$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
		$i = 1;
		echo $page;	
		while($i <= 60){
			echo $i.'-';
			flush();
			sleep(1);
			$i++;
		}
		echo '<br>Def. DL-Link : '.$def_dl_link;
		echo '<br>DL started.';
		flush();	
	
	
		// nach Countdownablauf Dateidownload starten
		$handle = fopen($file,'w');	
		$ch2 = curl_init();
		curl_setopt($ch2, CURLOPT_URL, $def_dl_link);
		curl_setopt($ch2, CURLOPT_TIMEOUT, 900);
		curl_setopt($ch2, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; de; 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.';
		
		// erfolgreichen Downloadlink in ready.txt speichern
		save_link('ready.txt', $rs_adresse);
		delet_first_entry();
	}
}else{
	// Aktuellen Link in error.txt speichern
	save_link('error.txt', $rs_adresse);
	delet_first_entry();
}
?>
 

Anhänge

  • todo.txt
    415 Bytes · Aufrufe: 65
  • rs.php.txt
    4,9 KB · Aufrufe: 57

raily

Benutzer
Mitglied seit
09. Mrz 2009
Beiträge
73
Punkte für Reaktionen
0
Punkte
6
Coole Sache, dass du jetzt ein eigenes Projekt machst. Sobald es ein GUI gibt, schau ich mir das auf jeden Fall an. Ich kann zwar kaum php, aber dafür unterstütze ich dich dann mit Verbesserungsvorschlägen *g*
 

soleluna

Benutzer
Mitglied seit
23. Okt 2008
Beiträge
71
Punkte für Reaktionen
0
Punkte
6
Mir gefaellt die Idee: einfach und gut.
Habe IPKG auf meine DS107 installiert. Danach zwei Aufrufe
Rich (BBCode):
IPKG install php
IPKG install php-curl

Jetzt ist das script direkt aufrufbar in der TELNET Shell:
Rich (BBCode):
php rs.php.txt

Die gewuenschte Datei aus ToDo.txt wird heruntergeladen.

Allerdings habe ich ein ungutes Gefuehl, das Script als Root laufen zu lassen.
Also habe ich in der crontab den Aufruf mit einem eingeschraenkten Benutzer laufen lassen, welcher nur RW-Rechte in im Verzeichnis public hat.

Der Eintrag in der Crontab mit dem eingeschraenkten Benutzer funktioniert allerdings nicht:

Rich (BBCode):
*/16    *       *       *       *       rs      php /volume1/public/rs.php.txt

CRON-Service wurde mit STOP und START aktualisiert.
Die Luecken sind TABs.

Was ist daran falsch?
Muss ich vielleicht den kompletten Pfad zu php angeben?
@ralftopas: wie sieht denn Dein crontab-Eintrag aus?
 

ralftopas

Benutzer
Mitglied seit
04. Feb 2009
Beiträge
84
Punkte für Reaktionen
0
Punkte
0
also,
ich lass das ganze als root laufen...
"wget -O - http://192.168.1.2/rs/rs.php"

benutze allerdings nciht das "einfache cronjob" sondern die alternative.
habe das per ipkg installiert.
leider hab ich noch nicht rausgefunden wie ich bei der version ein:
"alle 16 minuten" einstellen kann.
daher hab ich das fix eingestellt auf 20 minuten. (siehe screenshot)
mir ist aufgefallen, dass RS zum teil auch ein countdown von 65 sekunden voraussetzt.
daher sollte man die schleife im script evtl etwas erhöhen.

gruß ralf

PS: sind ncoh einige ideen, die ich verwirklichen will.
so steht zum bsp auf den seiten von rapidshare dei dateigröße.
diese will ich noch auslesen udn dann nach dem download mit der datei aufm server abgleichen.
sollten dabei differenzen auftauchen, wird ebenfalls eine benachrichtigung gespeichert.

bin jetzt aber erstmal im krankenhaus.
daher dauerts etwas, bis ich wieder zeit habe...
 

Anhänge

  • Aufzeichnen.JPG
    Aufzeichnen.JPG
    76,9 KB · Aufrufe: 601

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344

soleluna

Benutzer
Mitglied seit
23. Okt 2008
Beiträge
71
Punkte für Reaktionen
0
Punkte
6
Skript im Kontext root?

dann kann ich das nachtraeglich installierte php und php-curl wohl wieder deinstallieren: ich meine mich zu erinnern, dass auch JAHLIVES WGET statt PHP vorgeschlagen hat.

Allerdings bleibt mein Unbehagen wg. root: das Ausfuehren des Skriptes im Kontext root hat zur Folge, dass das Skript vollen Zugriff auf das gesamte System erhaelt. Scheint mir im Zusammenhang mit einer Internet-Aktion zu gefaehrlich.

Folgendes

Rich (BBCode):
su littlejo -c "wget -O http://192...."

mit littlejo == Benutzer der DS mit eingeschraenktem Dateizugriff, angelegt im Web-Frontend.

erzeugt folgenden Fehler:

Rich (BBCode):
su: cannot run /sbin/nologin: No such file or directory

Liegt wohl an meinen beschraenkten UNIX-Kenntnissen.
Ich versuch das Windows RUNAS zu uebertragen.
 

Matthieu

Benutzer
Mitglied seit
03. Nov 2008
Beiträge
13.222
Punkte für Reaktionen
88
Punkte
344

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Muss ich vielleicht den kompletten Pfad zu php angeben?

Ja man muss (!) immer in der crontab die kompletten Pfade angeben (wie sonst ja auch, wenn man nicht die PATH-Variable gesetzt hat). Da der crond, welcher ja die crontab abarbeitet, nicht von einem Terminal oder Pseudoterminal (telnetd/sshd) gestartet wird und dabei im Login-Prozess durch die /etc/profiles und die $HOME/.profiles gejagt wird, erhält er keine geeigneten Environment-Variablen und damit auch keine Inhalt in die PATH-Variable. Und ohne PATH-Variable wissen ja die Shells net, wo sie was suchen sollen ;)

Das ist übrigens auch bei Windows nicht viel anders ... auch dort werden ja die Umgebungsvariablen so gesetzt und auch dort gibt es eine PATH-Variable ...

Itari
 

soleluna

Benutzer
Mitglied seit
23. Okt 2008
Beiträge
71
Punkte für Reaktionen
0
Punkte
6
wget nicht nur als root, http not found

also,
ich lass das ganze als root laufen...
"wget -O - http://192.168.1.2/rs/rs.php"

geht bei mir nicht (Adresse und Verzeichnis sind angepasst)
Nach einem empfehlenswerten Crashkurs Linux sehe ich inzwischen zwei Moeglichkeiten fuer das Ausfuehren als Nicht-Root:

Rich (BBCode):
su <foo> -c 'wget www.web.de'
wget --http-user=foo --http-password=bar www.web.de

foo habe ich als Benutzer mit beschraenkten Verzeichnisrechten und in der /etc/passwd mit ash-Login angelgt.

Allerdings erhalte ich sowol als als root als auch als foo folgenden Fehler:
Rich (BBCode):
wget -O http://192.168.1.2/rs/rs.php
--2009-04-29 09:25:47--  http://192.168.1.2/rs/rs.php
Connecting to 192.168.1.2:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2009-04-29 09:25:47 ERROR 404: Not Found.

Muss ich noch Ports oder in der DS Dienste freischalten?
 

soleluna

Benutzer
Mitglied seit
23. Okt 2008
Beiträge
71
Punkte für Reaktionen
0
Punkte
6
geklaert: natuerlich muss die Webstation aktiviert sein!
 

nicknick

Benutzer
Mitglied seit
06. Mrz 2009
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
Countdown-Time

Hi, ne kleine Ergänzung, da der Countdown je nach Uhrzeit und Dateigröße variiert (bis zu 100 Sekunden!)

PHP:
// 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;
}

PHP:
          // Zwangspause
          $countdown_prefix = "var c=";
          $countdown_suffix = ";         ";  
          $countdown_time = get_countdown_time($page_countdown,$countdown_prefix,$countdown_suffix);
          
          $i = $countdown_time+2;
          echo "Waiting for $i seconds!<br>";
          while($i >= 1){
              echo $i.'-';
              flush();
              sleep(1);
              $i--;
          }
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat