Скрипт автоскачивания с Rapidshare | Блог начинающего линуксоида

Скрипт автоскачивания с Rapidshare

Идея написать данную статью вызвана очень резкой необходимостью скачать n-ное количество файлов с всемирноизвестного файлового хранилища Rapidshare. А теперь поподробнее. С недавних пор решил всерьез заняться изучением английского языка. После консультаций у специалистов решил прослушать курс A.J.Hoge. На сайте автора уроки оказались платными. А мы, естественно, сторонники халявы =). После некоторого времени, потраченного на поиск всего курса, наткнулся на сайт, где пользователь выложил весь материал на Rapidshare. Ура, радости было много, но недолго…. Объем оказался размером 4.4 Гб, разбитым на архивы размером по 200Мб!!! Вручную ставить каждый файл по посинения особо не хочется =)) Имеем рабочий ПК с установленной системой Ubuntu 10.04. Создадим небольшой скрипт:

  1. mkdir ~/rapidshare
  2. cd rapidshare/
  3. touch rapidshare.sh
  4. содержимое скрипта:

#!/bin/bash

################################################

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]{1,0}”)

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

  1. touch input.txt
  2. touch fail.txt
  3. вставляем ссылки в файл input.txt
  4. запускаем скрипт bash rapidshare.sh – он нам сам сообщит, что он делает. Если файл не удалось записать — он отправляется в файл fail.txt. При проходе всего input.txt файл fail.txt переписывается обратно в input.txt, а скаченные линки удаляются.
  5. наблюдаем процесс как на изображении.

Существует баг: если ссылка кидается в файл, без перехода на новую строку — скрипт не хочет считывать такую строку. Выход: добавлять пустую строку в конец файла.

Удачного вам скачивания своих бекапов.

Источник detected

Оставьте комментарий