좋아하는 시리즈를 자동으로 다운로드하는 방법

다른 게시물에서 우리는 토렌트 에피소드 다운로더 (TED), 우리가 좋아하는 시리즈를 추가하고 새 챕터가 나올 때 자동으로 다운로드 할 수있는 Java로 작성된 훌륭한 프로그램입니다.

이 게시물에 설명 된 방법은 많은 분들이 관심을 가질만한 TED의 대안입니다..

참고 : 시작하기 전에 동일한 결과를 얻을 수있는 다른 방법이 있다고 말하는 것이 현명 해 보입니다. 이를 수행하는 한 가지 방법은 TED를 사용하는 것입니다.하지만 RSS 지원과 함께 제공되는 토렌트 클라이언트도 있습니다 (모든 것이 훨씬 쉬워집니다). 또한 동일한 기능을 수행하는 다른 스크립트 (아래 표시된 것과 유사한)도 있습니다. 예를 들어 FlexRSS를 생각하고 있습니다.

이 방법은 Python 스크립트를 자주 실행하는 예약 된 작업을 만드는 것으로 구성됩니다. 이 스크립트는 RSS를 통해 토렌트를 다운로드합니다. 많은 토렌트 다운로드 사이트에서이 옵션을 허용합니다. ezRSS. RSS를 사용하여 토렌트를 다운로드 할 때의 장점은 새 챕터가 나타날 때 좋아하는 시리즈의 토렌트를 "구독"하고 다운로드 할 수 있다는 것입니다. 블로그 나 뉴스 피드를 구독 할 때와 같습니다.

따라야 할 단계

1.- 패키지 설치 파이썬-아름다운 수프.

sudo apt-get install python-beautifulsoup

2.- 좋아하는 텍스트 편집기를 엽니 다. 다음 코드를 여기에 복사하고 다음 이름으로 파일을 저장합니다. ~ / bin / tormon.py

#! / usr / bin / env 파이썬

import urllib2, urlparse
urllib2에서 가져 오기 HTTPError, URLError
BeautifulSoup에서 가져 오기 BeautifulSoup
운영 체제 가져 오기
가져 오기 optparse

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

클래스 Main (객체) :
    '' '
    tormon은 새 급류에 대한 RSS 피드를 확인합니다. 새로운 .torrent를 찾으면
    지정된 출력 디렉토리에 다운로드합니다. 여기서 (아마도) 모니터링
    토렌트 프로그램이 해당 파일을 다운로드합니다.    
    '' '
    def parse_options (자체) :
        usage = 'usage : % prog [options]'+ __ usage__
        파서 = optparse.OptionParser (사용 = 사용)
        parser.add_option (
            '-O', '--output_dir', dest = 'output_dir',
            help = '새 토렌트가 저장되는 디렉토리',
            metavar = 'DIR')
        parser.add_option (
            '-f', '-파일 유형', dest = '파일 유형',
            액션 = '추가',
            기본값 = [],
            help = '허용되는 파일 형식',
            metavar = 'TYPE')
        parser.add_option (
            '-d', '--downloaded_torrents', dest = 'downloaded_torrents',
            기본값 = os.path.expanduser ( '~ / .downloaded_torrents'),
            help = '이미 다운로드 한 토렌트 로그',
            metavar = 'FILE')
        parser.add_option (
            '-e', '--error_log', dest = 'error_log',
            help = '토렌트 토몬 다운로드 실패',
            metavar = 'FILE')
        parser.add_option (
            '-b', '--batch', dest = 'batch',
            help = 'rss 피드 URL 목록이 포함 된 파일',
            metavar = 'FILE')
        parser.add_option (
            '-u', '--url', dest = 'url',
            액션 = '추가',
            기본값 = [],
            help = 'rss 피드의 URL',
            metavar = 'URL')
        parser.add_option (
            '-m', '-mark_all_downloaded', dest = 'mark_all_downloaded',
            액션 = 'store_true',
            기본값 = False,
            help = "모든 토렌트를 이미 다운로드 한 것으로 표시")
        parser.add_option (
            '-M', '-match_by_filename', dest = 'match_by_filename',
            액션 = 'store_true',
            기본값 = False,
            help = "URL이 아닌 파일 이름으로 다운로드 한 파일을 인식합니다. URL로 일치하는 것이 기본값입니다.")        
        (self.opt, args) = parser.parse_args ()
        self.opt.batch 인 경우 :
            열린 줄의 경우 (self.opt.batch, 'r') :
                라인 = line.strip ()
                line.startswith ( '#')가 아닌 line :
                    self.opt.url.append (줄)
        self.opt.output_dir이 아닌 경우 :
            self.opt.output_dir = os.path.expanduser ( '~ / Desktop')
        self.opt.filetype이 아닌 경우 :
            self.opt.filetype = [ '. torrent'] self.opt.error_log가 아닌 경우 :
            self.opt.error_log = self.opt.downloaded_torrents + '. errors'
        시도 :
            os.makedirs (self.opt.output_dir)
        OSError 제외 :
            os.path.exists가 아닌 경우 (self.opt.output_dir) :
                print ( 'tormon이 % s'% self.opt.output_dir 디렉토리를 작성하지 못했습니다.)
                출구 (1)
    def load_list_of_already_downloaded_torrents (자체) :
        시도 :
            self.downloaded = open (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) :
        시도 :
            양말 = urllib2.urlopen (URL)
        제외 (HTTPError, URLError) :
            # print ( 'tormon이 % s'% URL을 다운로드하지 못했습니다)
            URL이 self.errors에없는 경우 :
                self.errors.append (URL)
        그밖에:
            파일 이름 = self.url2filename (url)
            target_file = os.path.join (self.opt.output_dir, 파일 이름)
            print ( 'Downloading % s'% target_file)
            내용 = sock.read ()
            sock.close ()
            fh = 열기 (target_file, 'w')
            fh.write (내용)
            fh.close ()
            self.update_downloaded (URL)
    def url2filename (self, url) :
        return os.path.basename (urlparse.urlparse (url) [2])
    def has_been_downloaded (self, url) :
        self.opt.match_by_filename 인 경우 :
            파일 이름 = self.url2filename (url)
            return ([self.url2filename (link) for link in self.downloaded]의 파일 이름))
        그밖에:
            반환 (자체 다운로드 된 URL)
    def parse_rss_feed (자체) :
        self.opt.url의 URL :
            인쇄 ( 'RSS 피드 : % s'% URL)
            시도 :
                양말 = urllib2.urlopen (URL)
            제외 (HTTPError, URLError) :
                print ( 'tormon이 % s'% URL을 다운로드하지 못했습니다)
            그밖에:
                내용 = sock.read ()
                sock.close ()
                수프 = BeautifulSoup (내용)
                links = ([soup.findAll ( 'link')의 링크에 대한 링크 .nextSibling] +
                       [link [ 'href'] for link in soup.findAll ( 'a')] +
                       soup.findAll의 링크에 대한 [link [ 'url'] ( 'media : content')])
                링크의 링크 :
                    if (any ([link.lower (). endswith (end))
                             self.opt.filetype으로 끝나는 경우])
                        self.has_been_downloaded (링크)가 아님) :
                        self.opt.mark_all_downloaded 인 경우 :
                            인쇄 ( 'Marking % s as Downloads'% link)
                            self.update_downloaded (링크)
                        그밖에:
                            self.download_torrent (링크)
    def save_list_of_already_downloaded_torrents (자체) :
        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.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 ~ / 급류 / -u "http : //rss.feed"

어디에 말한다 ~ / 급류 /, 다운로드 한 토렌트를 저장할 경로로 바꿔야합니다. 많은 .torrent 파일이 있음을 명심하십시오.

"http : //rss.feed"라고되어있는 경우 좋아하는 시리즈의 RSS 피드 URL로 바꿔야합니다. 그것을 얻는 방법? 당신이 사용하고 싶다면 ezRSS, 메인 페이지로 가서 시리즈 이름을 썼습니다. 결과와 함께 거대한 목록이 나타납니다. 검색을 구체화하려는 경우 (날짜, 품질 또는 비디오를 리핑 한 사람 필터링) 해당 페이지에 명확하게 게시 된 예제로 안내하여 수행 할 수 있습니다. 원하는 결과를 얻으면 링크를 마우스 오른쪽 버튼으로 클릭하십시오. 검색 기반 RSS 피드 RSS 피드의 주황색 버튼 특성 옆에 표시됩니다. 링크를 복사하여 붙여 넣으십시오. http://rss.feed 예제의.

유의해야 할 추가 데이터 :

  • -O 매개 변수를 생략하면 .torrent 파일이 데스크탑으로 다운로드됩니다.
  • 곧바로 동일한 명령을 실행하면 RSS 피드에 새 토렌트가 추가되지 않는 한 새 토렌트를 다운로드하지 않아야합니다.
  • 이 명령은 토렌트가 존재하지 않는 경우 저장할 폴더를 생성합니다.
  • 성공적으로 다운로드 된 토렌트의 URL 목록은 ~ / .downloaded_torrents에 저장됩니다.
  • 둘 이상의 RSS 피드를 모니터링하려면 -u 매개 변수를 사용할 수 있습니다. 예 : tormon.py -u "http : //rss.feed1"-u "http : //rss.feed1"

5.- 모든 것이 제대로 작동하면 스크립트를 crontab 예약 작업으로 추가 할 수 있습니다.

crontab을 -e

이 명령은 텍스트 편집기를 엽니 다.

다음 코드를 파일의 시작 부분에 붙여 넣으십시오.

경로 = / sbin : / bin : / usr / sbin : / usr / bin : / home / USER / bin
MAILTO = 사용자

변화 USER 사용자 이름으로.

아래 어딘가에 다음 코드를 붙여 넣으십시오. 경로 =…

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

그러면 15 분마다 스크립트가 실행됩니다. 물론 필요에 맞게 변경할 수 있습니다. 텔레비전 시리즈의 경우 일주일에 한 번 실행하는 것이 현명 할 수 있습니다. 단계별로 설명하는 이전 게시물을 읽는 것을 잊지 마십시오. crontab에 작업을 추가하는 방법.

매주 일요일 오전 10시에 실행하려면 :

00 10 * * 0 tormon.py -u "http : //rss.feed"
참고 : 전달 된 매개 변수를 바꾸는 것을 잊지 마십시오. 폭풍.py 당신의 필요에 맞는 것들과 함께. 최소한 위의 명령에서 RSS 피드의 URL을 바꿔야합니다.

완료하려면 crontab 파일 끝에 빈 줄이 있는지 확인하십시오. 이유는 모르겠지만 모든 것이 제대로 작동하려면 crontab 요구 사항입니다.

파일을 저장하고 텍스트 편집기를 종료하십시오.

참고 : exim4와 같은 이메일 전송 에이전트가 설치된 경우 MAILTO = USER 행은 crontab에 tormon.py 실행 결과를 이메일로 보내도록 지시합니다.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   자크칼란

    운 좋게도 저는 영어를 조금 알고 있습니다. YaRSS로했습니다. 작동하는지 확인하십시오.

  2.   자크칼란

    네 멋져요. 그러나 아무도 FlexRSS를 사용하는 방법을 설명하지 않습니다. 귀하의 페이지에서 모든 것이 매우 좋지만 홍수에 추가하는 방법을 찾지 못했습니다 ... 그들은 또한 Deluge가 기본적으로 제공되며 사실이 아니라고 말합니다.

    안부

  3.   미켈 마욜 이 투르

    Qbittorrent 및 기타 제품에는 일정 시스템이 내장되어 있습니다. 각각의 작동 원리를 설명해 주시면 좋을 것 같습니다. 저는 보통 MS WOS 용 마이크로 토렌트와 리눅스 용 Qbittorrent에 대해 설명합니다. 스포일러에는 튜토리얼이 있었지만 각 인기 토렌트 프로그램으로 비디오를 만들면 많은 방문을 받게 될 것입니다. 예를 들어 EZ

  4.   Linux를 사용합시다

    감사합니다 Miquel! 귀하의 모든 의견과 제안과 마찬가지로 고려하겠습니다!
    큰 포옹을 보냅니다! 폴.

  5.   해초

    다음은이 프로그램이 포함 된 저장소입니다.
    https://launchpad.net/~lopeztobal/+archive/maths
    과 연락해주세요. http://linuxmusica.com/

  6.   샤릭

    커널 사용에 대한 설교를 중단하고 운영 체제 사용을 전파하십시오!

  7.   Linux를 사용합시다

    헤헤 ...