Вторая жизнь Рапиды

King аватар

Все знают, какие неудобства приходится испытывать при скачивании группы файлов с Рапидшары.com - ждать начала закачки, пока рапидовские часики оттикают свои мгновения, любоваться на никому не нужную рекламу и предложения, и самое досадное - долго ждать, когда скачается очередной файл, потом выждать огромный тайм-аут (десятки минут), пока Рапида снова позволит задать параметры скачивания для последующего файла.
Виндузятники давно используют свои примочки для обхода этого ограничения, но многие из них работают ненадежно, а в некоторых и вовсе заботливо подсажен свежий троянчик
Теперь сравните, как просто и элегантно этот вопрос решен в линуксе для wget :

Данный скрипт позволяет автоматизировать процесс скачивания нескольких ссылок, задав их все сразу в одном диалоге. Поэтому нет нужды ждать, пока скачается первый файл, чтобы задать параметры скачивания для второго - по сути, этот скрипт работает как робот, заменяя человека и экономя его драгоценное время.

Скрипт использовать очень просто:

1. Придаем ему атрибуты 700
2. Создаем файл под названием input.txt (атрибуты 644), в котором построчно перечисляем http-ссылки скачиваемых файлов, и помещаем его в один каталог с нашим скриптом.
3. Запускаем скрипт на выполнение.

В процессе работы скрипт будет демонстрировать время ожидания разрешения Рапиды на скачивания, затем работу wget'а.
Если с какими-то закачками возникнут проблемы, они будут перечислены в файле fail.txt.

  1. #!/bin/bash
  2.  
  3. Скрипт рекомендуется запускать под утилитой screen
  4.  
  5. ################################################
  6. #Purpose: Automate the downloading of files from rapidshare using the free account
  7. #using simple unix tools.
  8. #Date: 14-7-2008
  9. #Authors: Slith, Tune, Itay
  10. #Improvements, Feedback, comments: Please go to emkay.unpointless.com/Blog/?p=63
  11. #Notes: To use curl instead of wget use 'curl -s' and 'curl -s -d'
  12. #Version: 1.?
  13. ################################################
  14.  
  15. #ВАЖНО! - ДЕЛИТЕСЬ УСОВЕРШЕНСТВОВАНИЯМИ СКРИПТА С ОБЩЕСТВЕННОСТЬЮ
  16.  
  17. #Спасибо Tune за изчленения curl-зависимости в скрипте, вытаскивания точного времяни
  18. #ожидания и скачивания разных файлов, не только .rar
  19.  
  20. #TODO: организовать работу с проксями
  21. #TODO: восстанавливать докачку с зеркал, если первый сервер перестал отвечать
  22.  
  23. ###
  24. echo "test"
  25. in=input.txt
  26.  
  27. timer()
  28. {
  29. TIME=${1:-960}
  30. /bin/echo -ne "${2:-""}\033[s"
  31. for i in `seq $TIME -1 1`; do
  32. /bin/echo -ne "\033[u $(printf "%02d" `expr $i / 60`)m$(printf "%02d" `expr $i % 60`)s ${3:-""}"
  33. sleep 1
  34. done
  35. /bin/echo -ne "\033[u 00m00s"
  36. echo
  37. }
  38.  
  39. while [ `wc -l $in | cut -d " " -f 1` != 0 ]; do
  40. read line < $in
  41. URL=$(wget -q -O - $line | grep "<form id=\"ff\" action=\"" | grep -o 'http://[^"]*');
  42. output=$(wget -q -O - --post-data "dl.start=Free" "$URL");
  43.  
  44. # проверка занят ли сервер
  45. serverbusy=$(echo "$output" | egrep "Currently a lot of users are downloading files. Please try again in.*minutes" | grep -o "[0-9]*")
  46. if [ "$serverbusy" != "" ]; then
  47. timer `expr $serverbusy '*' 60` "Сервер занят. Ожидаем." "перед переподключением..."
  48. continue; # try again
  49. fi
  50.  
  51. # проверка как долго мы должны ждать между загрузками (долгое время)
  52. longtime=$(echo "$output" | egrep "Or try again in about.*minutes" | egrep -o "[0-9]*")
  53. if [ "$longtime" != "" ]; then
  54. timer `expr '(' $longtime + 1 ')' '*' 60` "Подождём." "(лимит для бесплатного пользователя) ..."
  55. URL=$(wget -q -O - $line | grep "<form id=\"ff\" action=\"" | grep -o 'http://[^"]*');
  56. output=$(wget -q -O - --post-data "dl.start=Free" "$URL");
  57. fi
  58.  
  59. # как долго ждать перед началом загрузки (короткое время, меньше минуты)
  60. time=$(echo "$output" | grep "var c=[0-9]*;" | grep -o "[0-9]\{1,3\}");
  61.  
  62. time=$(echo "$time" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//') # trim ws
  63. if [ "$time" = "" ]; then
  64. echo "Загрузка \"`basename "$line"`\" не удалась".
  65. echo $line >> fail.txt
  66. sed -i '1 d' $in; #удаляем линию из input файла
  67. continue
  68. fi
  69. ourfile=$(echo "$output" | grep "document.dlf.action=" | grep checked | grep -o "http://[^\\]*");
  70. timer $time "Ожидание" "загрузки файла `basename "$ourfile"`";
  71. if ! wget -c $ourfile; then
  72. echo 'Загрузка не удалась. Похоже на проблемы со стороны сервера.'
  73. else
  74. sed -i '1 d' $in; #удаляем линию из input файла
  75. fi
  76. done
  77.  
  78. if [ -e fail.txt ]; then
  79. mv fail.txt $in # пишем неудавшиеся загрузки обратно в инпут файл.
  80. fi

Скрипт был обнаружен на хабре.

Ваша оценка: Ничего Средняя оценка: 10 (3 votes)
RSS-материал