SHARE
TWEET

get.bat

a guest Jun 30th, 2013 729 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. @echo off
  2. rem
  3. rem 13.05.2013  Tucker56  http://habrahabr.ru/post/180173/
  4. rem
  5. rem Загрузка новых серий/файлов из torrent-раздач
  6. rem
  7. rem Шаги:
  8. rem - создание списка отслеживаемых раздач - файл get.txt (описание ниже)
  9. rem - создание пустого файла журнала загрузок log.txt
  10. rem - создание ярлыка (Новые серии.lnk) на журнал загрузок log.txt
  11. rem - указание внутренних параметров (ниже в этом файле)
  12. rem - создание периодической задачи запуска этого файла в планировщике задач
  13. rem
  14. rem Результат (при появлении новых файлов в отслеживаемых раздачах):
  15. rem - файлы скачиваются в заданную папку (%video_dir%)
  16. rem - в панели Ссылки появляется ярлык на журнал загрузок
  17. rem
  18. rem Особенности:
  19. rem - если в окне выполнения программы вместо кириллицы отображается ЄЁаЁ««Ёж , нужно в свойствах окна выставить шрифт Lucida
  20.  
  21.  
  22. @SetLocal EnableDelayedExpansion
  23. rem Сохранение исходной кодировки сеанса CMD, для дальнейшей работы программы в cp1251, что нужно для возможности править этот файл в Блокноте
  24. for /f "tokens=2 delims=:" %%a in ('chcp') do set /a chcp_cmd=%%a
  25.  
  26. rem Для восприятия кириллицы в параметрах и отображения кириллицы текстов сообщений в консоли
  27. chcp 1251 >nul
  28.  
  29.  
  30.  
  31. rem Сохранение исходной кодировки, для локальных изменений (chcp)
  32. for /f "tokens=2 delims=:" %%a in ('chcp') do set /a chcp=%%a
  33.  
  34. rem --------------------------------------------------------------
  35. rem - ВНУТРЕННИЕ ПАРАМЕТРЫ ---------------------------------------
  36. rem workdir=_workdir - рабочая папка, для сохранения временных файлов и загруженных torrent-файлов
  37. rem rutracker_login=login - Логин на трекере http://rutracker.org
  38. rem rutracker_password=password - Пароль на трекере http://rutracker.org
  39. rem video_dir=d:\video - Папка куда сохранять загружаемые файлы раздачи (при загрузке создается путь до файла как указано в torrent-файле)
  40. rem lnk_name="Новые серии.lnk" - Ярлык на файл журнала загрузок log.txt
  41. rem lnk_dest="C:\Users\Admin\Favorites\Ссылки" - Путь куда копируется ярлык при загрузке нового файла
  42.  
  43. set workdir=_workdir
  44. set rutracker_login=login
  45. set rutracker_password=password
  46. set video_dir=d:\Video
  47. set lnk_name="Новые серии.lnk"
  48. set lnk_dest="C:\Users\Admin\Favorites\Ссылки"
  49.  
  50. rem - ВНЕШНИЕ ПАРАМЕТРЫ ------------------------------------------
  51. rem Файл get.txt - cписок отслеживаемых torrent-ов
  52. rem -----
  53. rem формат записи:
  54. rem идентификатор_трекера{rutracker, rutor} номер_торрента{номер из URL} номер_последней_скаченной_серии{автоматически обновляется после загрузки новых}
  55. rem -----
  56. rem Пример файла get.txt:
  57. rem rutracker 86939 46
  58. rem rutracker 4400218 7
  59. rem rutor 227513 22
  60.  
  61. rem --------------------------------------------------------------
  62. rem --------------------------------------------------------------
  63.  
  64.  
  65.  
  66. rem Создание рабочей папки, если ее еще не существует
  67. mkdir !workdir! >nul 2>nul
  68.  
  69. rem Один вход на RuTracker, чтобы получить cookie-файл для последующих загрузок torrent-файлов
  70. curl -s -c "%workdir%\cookie_rutracker.txt" -A "Opera/10.00 (Windows NT 5.1; U; ru)" ^
  71.         -d "login_username=!rutracker_login!&login_password=!rutracker_password!&login=%C2%F5%EE%E4" ^
  72.         "http://login.rutracker.org/forum/login.php" > nul
  73.         del /q !workdir!\~get.txt.new.tmp 2>nul
  74.  
  75.  
  76. rem Обход по отслеживаемым раздачам из файла настройки get.txt
  77. for /F "tokens=1,2,3*" %%i in (get.txt) do (
  78.         set tracker_id=%%i
  79.         set torrent_id=%%j
  80.         set last_file_id=%%k
  81.         set torrent_comment=%%l
  82.         set torrent_file=!tracker_id!_!torrent_id!.torrent
  83.         set err=
  84.  
  85.         rem Загрузка torrent-файла с RuTracker или RuTor
  86.         echo !tracker_id! !torrent_id! !last_file_id!: Загрузка файла раздачи '!torrent_file!'
  87.         if "%%i" == "rutracker" (
  88.                 curl -s -A "Opera/10.00 (Windows NT 5.1; U; ru)" ^
  89.                         -b "%workdir%\cookie_rutracker.txt" ^
  90.                         -b "bb_dl=!torrent_id!" ^
  91.                         "http://dl.rutracker.org/forum/dl.php?t=!torrent_id!" -o "!workdir!\!torrent_file!"
  92.         ) else (
  93.         if "%%i" == "rutor" (
  94.                 curl -s -A "Opera/10.00 (Windows NT 5.1; U; ru)" ^
  95.                         "http://d.rutor.org/download/!torrent_id!" -o "!workdir!\!torrent_file!"
  96.         ) else (
  97.                 set err=X
  98.                 echo !tracker_id! !torrent_id! !last_file_id!: Неизвестный трекер: '!tracker_id!'
  99.         )
  100.         )
  101.  
  102.  
  103.         if !err! NEQ X (
  104.                
  105.                 rem Обработка torrent-файла через call, чтобы можно было в for in использовать --show-files !workdir!\!torrent_file!
  106.                 call :process !torrent_file!
  107.         )
  108.  
  109.         rem Создание обновленного списка отслеживаемых раздач (формирование нового get.txt)
  110.         echo !tracker_id! !torrent_id! !last_file_id! !torrent_comment!>> !workdir!\~get.txt.new.tmp
  111.         echo.
  112. )
  113.  
  114. rem Обновление файла со списком отслеживаемых раздач (get.txt)
  115. move /y !workdir!\~get.txt.new.tmp get.txt >nul 2>nul
  116.  
  117. rem Удаление технического файла работы aria2c
  118. del /Q !video_dir!\*.aria2  >nul 2>nul
  119.  
  120. rem Индикация о новых загрузках в панели "Ссылки" - в if /? указан EQL WTF?!
  121. if "!has_new!" EQU "X" copy /Y %lnk_name% %lnk_dest% >nul
  122.  
  123. rem Возврат кодировки сеанса CMD
  124. chcp !chcp_cmd! >nul
  125.  
  126. rem Для паузы в конце выполнения программы, нужно раскомментировать следующую строчку
  127. rem pause
  128. exit /b
  129.  
  130.  
  131.  
  132.                                                                    
  133.  
  134. rem Обработка torrent-файла - анализ, загрузка новых файлов
  135. rem %1 - имя torrent-файла = !torrent_file!, но %1 нужен для использования в for in
  136. :process
  137.                 echo !tracker_id! !torrent_id! !last_file_id!: Обработка раздачи '!torrent_file!'
  138.  
  139.                 rem [доп инфо] в CMD /U тут без chcp 866 не работал find /c "+"
  140.                 for /f "tokens=1" %%a in ('aria2c.exe --show-files %workdir%^\%1 ^| findstr /R "^---+----*" ^| find /c "+"') do set cnt=%%a
  141.                 rem Если количество файлов в раздаче больше чем в настройке, то загружаем новые
  142.                 if !last_file_id! LSS !cnt! (
  143.  
  144.                         rem В torrent-файле порядок серий может быть не последовательным (http://rutracker.org/forum/viewtopic.php?t=4400218),
  145.                         rem поэтому ориентация на сортировку по имени файлов
  146.                         del /q !workdir!\~sort.tmp 2>nul
  147.                         for /f "tokens=1,2 delims=|" %%x in ('aria2c.exe --show-files %workdir%^\%1 ^| findstr /BRC:"^[ ]*[0-9][0-9]*"') do echo %%y ^| %%x >> !workdir!\~sort.tmp
  148.  
  149.                         set /a skip=last_file_id
  150.                         rem Загрузка новых файлов. Через call, чтобы работало skip=%skip%
  151.                         call :download_new_files
  152.  
  153.                 ) else (
  154.                         echo !tracker_id! !torrent_id! !last_file_id!: Новых файлов нет
  155.                 )
  156. exit /b
  157.  
  158. rem Загрузка новых файлов
  159. :download_new_files
  160.                 rem 1-3) Список файлов раздачи в кодировке UTF-8, поэтому в ней и читаем
  161.                 chcp 65001 > nul
  162.  
  163.                 rem Новые - это последние в отсортированном по имени списке файлов раздачи
  164.                 for /f "skip=%skip% tokens=1,2 delims=|" %%o in ('sort %workdir%^\~sort.tmp') do (
  165.                         rem 2-3) Возврат кодировки после 65001
  166.                         chcp !chcp! >nul
  167.  
  168.                         set /a down=%%p
  169.  
  170.                         rem Через call
  171.                         rem 1) чтобы в echo выводить кириллицу нормально и в заголовке сообщениия, и в имени файла, и в консоль, и в журнал
  172.                         rem 2) чтобы время %time% обновлялось для каждого нового файла
  173.                         call :down_file %%o
  174.                 )
  175.  
  176.                 rem 3-3) Возврат кодировки после 65001
  177.                 chcp !chcp! >nul
  178.  
  179.                 rem Удаление временных файлов
  180.                 del /q !workdir!\~sort.tmp 2>nul
  181.  
  182. exit /b
  183.  
  184.  
  185. rem Загрузка нового файла из раздачи
  186. rem %* = имя нового файла
  187. :down_file
  188.                         set /a last_file_id=last_file_id+1
  189.                         echo !tracker_id! !torrent_id! !last_file_id!: Загрузка файла '%*'
  190.  
  191.                         aria2c --dir=!video_dir! ^
  192.                                 --seed-time=0 ^
  193.                                 --file-allocation=none ^
  194.                                 --summary-interval=0 ^
  195.                                 --console-log-level=error ^
  196.                                 --max-overall-download-limit=1M ^
  197.                                 --allow-overwrite=true ^
  198.                                 --select-file=!down! ^
  199.                                 !workdir!\!torrent_file!
  200.  
  201. rem Еще полезно-интересные параметры:
  202. rem                             --quiet=true ^
  203. rem Параметр, чтобы от процесса загрузки никакого вывода на экран не было
  204.  
  205. rem                             --allow-overwrite=true ^
  206. rem Параметр, чтобы удалять файлы torrent-а, все кроме только скаченного
  207. rem Позволяет поддерживать отсутствие недокаченных частей ненужных соседних файлов в torrent-е
  208. rem При скачивании сразу нескольких файлов, останется только последний
  209.  
  210.  
  211.                         rem Ведение журнала загрузок log.txt - новые события сверху
  212.                         rem Если в %time% непосредственно в for, то для каждого файла время не обновляется, нужно через call
  213.                         copy log.txt !workdir!\~log.txt.tmp >nul 2>nul
  214.                         echo %date% %time%: [!tracker_id! !torrent_id! !last_file_id! !torrent_comment!] %* >log.txt
  215.                         type !workdir!\~log.txt.tmp >>log.txt  2>nul
  216.                         del /q !workdir!\~log.txt.tmp >nul 2>nul
  217.  
  218.  
  219.                         rem Флаг для оповещения о загрузке новых файлов
  220.                         set has_new=X
  221. exit /b
RAW Paste Data
Top