Як завантажити улюблені серії автоматично

В іншому дописі ми говорили про Завантажувач торрент-епізодів (TED), відмінна програма, написана на Java, що дозволяє нам додавати наші улюблені серії та завантажувати їх автоматично, коли з’являються нові розділи.

Метод, описаний у цьому дописі, є альтернативою TED, який, мабуть, зацікавить багатьох з вас..

Примітка: Перш ніж розпочати, здається розумним сказати, що існують інші методи для досягнення тих самих результатів. Один із способів зробити це за допомогою TED, але є також деякі торрент-клієнти, які мають підтримку RSS (що значно полегшує все). Крім того, є й інші сценарії (схожі на показаний нижче), які роблять те саме (і навіть краще) ... Я думаю, наприклад, про FlexRSS.

Метод полягає у створенні запланованого завдання, яке запускає скрипт python раз у раз. Цей скрипт завантажує торренти через RSS. Багато сайтів для завантаження торрентів дозволяють цю опцію, найпопулярніша з яких ezRSS. Перевага використання RSS для завантаження торрентів полягає в тому, що він дозволяє "підписатися" та завантажувати торренти улюбленої серії у міру появи нових глав. Так само, як підписавшись на блог чи стрічку новин.

Наступні кроки

1. - Встановіть пакет python-beautifulsoups.

sudo apt-get install python-beautifulsoup

2. - Відкрийте улюблений текстовий редактор. Скопіюйте в нього наступний код і збережіть файл із таким іменем: ~ / bin / tormon.py

#! / usr / bin / env python

імпорт urllib2, urlparse
з urllib2 імпортувати HTTPError, URLError
з імпорту BeautifulSoup
імпортувати вас
імпортувати optparse

__usage __ = '' '
tormon.py -O ~ / test / tormon -u "http: //rss.feed"
'' '

клас Main (об'єкт):
    '' '
    tormon перевіряє RSS-канал на наявність нових торрентів. Коли він знаходить новий .torrent, до
    завантажує його до вказаного вихідного каталогу, де (імовірно) моніторинг
    торрент програма завантажить відповідний файл.    
    '' '
    def parse_options (self):
        usage = 'usage:% prog [options]' + __ use__
        парсер = optparse.OptionParser (використання = використання)
        parser.add_option (
            '-O', '--output_dir', dest = 'output_dir',
            help = 'каталог, до якого зберігаються нові торренти',
            metavar = 'DIR')
        parser.add_option (
            '-f', '--filetype', dest = 'тип файлу',
            action = 'додати',
            за замовчуванням = [],
            help = 'допустимі типи файлів',
            metavar = 'ТИП')
        parser.add_option (
            '-d', '--downloaded_torrents', dest = 'downloaded_torrents',
            за замовчуванням = os.path.expanduser ('~ / .downloaded_torrents'),
            help = 'журнал вже завантажених торрентів',
            metavar = 'ФАЙЛ')
        parser.add_option (
            '-e', '--er_logror', dest = 'журнал_ помилок',
            help = 'журнал торрентів не вдалося завантажити',
            metavar = 'ФАЙЛ')
        parser.add_option (
            '-b', '--batch', dest = 'batch',
            help = 'файл, що містить список URL-адрес RSS-каналів',
            metavar = 'ФАЙЛ')
        parser.add_option (
            '-u', '--url', dest = 'url',
            action = 'додати',
            за замовчуванням = [],
            help = 'url RSS-стрічки',
            metavar = 'URL')
        parser.add_option (
            '-m', '- mark_all_downloaded', dest = 'mark_all_downloaded',
            action = 'store_true',
            за замовчуванням = False,
            help = "позначити всі торренти як уже завантажені")
        parser.add_option (
            '-M', '- match_by_filename', dest = 'match_by_filename',
            action = 'store_true',
            за замовчуванням = False,
            help = "розпізнавати завантажені файли за назвою, а не за URL-адресою. За замовчуванням відповідає URL-адреса.")        
        (self.opt, args) = парсер.parse_args ()
        якщо self.opt.batch:
            для відкритого рядка (self.opt.batch, 'r'):
                line = line.strip ()
                якщо рядок, а не line.startswith ('#'):
                    self.opt.url.append (рядок)
        якщо не self.opt.output_dir:
            self.opt.output_dir = os.path.expanduser ('~ / Робочий стіл')
        якщо не self.opt.filetype:
            self.opt.filetype = ['. torrent'], якщо не self.opt.error_log:
            self.opt.error_log = self.opt.downloaded_torrents + '. помилки'
        спробуйте:
            os.makedirs (self.opt.output_dir)
        крім помилки OSE:
            якщо не os.path.exists (self.opt.output_dir):
                print ('tormon не вдалося створити каталог% s'% self.opt.output_dir)
                вихід (1)
    def load_list_of_already_downloaded_torrents (self):
        спробуйте:
            self.downloaded = відкритий (self.opt.downloaded_torrents, 'r'). read (). split ()
        крім IOError:
            self.downloaded = [] спробуйте:
            self.errors = open (self.opt.error_log, 'r'). read (). split ()
        крім IOError:
            self.errors = [] def update_downloaded (self, url):
        self.downloaded.append (url)
        спробуйте:
            self.errors.remove (url)
        крім ValueError:
            проходити        
    def download_torrent (self, url):
        спробуйте:
            sock = urllib2.urlopen (url)
        крім (HTTPError, URLError):
            # print ('tormon не вдалося завантажити% s'% url)
            якщо url не в self.errors:
                self.errors.append (url)
        ще:
            filename = self.url2filename (url)
            target_file = os.path.join (self.opt.output_dir, ім'я файлу)
            print ('Завантаження% s'% target_file)
            content = sock.read ()
            sock.close ()
            fh = відкритий (цільовий файл, 'w')
            fh.write (зміст)
            fh.close ()
            self.update_downloaded (url)
    def url2filename (self, url):
        повернути os.path.basename (urlparse.urlparse (url) [2])
    def has_been_downloaded (self, url):
        якщо self.opt.match_by_filename:
            filename = self.url2filename (url)
            return (ім'я файлу в [self.url2filename (посилання) для посилання в self.downloaded])
        ще:
            повернення (URL в self.downloaded)
    def parse_rss_feed (self):
        для url у self.opt.url:
            print ('RSS-канал:% s'% url)
            спробуйте:
                sock = urllib2.urlopen (url)
            крім (HTTPError, URLError):
                print ('tormon не вдалося завантажити% s'% url)
            ще:
                content = sock.read ()
                sock.close ()
                суп = BeautifulSoup (вміст)
                посилання = ([link.nextSibling для посилання в soup.findAll ('посилання')] +
                       [посилання ['href'] для посилання в супі.findAll ('a')] +
                       [посилання ['url'] для посилання в soup.findAll ('media: content')])
                для посилання у посиланнях:
                    if (any ([link.lower (). ENDWITH (закінчення)
                             для закінчення на self.opt.filetype])
                        а не self.has_been_downloaded (посилання)):
                        якщо self.opt.mark_all_downloaded:
                            print ('Позначення% s як завантаженого'% посилання)
                            self.update_downloaded (посилання)
                        ще:
                            self.download_torrent (посилання)
    def save_list_of_already_downloaded_torrents (self):
        fh = відкритий (self.opt.downloaded_torrents, 'w')
        fh.write ('n'.join (self.downloaded))
        fh.close ()
        fh = відкрито (self.opt.error_log, 'w')
        fh.write ('n'.join (self.errors))
        fh.close ()
    def __init __ (self):
        self.parse_options ()        
        self.load_list_of_already_downloaded_torrents ()
        спробуйте:
            self.parse_rss_feed ()
        крім KeyboardInterrupt:
            проходити
        нарешті:
            self.save_list_of_already_downloaded_torrents ()
якщо __name __ == '__ main__':
    Головна ()

3. - Надайте йому дозволи на виконання.

chmod + x ~ / bin / tormon.py

4. - Перевірте, чи все працює нормально.

tormon.py -O ~ / torrents / -u "http: //rss.feed"

Де говорить ~ / торренти /, вам доведеться замінити його шляхом, куди ви хочете зберегти завантажені торренти. Майте на увазі, що файлів .torrent буде багато.

Там, де написано "http: //rss.feed", ви повинні замінити його URL-адресою RSS-каналу вашої улюбленої серії. Як його отримати? Ну, якщо ви хочете скористатися ezRSS, Я зайшов на головну сторінку і написав назву серії. З результатами з’явиться величезний список. Якщо ви хочете уточнити свій пошук (дата фільтрації, якість або особа, яка розірвала відео), ви можете зробити це, керуючи прикладами, які чітко опубліковані на цій сторінці. Отримавши результати, які ви шукаєте, клацніть правою кнопкою миші на посиланні, яке говорить RSS-канал на основі пошуку що з'являється поруч із помаранчевою кнопкою, характерною для RSS-каналів. Скопіюйте посилання та вставте його, замінивши http://rss.feed з прикладу.

Деякі додаткові дані, про які слід пам’ятати:

  • Якщо параметр -O пропущено, файли .torrent будуть завантажені на робочий стіл.
  • Якщо ви запустите ту саму команду відразу після цього, вона не повинна завантажувати новий торрент, якщо тільки новий торрент не додано до RSS-каналу.
  • Ця команда створює папку, в якій будуть збережені торренти, якщо вона не існує.
  • Список URL-адрес успішно завантажених торрентів буде збережено в ~ / .downloaded_torrents.
  • Щоб відстежувати більше 1 стрічки RSS, ви можете використовувати параметр -u. Приклад: tormon.py -u "http: //rss.feed1" -u "http: //rss.feed2"

5. - Якщо все працює нормально, ви можете додати сценарій як заплановане завдання crontab.

кронтаб -e

Ця команда відкриє текстовий редактор.

Вставте такий код, щоб він знаходився на початку файлу:

PATH = / sbin: / bin: / usr / sbin: / usr / bin: / home / USER / bin
MAILTO = КОРИСТУВАЧ

Зміна USER від вашого імені користувача.

Вставте десь нижче такий код ШЛЯХ = ...

* / 15 * * * * tormon.py -u "http: //rss.feed"

Це буде запускати сценарій кожні 15 хвилин. Звичайно, ви можете змінити його відповідно до своїх потреб. Що стосується телевізійних серіалів, то, можливо, буде розумно запускати їх раз на тиждень. Не забудьте прочитати наш попередній пост, в якому ми поетапно пояснюємо як додати завдання до crontab - -.

Для запуску щонеділі о 10:XNUMX:

00 10 * * 0 tormon.py -u "http: //rss.feed"
Примітка: не забудьте замінити параметри, передані storm.py з тими, які відповідають вашим потребам. Як мінімум, у наведеній вище команді вам доведеться замінити URL-адресу RSS-каналу.

На завершення переконайтеся, що в кінці файлу crontab є порожній рядок. Не знаю чому, але це вимога crontab, щоб усе працювало нормально.

Збережіть файл і вийдіть із текстового редактора.

Примітка: якщо у вас встановлений агент передачі пошти, наприклад exim4, рядок MAILTO = USER скаже crontab надіслати вам результати виконання tormon.py електронною поштою.


Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   Якеукалане - сказав він

    Ну, на щастя, я знаю трохи англійської. Я зробив це з YaRSS. Подивіться, чи працює це.

  2.   Якеукалане - сказав він

    Так круто. але ніхто не пояснює, як користуватися FlexRSS. На вашій сторінці це все дуже приємно, але я не знайшов способу додати його до потопу ... вони також кажуть, що Deluge за замовчуванням поставляється з одним, і це неправда.

    привіт

  3.   Мікель Майоль і тур - сказав він

    Qbittorrent та інші мають вбудовані системи планування. Було б добре пояснити, як працює кожен з них, я зазвичай пояснюю мікроторрент для MS WOS та Qbittorrent для Linux. У спойлері був підручник, але, звичайно, ви отримаєте багато відвідувань, якщо будете робити відео з кожною популярною торрент-програмою, додаючи, наприклад, EZ

  4.   Давайте використовувати Linux - сказав він

    Дякую Мікель! Я врахую це, як і всі ваші зауваження та пропозиції!
    Я посилаю тобі великі обійми! Павло.

  5.   Морська трава - сказав він

    Ось сховище, яке містить цю програму:
    https://launchpad.net/~lopeztobal/+archive/maths
    за допомогою: http://linuxmusica.com/

  6.   Шарік - сказав він

    Припиніть проповідувати використання ядра і пропагуйте використання операційної системи!

  7.   Давайте використовувати Linux - сказав він

    Хе-хе ...