Auf Wunsch von XP-Freak, da dieser nichts funktionierendes mehr gefunden hat, hab ich ein Shellscript geschrieben, das Dateien als Freeuser von Rapidshare mit wget herunterlädt.
Das Script liest URLs von stdin ein (pro Zeile eine URL) und lädt die Datei schlussendlich mit wget runter. Geht nur mir rapidshare.com.
Es liest die Wartezeit aus und wartet dementsrepchend, wartet ebenfalls zwei Minuten wenn keine Slots mehr verfügbar sind und erkennt, ob das erreichte Download-Limit, wo es entweder wartet, oder sich eine neue IP holt.
Verwendung:
Alternativ könnt ihr die Links auch von Hand reinkopieren und mit Enter bestätigen (zum Beenden CTRL+C oder CTRL+D drücken).
Wer ein Script hat, was sich eine neue externe IP holt, kann es in der Variablen NEW_IP_CMD eintragen, es wird dann verwendet, wenn das Download-Limit erreicht wird. Ansonsten wird einfach 15min (bzw die Restzeit) gewartet.
Das Script benötigt bash, sed und grep, sowie wget (nur mit der GNU-Variante der genannten Programme getestet), sollte auf den meisten Systemen laufen.
Das Script ist Public Domain, macht damit was ihr wollt!
Direktdownload: rapidshare.sh (2,32 KB)
Quellcode anzeigen:
Spoiler anzeigen
#!/bin/bash
# Falls vorhanden: Befehl oder Script zum holen einer neuen externen IP
NEW_IP_CMD=
while read url; do
url=$(echo ${url} | tr -d "[:space:]")
if [ "${url:0:28}" = "http://rapidshare.com/files/" ] ; then
filename=$(basename "${url}")
url_tmp=$(wget -q -O - "${url}" | grep 'id="ff"' | sed -n -e 's/.*action="\(.*\)" method.*/\1/p')
if [ -z "${url_tmp}" ] ; then
echo "Fehler: Konnte Downloadlink nicht extrahieren: ${url}"
continue
elif [ -e "${filename}" ] ; then
echo -n "Warnung: ${filename} existiert bereits - "
filename=$(mktemp -u "${filename}.XXXX")
echo "speichere als ${filename}"
fi
url_out=$(mktemp /tmp/rapid_XXXXX)
trap "rm ${url_out} 2>/dev/null; echo; echo Beendet.; exit 1" SIGINT SIGTERM SIGKILL
while true ; do
wget -q --post-data="dl.start=Free" -O "${url_out}" "${url_tmp}"
wait=$(sed -n -e 's/^var c=\([0-9]*\);.*/\1/p' "${url_out}")
url_d=$(grep 'name="dlf"' "${url_out}" | sed -n -e 's/.*action="\(.*\)" method.*/\1/p')
if [ -n "${wait}" ] && [ -n "${url_d}" ] ; then
echo "Bereit. Warte ${wait} Sekunden..."
sleep "${wait}"
break
elif grep -q '2 minutes' "${url_out}" ; then
echo "Keine freien Slots. Warte 2 Minuten..."
sleep 2m
continue
elif grep -q 'download limit' "${url_out}" ; then
if [ -z ${NEW_IP_CMD} ] ; then
wait=$(sed -n -e 's/.*in about \([0-9]*\) minutes.*/\1/p' "${url_out}")
echo "Downloadlimit erreicht. Warte ${wait} Minuten..."
sleep "${wait}m"
else
${NEW_IP_CMD}
fi
continue
else
echo "Fehler: Kein Download aus unbekannten Gründen möglich: ${url}"
continue 2
rm "${url_out}"
fi
done
rm "${url_out}"
if ! wget -O "${filename}" "${url_d}" ; then
echo "Fehler beim Herunterladen der Datei ${url}!"
fi
else
echo "Warnung: Keine gültige rapidshare.com URL: ${url}"
fi
done
Alles anzeigen