Есть прыщескрипт.
Список ссылок сохраняешь в файл input.txt
Обходить ограничение скорости и паузы между загрузками не умеет, но умеет делать все требуемые действия автоматически.
Идеально для домашнего сервера, стоящего в тёмном чулане - запускаешь по ssh скрипт с вечера, утром всё уже скачено.
--------------------------------------------------------
#!/bin/bash
################################################
#Purpose: Automate the downloading of files from rapidshare using the free account
#using simple unix tools.
#Date: 14-7-2008
#Authors: Slith, Tune, Itay
#Improvements, Feedback, comments: Please go to emkay.unpointless.com/Blog/?p=63
#Notes: To use curl instead of wget use 'curl -s' and 'curl -s -d'
#Version: 1.?
################################################
#ВАЖНО! - ДЕЛИТЕСЬ УСОВЕРШЕНСТВОВАНИЯМИ СКРИПТА С ОБЩЕСТВЕННОСТЬЮ
#Спасибо Tune за изчленения curl-зависимости в скрипте, вытаскивания точного времяни
#ожидания и скачивания разных файлов, не только .rar
#TODO: организовать работу с проксями
#TODO: восстанавливать докачку с зеркал, если первый сервер перестал отвечать
###
echo "test"
in=input.txt
if [ -e fail.txt ]; then
cat fail.txt >> $in; # пишем неудавшиеся загрузки обратно в инпут файл.
rm fail.txt;
fi
timer()
{
TIME=${1:-960}
/bin/echo -ne "${2:-""}\033[s"
for i in seq $TIME -1 1
; do
/bin/echo -ne "\033[u $(printf "%02d" expr $i / 60
)m$(printf "%02d" expr $i % 60
)s ${3:-""}"
sleep 1
done
/bin/echo -ne "\033[u 00m00s"
echo
}
while [ wc -l $in | cut -d " " -f 1
!= 0 ]; do
read line < $in
URL=$(wget -q -O - $line | grep "<form id=\"ff\" action=\"" | grep -o 'http://[^"]*');
output=$(wget -q -O - --post-data "dl.start=Free" "$URL");
# проверка занят ли сервер
serverbusy=$(echo "$output" | egrep "Currently a lot of users are downloading files. Please try again in.minutes" | grep -o "[0-9]")
if [ "$serverbusy" != "" ]; then
timer expr $serverbusy '*' 60
"Сервер занят. Ожидаем." "перед переподключением..."
continue; # try again
fi
# проверка как долго мы должны ждать между загрузками (долгое время)
longtime=$(echo "$output" | egrep -o "Or try again in about .* minutes" | grep -o "[0-9]\{1,3\}")
if [ "$longtime" != "" ]; then
timer expr '(' $longtime - 4 ')' '*' 60
"Подождём." "(лимит для бесплатного пользователя) ..."
while [ wget -q -O - --post-data "dl.start=Free" "$URL"|grep "Or try again in about" -c
!= 0 ]; do echo 'Ждём'; done;
URL=$(wget -q -O - $line | grep "<form id=\"ff\" action=\"" | grep -o 'http://[^"]*');
output=$(wget -q -O - --post-data "dl.start=Free" "$URL");
fi
# как долго ждать перед началом загрузки (короткое время, меньше минуты)
time=$(echo "$output" | grep "var c=[0-9]*;" | grep -o "[0-9]\{1,3\}");
time=$(echo "$time" | sed -e 's/^[[:space:]]//' -e 's/[[:space:]]$//') # trim ws
if [ "$time" = "" ]; then
echo "Загрузка \"basename "$line"
\" не удалась".
echo $line >> fail.txt
sed -i '1 d' $in; #удаляем линию из input файла
continue
fi
ourfile=$(echo "$output" | grep "document.dlf.action=" | grep checked | grep -o "http://[^\\]*");
timer $time "Ожидание" "загрузки файла basename "$ourfile"
";
if ! wget $ourfile; then
echo 'Загрузка не удалась. Похоже на проблемы со стороны сервера.'
else
sed -i '1 d' $in; #удаляем линию из input файла
fi
done