Нахрен долгое вступление. Если на вопрос «Нравится автоматизировать и любишь посмотреть кино?» ты неосознанно ответишь положительно, то то что здесь написано — тебе понравится. Итак, наверняка у тебя есть своя железяка, которая стоит дома/офисе где-то в уголочке и выполняет роль файлошары/торрентокачалки и Джа знает ещё чего.

Hardware:
Мать | MSI C847IS-P33 |
Камень | Распаян на плате, Intel(R) Celeron(R) CPU 847 @ 1.10GHz / 2 ядра |
Память | DDR3 @ 2 Gb |
SDD (система) | Kingston @ 8 Gb |
HDD (данные) | WG Green @ 2 Tb |
Что такое RSS torrent?
Это RSS лента, в которой вместо привычных новостей публикуются ссылки на .torrent файлы выбранной тобой тематики. Придумали это давно, и прогрессивный народ активно этим пользуется. Есть даже сервисы, такие как:
Которые этим и живут. Конечный пользователь приходит, выбивает интересный ему контент, получает ссылку на свою ленту, кормит её своему торрент-клиенту (который в свою очередь должен поддерживать torrent rss) — получая в конечном счете новые серии любимых сериалов/фильмов определенной тематики почти без задержки и лишних действий. Пиздец как удобненько.
Почему bash и Transmission?
Раньше скрипт был написан на питоне. Но поставить его — задача не из самых тривиальных, особенно на стареньких системах. Зависимости, сторонние библиотеки.. А bash — он считай что везде, да и в конкретной реализации нет никаких экзотичных требований.
Transmission в свою очередь — потому как очень шустрый, имеет адекватную веб-морду, да и с поддержкой у него — всё в порядке. Единственное серьезное «но» — это отсутствие поддержки RSS, и как раз исправлением этого недочета мы сейчас и займемся. Наш скрипт будет запускаться кроном с заданным интервалом, ссылки на .torrent файлы из RSS будут нежно извлекаться, записываться в файл, и передаваться RPC Transmission.
Его настройки:
USE_WGET |
Использовать wget (принимает значения 1 |0 ) |
WGET_PATH |
Путь до расположения wget (строка) |
USE_CURL |
Использовать curl (принимает значения 1 |0 ) |
CURL_PATH |
Путь до расположения curl (строка) |
USE_PROXY |
Использовать прокси (да/нет) (принимает значения 1 |0 ) |
PROXY_SCHEME |
Схема прокси (строка, например http , https , socks и т.п.) |
PROXY_ADDR |
Адрес прокси (строка) |
PROXY_PORT |
Порт прокси (строка) |
PROXY_USER |
Пользователь на прокси (строка) |
PROXY_PASS |
Пароль пользователя на прокси (строка) |
FEED_URLS_AND_DIRS |
Массив со ссылками на RSS ленты. Что очень важно — указывается URL первой ленты, а следующим элементом массива — директория, куда скачивать из URL торренты. И так далее. Пример:
FEED_URLS_AND_DIRS=(\ 'http://link.to/rss/feed1.xml' '/path/to/dir1/' \ 'http://link.to/rss/feed2.xml' '/path/to/dir2/' \ 'http://link.to/rss/feed3.xml' '/path/to/dir3/' \ ); |
TRANSMISSION_REMOTE |
Путь до transmission-remote (строка) |
TRANSMISSION_RPC_USER |
Пользователь transmission-remote (строка) |
TRANSMISSION_RPC_PASS |
Пароль пользователя transmission-remote (строка) |
TRANSMISSION_RPC_HOST |
Адрес transmission-remote (строка) |
TRANSMISSION_RPC_PORT |
Порт transmission-remote (строка) |
REMOVE_TRANSMISSION_COMPLETED_TASKS |
Удалять уже завершенные закачки из Transmission (принимает значения 1 |0 ) |
HISTORY_FILE |
Путь до текстового файла для хранения ссылок, которые были переданы в transmission-remote (строка) |
COLOR_OUTPUT |
Использовать цветную выдачу в STDOUT (принимает значения 1 |0 ) |
Установка
Переходим в нужную директорию и скачиваем исходник скрипта (потребуются wget
и unzip
):
$ wget -O src.zip https://goo.gl/TFfcgU; unzip src.zip; rm -f src.zip $ mv ./6f*d2-master/* ./; rm -Rf ./6f*d2-master/ $ ls -l *.sh -rw-r--r-- 1 kot nginx 10598 янв 22 10:21 get_torrents.sh
После чего открываем скрипт любимым редактором, и выполняем его настройку. Все настройки находятся в самом начале скрипта. Проверяем, делаем тестовые запуски. После того, как убедимся что всё работает как надо — добавляем запуск скрипта в крон:
$ crontab -e # Добавляем примерно следующую строку: 5 8-23 * * * /usr/bin/nice -n 15 /usr/bin/bash ~/get_torrents.sh # - - - - - ---------------------------------------------------------------- # | | | | | # | | | | +----- day of week (0 - 6) (Sunday=0) # | | | +------- month (1 - 12) # | | +--------- day of month (1 - 31) # | +----------- hour (0 - 23) # +------------- min (0 - 59)
Запускать через nice
вовсе не обязательно, но как-то правильнее, что-ли. Наслаждайся, мудачина :)
+ Bonus
Просто как рекомендация, не более. Есть такое средство для организации и просмотра (в браузере или через DLNA) библиотеки твоих фильмов/сериалов как Plex. Очень рекомендую — вещь просто ахрененная. Написана на питоне, не требует установленного веб-сервера и СУБД. Просто ставишь — и пользуешься. Подробнее об этом почитай здесь, да и вообще — поищи в сети ссылки и описания. Ещё раз — это простая рекомендация, но проверенная лично.
За джа, особый респект =)
скачал ваш скрипт! вываливает ошибка во время разбора rss
подскажите что вы делаете sed меняете что-то? пытался понять но именно в синтаксисе ошибка и не понимаю что делаете!
echo "$data" | tr '\n' ' ' | sed -r "s/<$tag_name/\n<$tag_name/g" | sed -n "/$tag_name/{s/.*\(.*\).*/\1/;p}";
Большое спасибо за ответ
Читайте исходник :)
Без примеров всех входных данных ничего сказать не смогу
в то что и дело что я вижу где ошибка! я прислал вам строку
в ней синтаксическая ошибка !
именно синтаксис sed , я ис правдивая что вы пытаетесь сделать данной командой?
Может у вас есть ехайл куда можно написать и более подробно обсудить данный вопрос?
Ошибка? А у меня работает :)
Мыло есть, но обсуждать там это не стоит. Есть гист, и там есть комментарии. Пишите туда, если есть желание :)
Понятное дело что у вас работает :) не выкладывали бы если не работало!
пытаюсь запустить на freebsd , вы наверное на какой-то другой системе где у sed другой синтаксис! вот и вываливается ошибка… Не могилы вы описать что вы делаете sed’ом что бы я исправил под freebsd может кому-то пригодиться :)
Ну, друже, читай исходник же :) Просто убери всё, кроме
echo
, и по одному добавляй, смотря на каком месте ломается :)ломается на месте sed -n «/$tag_name/{s/.*\(.*\).*/\1/;p}
именно команда ;p ему не нравится!
Вот и пытаюсь у вас узнать что вы делаете…
-n вывести строку содержащую /$tag_name/
s/ заменить
а что такое ;p не могу найти
Подскажите пожалуйста !
p
— print;
— combined several sed commands on one lineМогу предположить, что он спотыкается из-за отсутствия принудительной фильтрации в
$tag_name
, из-за чего регулярочка ломается. Но чтоб это подтвердить — вам нужно перечитать мой первый комментарий ;)