автозакачка с рапиды
Создано: 30-04-2009 14:41:46 изменено: 26-06-2009 07:56:46  Метки: bash

#!/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

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 "Or try again in about.*minutes" | egrep -o "[0-9]*")
if [ "$longtime" != "" ]; then
timer `expr '(' $longtime + 1 ')' '*' 60` "Подождём." "(лимит для бесплатного пользователя) ..."
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 -c $ourfile; then
echo 'Загрузка не удалась. Похоже на проблемы со стороны сервера.'
else
sed -i '1 d' $in; #удаляем линию из input файла
fi
done

if [ -e fail.txt ]; then
mv fail.txt $in # пишем неудавшиеся загрузки обратно в инпут файл.
fi
1179 просмотров комментировать