Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- rem
- rem 13.05.2013 Tucker56 http://habrahabr.ru/post/180173/
- rem
- rem Загрузка новых серий/файлов из torrent-раздач
- rem
- rem Шаги:
- rem - создание списка отслеживаемых раздач - файл get.txt (описание ниже)
- rem - создание пустого файла журнала загрузок log.txt
- rem - создание ярлыка (Новые серии.lnk) на журнал загрузок log.txt
- rem - указание внутренних параметров (ниже в этом файле)
- rem - создание периодической задачи запуска этого файла в планировщике задач
- rem
- rem Результат (при появлении новых файлов в отслеживаемых раздачах):
- rem - файлы скачиваются в заданную папку (%video_dir%)
- rem - в панели Ссылки появляется ярлык на журнал загрузок
- rem
- rem Особенности:
- rem - если в окне выполнения программы вместо кириллицы отображается ЄЁаЁ««Ёж , нужно в свойствах окна выставить шрифт Lucida
- @SetLocal EnableDelayedExpansion
- rem Сохранение исходной кодировки сеанса CMD, для дальнейшей работы программы в cp1251, что нужно для возможности править этот файл в Блокноте
- for /f "tokens=2 delims=:" %%a in ('chcp') do set /a chcp_cmd=%%a
- rem Для восприятия кириллицы в параметрах и отображения кириллицы текстов сообщений в консоли
- chcp 1251 >nul
- rem Сохранение исходной кодировки, для локальных изменений (chcp)
- for /f "tokens=2 delims=:" %%a in ('chcp') do set /a chcp=%%a
- rem --------------------------------------------------------------
- rem - ВНУТРЕННИЕ ПАРАМЕТРЫ ---------------------------------------
- rem workdir=_workdir - рабочая папка, для сохранения временных файлов и загруженных torrent-файлов
- rem rutracker_login=login - Логин на трекере http://rutracker.org
- rem rutracker_password=password - Пароль на трекере http://rutracker.org
- rem video_dir=d:\video - Папка куда сохранять загружаемые файлы раздачи (при загрузке создается путь до файла как указано в torrent-файле)
- rem lnk_name="Новые серии.lnk" - Ярлык на файл журнала загрузок log.txt
- rem lnk_dest="C:\Users\Admin\Favorites\Ссылки" - Путь куда копируется ярлык при загрузке нового файла
- set workdir=_workdir
- set rutracker_login=login
- set rutracker_password=password
- set video_dir=d:\Video
- set lnk_name="Новые серии.lnk"
- set lnk_dest="C:\Users\Admin\Favorites\Ссылки"
- rem - ВНЕШНИЕ ПАРАМЕТРЫ ------------------------------------------
- rem Файл get.txt - cписок отслеживаемых torrent-ов
- rem -----
- rem формат записи:
- rem идентификатор_трекера{rutracker, rutor} номер_торрента{номер из URL} номер_последней_скаченной_серии{автоматически обновляется после загрузки новых}
- rem -----
- rem Пример файла get.txt:
- rem rutracker 86939 46
- rem rutracker 4400218 7
- rem rutor 227513 22
- rem --------------------------------------------------------------
- rem --------------------------------------------------------------
- rem Создание рабочей папки, если ее еще не существует
- mkdir !workdir! >nul 2>nul
- rem Один вход на RuTracker, чтобы получить cookie-файл для последующих загрузок torrent-файлов
- curl -s -c "%workdir%\cookie_rutracker.txt" -A "Opera/10.00 (Windows NT 5.1; U; ru)" ^
- -d "login_username=!rutracker_login!&login_password=!rutracker_password!&login=%C2%F5%EE%E4" ^
- "http://login.rutracker.org/forum/login.php" > nul
- del /q !workdir!\~get.txt.new.tmp 2>nul
- rem Обход по отслеживаемым раздачам из файла настройки get.txt
- for /F "tokens=1,2,3*" %%i in (get.txt) do (
- set tracker_id=%%i
- set torrent_id=%%j
- set last_file_id=%%k
- set torrent_comment=%%l
- set torrent_file=!tracker_id!_!torrent_id!.torrent
- set err=
- rem Загрузка torrent-файла с RuTracker или RuTor
- echo !tracker_id! !torrent_id! !last_file_id!: Загрузка файла раздачи '!torrent_file!'
- if "%%i" == "rutracker" (
- curl -s -A "Opera/10.00 (Windows NT 5.1; U; ru)" ^
- -b "%workdir%\cookie_rutracker.txt" ^
- -b "bb_dl=!torrent_id!" ^
- "http://dl.rutracker.org/forum/dl.php?t=!torrent_id!" -o "!workdir!\!torrent_file!"
- ) else (
- if "%%i" == "rutor" (
- curl -s -A "Opera/10.00 (Windows NT 5.1; U; ru)" ^
- "http://d.rutor.org/download/!torrent_id!" -o "!workdir!\!torrent_file!"
- ) else (
- set err=X
- echo !tracker_id! !torrent_id! !last_file_id!: Неизвестный трекер: '!tracker_id!'
- )
- )
- if !err! NEQ X (
- rem Обработка torrent-файла через call, чтобы можно было в for in использовать --show-files !workdir!\!torrent_file!
- call :process !torrent_file!
- )
- rem Создание обновленного списка отслеживаемых раздач (формирование нового get.txt)
- echo !tracker_id! !torrent_id! !last_file_id! !torrent_comment!>> !workdir!\~get.txt.new.tmp
- echo.
- )
- rem Обновление файла со списком отслеживаемых раздач (get.txt)
- move /y !workdir!\~get.txt.new.tmp get.txt >nul 2>nul
- rem Удаление технического файла работы aria2c
- del /Q !video_dir!\*.aria2 >nul 2>nul
- rem Индикация о новых загрузках в панели "Ссылки" - в if /? указан EQL WTF?!
- if "!has_new!" EQU "X" copy /Y %lnk_name% %lnk_dest% >nul
- rem Возврат кодировки сеанса CMD
- chcp !chcp_cmd! >nul
- rem Для паузы в конце выполнения программы, нужно раскомментировать следующую строчку
- rem pause
- exit /b
- rem Обработка torrent-файла - анализ, загрузка новых файлов
- rem %1 - имя torrent-файла = !torrent_file!, но %1 нужен для использования в for in
- :process
- echo !tracker_id! !torrent_id! !last_file_id!: Обработка раздачи '!torrent_file!'
- rem [доп инфо] в CMD /U тут без chcp 866 не работал find /c "+"
- for /f "tokens=1" %%a in ('aria2c.exe --show-files %workdir%^\%1 ^| findstr /R "^---+----*" ^| find /c "+"') do set cnt=%%a
- rem Если количество файлов в раздаче больше чем в настройке, то загружаем новые
- if !last_file_id! LSS !cnt! (
- rem В torrent-файле порядок серий может быть не последовательным (http://rutracker.org/forum/viewtopic.php?t=4400218),
- rem поэтому ориентация на сортировку по имени файлов
- del /q !workdir!\~sort.tmp 2>nul
- 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
- set /a skip=last_file_id
- rem Загрузка новых файлов. Через call, чтобы работало skip=%skip%
- call :download_new_files
- ) else (
- echo !tracker_id! !torrent_id! !last_file_id!: Новых файлов нет
- )
- exit /b
- rem Загрузка новых файлов
- :download_new_files
- rem 1-3) Список файлов раздачи в кодировке UTF-8, поэтому в ней и читаем
- chcp 65001 > nul
- rem Новые - это последние в отсортированном по имени списке файлов раздачи
- for /f "skip=%skip% tokens=1,2 delims=|" %%o in ('sort %workdir%^\~sort.tmp') do (
- rem 2-3) Возврат кодировки после 65001
- chcp !chcp! >nul
- set /a down=%%p
- rem Через call
- rem 1) чтобы в echo выводить кириллицу нормально и в заголовке сообщениия, и в имени файла, и в консоль, и в журнал
- rem 2) чтобы время %time% обновлялось для каждого нового файла
- call :down_file %%o
- )
- rem 3-3) Возврат кодировки после 65001
- chcp !chcp! >nul
- rem Удаление временных файлов
- del /q !workdir!\~sort.tmp 2>nul
- exit /b
- rem Загрузка нового файла из раздачи
- rem %* = имя нового файла
- :down_file
- set /a last_file_id=last_file_id+1
- echo !tracker_id! !torrent_id! !last_file_id!: Загрузка файла '%*'
- aria2c --dir=!video_dir! ^
- --seed-time=0 ^
- --file-allocation=none ^
- --summary-interval=0 ^
- --console-log-level=error ^
- --max-overall-download-limit=1M ^
- --allow-overwrite=true ^
- --select-file=!down! ^
- !workdir!\!torrent_file!
- rem Еще полезно-интересные параметры:
- rem --quiet=true ^
- rem Параметр, чтобы от процесса загрузки никакого вывода на экран не было
- rem --allow-overwrite=true ^
- rem Параметр, чтобы удалять файлы torrent-а, все кроме только скаченного
- rem Позволяет поддерживать отсутствие недокаченных частей ненужных соседних файлов в torrent-е
- rem При скачивании сразу нескольких файлов, останется только последний
- rem Ведение журнала загрузок log.txt - новые события сверху
- rem Если в %time% непосредственно в for, то для каждого файла время не обновляется, нужно через call
- copy log.txt !workdir!\~log.txt.tmp >nul 2>nul
- echo %date% %time%: [!tracker_id! !torrent_id! !last_file_id! !torrent_comment!] %* >log.txt
- type !workdir!\~log.txt.tmp >>log.txt 2>nul
- del /q !workdir!\~log.txt.tmp >nul 2>nul
- rem Флаг для оповещения о загрузке новых файлов
- set has_new=X
- exit /b
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement