- PVSM.RU - https://www.pvsm.ru -
За ужином интересно посмотреть что-то взрывное престольное или из позднего.
И совсем неприятно, когда стол накрыт, а ты начинаешь лихорадочно проверять по всем раздачам «а не появилось ли чего нового».
И в лучшем случае дальше будет надпись в uTorrent — «Осталось 5-10-15 минут». А стол стынет.
Так дела не делаются.
Создание файла-списка раздач с номерами последних скачанных серий (get.txt).
Запуск по расписанию bat-скрипта (get.bat), который для каждой раздачи:
Если загружена новая серия, то в панель «Ссылки» будет скопирован ярлык на журнал загрузок (иконка на картинке — желтая звезда).
Если после просмотра всего нового «звездочку» удалять руками, то будет работать примета:
«Есть звездочка — есть новое кино, нет звездочки — нового нет».
Так как помимо bat-скрипта создаются-используются еще другие файлы и папки, то удобно все это локализовать в отдельном месте.
Используется для загрузки torrent-файлов.
Чтобы скачать torrent-файл с rutracker, нужно в cookies добавить параметр bb_dl=%torrent_id%
.
Aria2 тоже может загружать файлы, но подружить с cookies rutracker не получилось.
Умеет качать отдельные файлы из раздачи.
Из-за особенностей torrent, при загрузке отдельного файла, частично скачиваются соседние файлы, поэтому в папке раздачи возможно появление кусков соседних файлов.
Также оказалось, что файлы в раздачах могут идти не по порядку. Поэтому для определения новых файлов используется сортировка по названиям файлов-серий.
Написано на bat из спортивного интереса.
Были сложности в работе с кириллицей — с редактированием файла в блокноте, выводом на экран и записью в лог-файл. Поэтому используются многократные финты с chcp
.
Из-за сложностей с использованием локальных переменных, появилось много подпрограмм call - exit /b
.
В справке по if /?
выдается оператор сравнения EQL
, хотя bat
на него ругается и воспринимает EQU
. //Microsoft Windows [Version 6.1.7601]
В тексте скрипта есть группа параметров, для которых необходимо задать актуальные значения:
Формат строк:
Пример файла get.txt:
rutor 227513 24 "Теория большого взрыва" (Сезон 6)
rutracker 3799523 19 Познер
rutracker 4400218 10 Игры престолов
В него заносится информация о скачанных новых файлах. Новые записи добавляются сверху.
При нажатии на «звездочку», открывается этот журнал в блокноте.
Для оповещения о загрузке нового, используется копирование ярлыка в заметное место — «Рабочий стол», панель «Ссылки». Сам ярлык нужно создать в папке bat-скрипта. Если файла журнала еще не существует, то его нужно создать.
Для периодического исполнения bat-скрипта нужно создать задачу в планировщике задач (Панель управленияВсе элементы панели управленияАдминистрированиеПланировщик заданий).
Из необычного — полный путь к скрипту указывается в кавычках, а рабочая папка без. Хотя в пути есть пробелы.
При каждом исполнении скрипта открывается cmd-окно.
Если кириллица не читабельна — для окна cmd нужно в свойствах выбрать шрифт Lucida.
Если нужно выполнение без cmd-окна, то можно вызывать get.vbs [16].
Все работает без вмешательства уже больше месяца.
Для сидирования достаточно открыть скачанный torrent-файл в uTorrent.
Ссылки:
habrahabr.ru/sandbox/51123/ [17]
ubuntu.opentomsk.net/discussion/viewtopic.php?id=3220 [18]
Файлы:
@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:UsersAdminFavoritesСсылки" - Путь куда копируется ярлык при загрузке нового файла
set workdir=_workdir
set rutracker_login=login
set rutracker_password=password
set video_dir=d:Video
set lnk_name="Новые серии.lnk"
set lnk_dest="C:UsersAdminFavoritesСсылки"
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
Dim oShell
Set oShell = WScript.CreateObject ("WSCript.shell")
oShell.run "get.bat", 0
Set oShell = Nothing
Автор: Tucker56
Источник [19]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/torrent/37715
Ссылки в тексте:
[1] #: #wd
[2] curl: http://curl.haxx.se/download.html
[3] #: #curl
[4] aria2c: http://aria2.sourceforge.net/
[5] #: #aria
[6] get.bat: http://pastebin.com/7wyGTs7D
[7] #: #bat
[8] #: #bat-pref
[9] #: #txt
[10] #: #log
[11] #: #lnk
[12] #: #cron
[13] rutracker.org/forum/viewtopic.php?t=4400218: http://rutracker.org/forum/viewtopic.php?t=4400218
[14] rutracker.org: http://rutracker.org
[15] rutracker.org/forum/viewtopic.php?t=3192884: http://rutracker.org/forum/viewtopic.php?t=3192884
[16] get.vbs: http://pastebin.com/5v0Nq1ZA
[17] habrahabr.ru/sandbox/51123/: http://habrahabr.ru/sandbox/51123/
[18] ubuntu.opentomsk.net/discussion/viewtopic.php?id=3220: https://ubuntu.opentomsk.net/discussion/viewtopic.php?id=3220
[19] Источник: http://habrahabr.ru/post/180173/
Нажмите здесь для печати.