お気に入りのシリーズを自動的にダウンロードする方法

別の投稿で、私たちはについて話しました トレントエピソードダウンローダー(TED)、Javaで記述された優れたプログラムで、お気に入りのシリーズを追加して、新しい章が出てきたときに自動的にダウンロードできます。

この投稿で説明されている方法は、TEDの代替手段であり、多くの人がおそらく興味を持っていると思います。.

注:始める前に、同じ結果を達成するための他の方法があると言うのは賢明なようです。 これを行うXNUMXつの方法は、TEDを使用することですが、RSSサポートが付属しているトレントクライアントもいくつかあります(これにより、すべてがはるかに簡単になります)。 また、同じ(そしてさらに優れた)動作をする他のスクリプト(以下に示すものと同様)があります…たとえば、FlexRSSについて考えています。

このメソッドは、Pythonスクリプトを頻繁に実行するスケジュールされたタスクを作成することで構成されます。 このスクリプトは、RSS経由でトレントをダウンロードします。 多くのトレントダウンロードサイトがこのオプションを許可していますが、最も人気のあるのは ezRSS。 RSSを使用してトレントをダウンロードする利点は、新しい章が表示されたときに、お気に入りのシリーズのトレントを「サブスクライブ」してダウンロードできることです。 ブログやニュースフィードを購読するときと同じように。

従うべきステップ

1.- パッケージをインストールします python-beautifulsoup.

sudo apt-get install python-beautifulsoup

2.- お気に入りのテキストエディタを開きます。 次のコードをコピーして、次の名前でファイルを保存します。 〜/ bin / tormon.py

#!/ usr / bin / env python

urllib2、urlparseをインポートします
urllib2からインポートHTTPError、URLError
BeautifulSoupからインポートBeautifulSoup
輸入OS
optparseをインポートします

__使用法__ = '' '
tormon.py -O〜 / test / tormon -u "http://rss.feed"
'' '

クラスMain(オブジェクト):
    '' '
    tormonは、RSSフィードで新しいトレントをチェックします。 新しい.torrentが見つかったら、
    指定された出力ディレクトリにダウンロードします。ここで(おそらく)監視
    トレントプログラムは、対応するファイルをダウンロードします。    
    '' '
    def parse_options(self):
        使用法= '使用法:%prog [オプション]' + __usage__
        パーサー= optparse.OptionParser(使用法=使用法)
        parser.add_option(
            '-O'、 '-output_dir'、dest = 'output_dir'、
            help = '新しいトレントが保存されるディレクトリ'、
            metavar = 'DIR')
        parser.add_option(
            '-f'、 '-filetype'、dest = 'filetype'、
            アクション= '追加'、
            デフォルト= []、
            help = '許容されるファイルタイプ'、
            metavar = 'TYPE')
        parser.add_option(
            '-d'、 '-downloaded_torrents'、dest = 'downloaded_torrents'、
            デフォルト= os.path.expanduser( '〜/ .downloaded_torrents')、
            help = 'すでにダウンロードされたトレントのログ'、
            metavar = 'ファイル')
        parser.add_option(
            '-e'、 '-error_log'、dest = 'error_log'、
            help = 'トレントのログtormonがダウンロードに失敗しました'、
            metavar = 'ファイル')
        parser.add_option(
            '-b'、 '-batch'、dest = 'batch'、
            help = 'RSSフィードURLのリストを含むファイル'、
            metavar = 'ファイル')
        parser.add_option(
            '-u'、 '-url'、dest = 'url'、
            アクション= '追加'、
            デフォルト= []、
            help = 'RSSフィードのURL'、
            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)= parser.parse_args()
        self.opt.batchの場合:
            開いている行の場合(self.opt.batch、 'r'):
                line = line.strip()
                line.startswith( '#')ではなくlineの場合:
                    self.opt.url.append(行)
        self.opt.output_dirでない場合:
            self.opt.output_dir = os.path.expanduser( '〜/デスクトップ')
        self.opt.filetypeでない場合:
            self.opt.filetype = ['.torrent'] if not self.opt.error_log:
            self.opt.error_log = self.opt.downloaded_torrents + '。エラー'
        試してみてください。
            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):
        試してみてください。
            self.downloaded = open(self.opt.downloaded_torrents、 'r')。read()。split()
        IOErrorを除く:
            self.downloaded = [] try:
            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 failed to download%s'%url)
            URLがself.errorsにない場合:
                self.errors.append(url)
        その他:
            filename = self.url2filename(url)
            target_file = os.path.join(self.opt.output_dir、filename)
            print( 'Downloading%s'%target_file)
            content = sock.read()
            sock.close()
            fh = open(target_file、 '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.downloadedのリンクの[self.url2filename(リンク)のファイル名])
        その他:
            return(self.downloadedのURL)
    def parse_rss_feed(self):
        self.opt.urlのURLの場合:
            印刷( 'RSSフィード:%s'%url)
            試してみてください。
                sock = urllib2.urlopen(url)
            (HTTPError、URLError)を除く:
                印刷( 'トルモンは%s'%urlのダウンロードに失敗しました)
            その他:
                content = sock.read()
                sock.close()
                スープ= BeautifulSoup(コンテンツ)
                リンク=([link.nextSibling for link in soup.findAll( 'link')] +
                       [soup.findAll( 'a')内のリンクのリンク['href']] +
                       [リンク['url'] for link in soup.findAll( 'media:content')])
                リンク内のリンクの場合:
                    if(any([link.lower()。endswith(ending)
                             self.opt.filetypeで終わる場合])
                        self.has_been_downloaded(リンク)ではありません):
                        self.opt.mark_all_downloadedの場合:
                            印刷(「ダウンロード済みとして%sをマークする」%リンク)
                            self.update_downloaded(リンク)
                        その他:
                            self.download_torrent(リンク)
    def save_list_of_already_downloaded_torrents(self):
        fh = open(self.opt.downloaded_torrents、 'w')
        fh.write( 'n'.join(self.downloaded))
        fh.close()
        fh = open(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()
if __name __ == '__ main__':
    メイン()

3.- 実行権限を付与します。

chmod + x〜 / bin / tormon.py

4.- すべてが正常に機能することを確認します。

tormon.py -O〜 / torrents / -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"

注:に渡されたパラメーターを置き換えることを忘れないでください tormon.py あなたのニーズに合ったもので。 少なくとも、上記のコマンドでは、RSSフィードのURLを置き換える必要があります。

終了するには、crontabファイルの最後に空白行があることを確認してください。 理由はわかりませんが、すべてが正常に機能するためのcrontab要件です。

ファイルを保存して、テキストエディタを終了します。

注:exim4などの電子メール転送エージェントがインストールされている場合、MAILTO = USERの行は、tormon.pyの実行結果をemail.mailで送信するようにcrontabに指示します。


記事の内容は、次の原則に準拠しています。 編集倫理。 エラーを報告するには、 ここで.

7コメント、あなたのコメントを残してください

コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   ジャケウカラン

    幸いなことに、私は英語を知っています。 YaRSSでやりました。 それが機能するかどうかを確認します。

  2.   ジャケウカラン

    はい、かっこいいです。 しかし、FlexRSSの使用方法を説明する人は誰もいません。 あなたのページではそれはすべてとても素晴らしいですが、私はそれを大洪水に追加する方法を見つけていません...彼らはまた大洪水がデフォルトでXNUMXつ付属していると言います、そしてそれは真実ではありません。

    よろしく

  3.   ミケル・マイヨールi Tur

    Qbittorrentなどにはスケジューリングシステムが組み込まれています。 それぞれがどのように機能するかを説明するとよいでしょう。私は通常、MSWOSのマイクロトレントとLinuxのQbittorrentについて説明します。 ネタバレにはチュートリアルがありましたが、EZを追加するなど、人気のあるトレントプログラムごとにビデオを作成すると、きっと多くの訪問者が訪れるでしょう。

  4.   Linuxを使いましょう

    ありがとうミケル! あなたのコメントや提案のように、私はそれを考慮に入れます!
    私はあなたに大きな抱擁を送ります! ポール。

  5.   海草

    このプログラムを含むリポジトリは次のとおりです。
    https://launchpad.net/~lopeztobal/+archive/maths
    介しました: http://linuxmusica.com/

  6.   シャリク

    カーネルの使用について説教するのをやめ、オペレーティングシステムの使用を広めましょう!

  7.   Linuxを使いましょう

    ふふ...