Shellskript: RS-Downloader

    • Shellskript: RS-Downloader

      So, ich dachte ich poste mal ein kleines Skript von mir, bevor es endgültig verstaubt...

      Was macht es?
      Es lädt Dateien bei Rapidshare runter.
      Wenn ihr wissen wollt, was es genau macht schaut euch das Skript an, es ist alles dokumentiert!

      Brauche ich einen Account bei Rapidshare?
      Ja, es muss sogar RapidPro aktiv sein.

      Auf was für Systemen läuft das Skript?
      Debian/Ubuntu, müsste allerdings auch auf anderen Linux-Derivaten funktionieren.

      Hat das Skript eine grafische Oberfläche?
      Nö, wozu auch?

      Was gibt es zu beachten?
      Wenn es nicht anders angegeben wird, wird die Datei "prem_acc" für die Logindaten verwenden, Format:
      login=Benutzername
      password=Passwort

      Wenn nicht anders angegeben, wird die Datei "links.txt" als Linkliste verwendet.
      Wenn es nicht anders angegeben wurde, wird der Ordner "downloads" als Downloadordner verwendet, falls dieser nicht existiert, wird er angelegt.

      Wie verwende ich das Skript?
      Ich zitiere dazu einfach mal die Usage:
      Spoiler anzeigen

      Quellcode

      1. Usage: ./rs.sh -Option -Parameter Datei
      2. -h > Zeigt diese Hilfe an.
      3. --help > Zeigt diese Hilfe an.
      4. -s > httpS aktivieren.
      5. -l datei > Andere Linkliste verwenden.
      6. -d ordner > Anderen Downloadordner verwenden.
      7. -u benutzername > Gibt den Benutzernamen an, falls keine Datei mit Logindaten verwendet wird.
      8. -p passwort > Gibt das Passwort an, falls keine Datei mit Logindaten verwendet wird.
      9. -a datei > Andere Datei mit Logindaten verwenden.
      10. Ohne den Parameter -l wird die Standardliste links.txt verwendet.
      11. Ohne den Parameter -d werden Downloads in dem Ordner \"downloads\" gespeichert."
      Alles anzeigen
      Beispiele:
      Spoiler anzeigen

      ./rs.sh
      Das Skript wird aufgerufen, verwendet die Logindaten aus der Datei "prem_acc", lädt die Links aus der Datei "links.txt" und speichert sie in den Ordner "downloads".

      ./rs.sh -s -u name -p pass -d down
      Alle Links werden mit SSL heruntergeladen, es werden die eingegeben Logindaten verwenden und die Downloads werden im Ordner "down" gespeichert, falls nötig, wird der Ordner auch angelegt.

      ./rs.sh -l links -a logindaten
      Es wird die Datei "links" als Linkliste verwendet und die Datei "logindaten" für die Logindaten.


      Das Skript:
      Spoiler anzeigen

      PHP-Quellcode

      1. #Variablen:
      2. #p_ssl=s = httpS Aktiv
      3. #liste=linkliste = Andere Linkliste verwenden, ohne eine Angabe wird ./links.txt verwendet.
      4. #down_dir=down = Anderen Downloadordner verwenden, ohne eine Angabe wird der Ordner ./downloads verwendet.
      5. #name=Benutzer = Falls keine Datei mit dem Logindaten verwendet wird, wird hiermit der Benutzername angegeben.
      6. #passwort= Passwort = Falls keine Datei mit dem Logindaten verwendet wird, wird hiermit das Passwort angegeben.
      7. #passdat=login = Andere Datei mit Logindaten verwendet werden, ohne eine Angabe, wird die Datei pemm_acc verwendet.
      8. #api_acc = String mit Accountinformationen.
      9. #acc = Enthält das Gültigkeitsdatum für Rapidpro.
      10. #cookie = Enthält einen Cookie für Rapidshare.
      11. # Diese Variablen ändern sich mit jedem Link.
      12. #ssl=s = Falls der Parameter -s nicht gesetzt wurde, es sich aber um einen httpS-Link handelt, wird die Variable gesetzt.
      13. #file_id = Die Variable enthält die File-ID des Downloads.
      14. #file_name = Die Variable enthält den File-Namen des Downloads.
      15. #api_server = Die Variable enthält Informationen zur Datei.
      16. #status = Die Variable enthält den Status der Datei.
      17. #serv = Die Variable enthält den Downloadserver für die Datei.
      18. #md5 = Die Variable enthält den MD5-Hash der Datei.
      19. # help funktion
      20. h_help(){
      21. echo "Usage: ./rs.sh -Option -Parameter Datei
      22. -h > Zeigt diese Hilfe an.
      23. --help > Zeigt diese Hilfe an.
      24. -s > httpS aktivieren.
      25. -l datei > Andere Linkliste verwenden.
      26. -d ordner > Anderen Downloadordner verwenden.
      27. -u benutzername > Gibt den Benutzernamen an, falls keine Datei mit Logindaten verwendet wird.
      28. -p passwort > Gibt das Passwort an, falls keine Datei mit Logindaten verwendet wird.
      29. -a datei > Andere Datei mit Logindaten verwenden.
      30. Ohne den Parameter -l wird die Standardliste links.txt verwendet.
      31. Ohne den Parameter -d werden Downloads in dem Ordner \"downloads\" gespeichert.";}
      32. # Anzeigen der Hilfe, falls der Parameter "--help" verwendet wurde.
      33. if [ "$1" = --help ];then
      34. h_help
      35. exit 0
      36. fi
      37. # Einlesen der Parameter und Optionen.
      38. while getopts "d:l:u:p:a:hs" optionName; do
      39. case "$optionName" in
      40. h) h_help;
      41. exit 0;;
      42. s) p_ssl="s";;
      43. l) liste=$OPTARG;;
      44. d) down_dir=$OPTARG;;
      45. u) name=login=$OPTARG;;
      46. p) passwort=password=$OPTARG;;
      47. a) passdat=$OPTARG;;
      48. *) echo "Ungültiger Parameter: $OPTARG"
      49. echo "Verwenden sie den Parameter -h oder --help, um die Hilfe anzuzeigen."
      50. exit 1;;
      51. esac
      52. done
      53. # Falls keine Linkliste übergeben wird, wird die Standardliste verwendet.
      54. if [ -z "$liste" ];then
      55. liste="links.txt"
      56. fi
      57. # Überprüfen, ob die Linkliste vorhanden ist.
      58. if [ ! -f "$liste" ];then
      59. echo "Es ist keine Linkliste vorhanden."
      60. exit 1
      61. fi
      62. # Falls keine Leseberechtigung für die Linkliste besteht, wird das Skript abgebrochen.
      63. if [ ! -r "$liste" ];then
      64. echo "Es besteht keine Leseberechtigung für die Linkliste."
      65. exit 1
      66. fi
      67. # Falls kein Downloadordner angegeben wurde, wird der Standardordner verwendet.
      68. if [ -z "$down_dir" ];then
      69. down_dir="downloads"
      70. fi
      71. # Wenn der Downloadordner eine Datei ist, erfolgt ein Abbruch.
      72. if [ -f "$down_dir" ]; then
      73. echo "Es existiert bereits eine Datei, die den gleichen Namen besitzt wie der Downloadordner: $down_dir"
      74. exit 1
      75. fi
      76. # Downloadordner erstellen. Falls dieser bereits besteht, gibt es keinen Fehler.
      77. mkdir --parents $down_dir
      78. # Falls keine Schreibberechtigung für den Downloadordner existiert, wird das Skript abgebrochen.
      79. if [ ! -w "$down_dir" ];then
      80. echo "Für den Downloadordner ist keine Schreibberechtigung vorhanden: $down_dir"
      81. exit 1
      82. fi
      83. # Falls keine Logindaten übergeben wurden, wird eine Datei mit Logindaten verwendet.
      84. if [ -z "$name" -o -z "$passwort" ];then
      85. # Falls keine Datei mit Logindaten übergeben wird, wird die Standarddatei verwendet.
      86. if [ -z "$passdat" ];then
      87. passdat="prem_acc"
      88. fi
      89. # Falls keine Datei mit Logindaten existiert, wird das Skript abgebrochen.
      90. if [ ! -f "$passdat" ];then
      91. echo "Es ist keine Datei mit Logindaten vorhanden."
      92. exit 1
      93. fi
      94. # Falls keine Leseberechtigung für die Datei mit den Logindaten besteht, wird das Skript abgebrochen.
      95. if [ ! -r "$passdat" ];then
      96. echo "Es existiert keine Leseberechtigung für die Datei mit den Logindaten."
      97. exit 1
      98. fi
      99. # Einlesen des Benutzernamens.
      100. name=$(cat $passdat|grep login)
      101. # Einlesen des Passwortes.
      102. passwort=$(cat $passdat|grep password)
      103. fi
      104. ##################
      105. ### Funktionen ###
      106. ##################
      107. # Funktion zum auslesen der Linkart
      108. linkart_auslesen(){
      109. # Erste Linkart auslesen: http://rapidshare.com/files/File-ID/Filename
      110. if [[ $1 = http*://rapidshare.com/files/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/* ]]; then
      111. file_id=$(echo $i|awk -F/ {'print $5'})
      112. file_name=$(echo $i|awk -F/ {'print $6'})
      113. else
      114. # Zweite Linkart auslesen: http://rapidshare.com/files/File-ID|Filename
      115. if [[ $1 = http*://rapidshare.com/files/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'|'* ]]; then
      116. file_id=$(echo $i|awk -F/ {'print $5'}|awk -F'|' {'print $1'})
      117. file_name=$(echo $i|awk -F/ {'print $5'}|awk -F'|' {'print $2'})
      118. else
      119. # Dritte Linkart auslesen: http://rapidshare.com/#!download|Downloaderserver|File-ID|Filenamen|Dateigröße (Die Dateigrößte ist optional)
      120. if [[ $1 = http*://rapidshare.com/'#!'download'|'*'|'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'|'* ]]; then
      121. file_id=$(echo $i|awk -F'|' {'print $3'})
      122. file_name=$(echo $i|awk -F'|' {'print $4'})
      123. else
      124. echo "Der Rapidsharelink ist unbekannt oder falsch: >$i"
      125. continue
      126. fi
      127. fi
      128. fi;}
      129. # Funktion, um zu überprüfen, welchen Status die Datei besitzt.
      130. status_ueberpruefen(){
      131. # Überprüfen der Status-ID. Falls die Datei nicht heruntergeladen werden kann, wird mit dem nächsten Link weitergemacht.
      132. case "$1" in
      133. 0) echo "Die Datei wurde nicht gefunden. >$i"; continue;;
      134. 1) ;; # Die Datei ist in Ordnung.
      135. 3) echo "Der Server ist nicht verfügbar. >$i"; continue;;
      136. 4) echo "Die Datei wurde als illegal gemeldet. >$i"; continue;;
      137. 5) echo "Die Datei ist gesperrt, da sie anonym hochgeladen und bereits 10x heruntergeladen wurde. >$i"; continue;;
      138. 52) echo "Es wird ein SecureLink benoetigt. >$i"; continue;; #btw. steht nicht in der API-Doku...
      139. *) echo "Die Status-ID ist unbekannt. Die Datei wird übersprungen. >$i"; continue;;
      140. esac;}
      141. #######################
      142. ### Funktionen Ende ###
      143. #######################
      144. # Herunterladen der Accountinformationen.
      145. api_acc=$(curl -s 'http'$ssl'://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=getaccountdetails&'$name'&'$passwort'&withcookie=1')
      146. # Überprüfen der Logindaten.
      147. if [[ "$api_acc" = "ERROR: Login failed. Password incorrect or account not found. "* ]]; then
      148. echo "Die Logindaten sind nicht korrekt."
      149. exit 1
      150. fi
      151. # Auslesen des Gültigkeitsdatums für RapidPro (hierbei handelt es sich um einen Timestamp).
      152. acc=$(echo $api_acc|awk '{print $12}'|awk -F= '{print $2}')
      153. # Auslesen des Cookies.
      154. cookie=$(echo $api_acc|awk '{print $14}'|awk -F= '{print $2}')
      155. # Überprüfen ob RapidPro aktiv ist. Falls nicht, wird das Skript abgebrochen.
      156. if [ $(date +%s) -gt "$acc" ]; then
      157. echo "RapidPro ist nicht aktiv."
      158. exit 1
      159. fi
      160. # Schleife für jeden Link in der Linkliste.
      161. for i in $( cat $liste); do
      162. # httpS wird zurückgesetzt.
      163. ssl=
      164. # Wenn der Parameter "-s" gesetzt wurde, wird httpS aktiviert.
      165. if [ "$p_ssl" = "s" ]; then
      166. ssl=s
      167. fi
      168. # Bei einem httpS Link, wird httpS aktiviert.
      169. if [[ $i = https* ]];then
      170. ssl=s
      171. fi
      172. # Es wird die Funktion zur bestimmung der Linkart aufgerufen.
      173. linkart_auslesen $i
      174. # Die Dateiinformationen werden heruntergeladen.
      175. api_serv=$(curl -s 'http'$ssl'://api.rapidshare.com/cgi-bin/rsapi.cgi?sub=checkfiles&files='$file_id'&filenames='$file_name'&incmd5=1')
      176. # Die Status-ID wird ausgelesen.
      177. status=$(echo $api_serv|awk -F, {'print $5'})
      178. # Es wird die Funktion zum bestimmen der Status-ID aufgerufen.
      179. status_ueberpruefen $status
      180. # Der Downloadserver wird ausgelesen.
      181. serv=rs$(echo $api_serv|awk -F, {'print $4'})$(echo $api_serv|awk -F, {'print $6'}).rapidshare.com
      182. # Die MD5-Hashsumme wird auslesen.
      183. md5=$(echo $api_serv|awk -F, {'print $7'})
      184. # Die Datei wird heruntergeladen.
      185. wget -q 'http'$ssl'://'$serv'/cgi-bin/rsapi.cgi?sub=download&cookie='$cookie'&fileid='$file_id'&filename='$file_name'' -O $down_dir/$file_name
      186. # Es wird überprüft, ob die Datei fehlerfrei heruntergeladen wurde.
      187. if [ $(md5sum $down_dir/$file_name|awk {'print $1'}|awk {'print toupper($0)'}) = $md5 ]; then
      188. echo "Fertig: $down_dir/$file_name"
      189. else
      190. echo "WARNUNG die Datei ist fehlerhaft: >$down_dir/$file_name"
      191. fi
      192. done
      Alles anzeigen
    • Original von Kushi
      Mit AutoIT geschrieben?


      Das ist ein Shell-Script, die werden einfach mit dem Editor geschrieben
      und können nur unter Linux Distributionen verwendet werden

      Ist zwar ein nettes Skript, wenn man auf jegliche Programme verzichten will
      aber trotzdem ein wenig überflüssig in Zeiten von mächtigen Programmen wie JDownloader o.ä.

      Für Hobby-Skripter sind die Kommentare aber sicher was wert, falls sich jmd etwas vergleichbares schreiben möchte

      mfg
      Scorch
      Das Leben ist nicht zu Ende, nur weil ein Traum nicht in Erfüllung geht.
      Es hat nur einen Weg versperrt, damit man einen anderen sucht.
    • @Scorch
      Theoretisch müsste es eigentlich auch mit Cygwin funktionieren.
      Naja, für den JDownloader brauchst du Java und eine grafische Oberfläche.
      Zu den Kommentaren... die hab ich extra noch mal überarbeitet, bevor ich es hier rein gestellt habe.

      @Disasterpiece
      Soweit wie ich es jetzt gesehen habe, nichts?
      Das war aber auch gar nicht mein Ziel.
      Der Grund, warum ich es ursprünglich mal geschrieben habe, war der Spaß an der Freude.
      Es gab irgendwo mal die News, das Rapidshare seine API veröffentlicht hat und ich dachte mir "ich könnte mal ein Skript schreiben, das die API verwendet".

      btw. Danke
      bis gerade eben kannte ich Plowshare nicht.