如何自動下載喜歡的系列

在另一篇文章中,我們談到了 激流情節下載器(TED),這是一個用Java編寫的優秀程序,它使我們可以添加自己喜歡的系列,並在出現新章節時自動下載它們。

這篇文章中描述的方法是TED的替代方法,許多人可能會感興趣。.

注意:在開始之前,應該謹慎地說還有其他方法可以達到相同的結果。 一種方法是使用TED,但也有一些Torrent客戶端附帶RSS支持(這使一切變得容易得多)。 另外,還有其他腳本(類似於下面顯示的腳本)可以做到相同(甚至更好)……例如,我在考慮FlexRSS。

該方法包括創建一個計劃任務,該任務每隔一段時間運行一次python腳本。 該腳本通過RSS下載種子文件。 許多torrent下載網站都允許使用此選項,最受歡迎的是 易RSS。 使用RSS下載種子的好處是,當出現新章節時,它允許您“訂閱”和下載您喜歡的系列的種子。 就像您訂閱博客或新聞提要一樣。

遵循的步驟

1。 - 安裝套件 蟒蛇美女湯.

須藤apt-get install python-beautifulsoup

2。 - 打開您喜歡的文本編輯器。 將以下代碼複製到其中,並使用以下名稱保存文件: 〜/ bin / tormon.py

#!/ usr / bin / env python

導入urllib2,urlparse
從urllib2導入HTTPError,URLError
從BeautifulSoup進口BeautifulSoup
進口口
導入optparse

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

主類(對象):
    '''
    tormon檢查rss feed中是否有新種子。 找到新的.torrent時,
    將其下載到指定的輸出目錄,在該目錄中(可能是)監視
    種子文件下載程序將下載相應的文件。    
    '''
    def parse_options(個體):
        用法='用法:%編[選項]'+ __用法__
        解析器= 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 ='FILE')
        parser.add_option(
            '-e','-error_log',dest ='error_log',
            help ='torrent tormon下載失敗的日誌,'
            metavar ='FILE')
        parser.add_option(
            '-b','--batch',dest ='batch',
            help ='包含RSS供稿網址列表的文件',
            metavar ='FILE')
        parser.add_option(
            '-u','-url',dest ='url',
            動作=“追加”,
            默認= [],
            help ='rss feed的網址',
            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而不是line.startswith('#'):
                    self.opt.url.append(行)
        如果不是self.opt.output_dir:
            self.opt.output_dir = os.path.expanduser('〜/桌面')
        如果不是self.opt.filetype:
            如果不是self.opt.error_log,則self.opt.filetype = ['。torrent']:
            self.opt.error_log = self.opt.downloaded_torrents +'。錯誤'
        嘗試:
            os.makedirs(self.opt.output_dir)
        除了OSError:
            如果不是os.path.exists(self.opt.output_dir):
                打印('tormon無法創建目錄%s'%self.opt.output_dir)
                出口(1)
    def load_list_of_already_downloaded_torrents(個體):
        嘗試:
            self.downloaded =打開(self.opt.downloaded_torrents,'r')。讀()。拆分()
        除了IOError:
            self.downloaded = []嘗試:
            self.errors =打開(self.opt.error_log,'r')。read()。split()
        除了IOError:
            self.errors = [] def update_downloaded(self,url):
        self.downloaded.append(網址)
        嘗試:
            self.errors.remove(URL)
        除了ValueError:
            通過        
    def download_torrent(自我,網址):
        嘗試:
            襪子= urllib2.urlopen(URL)
        除了(HTTPError,URLError):
            #打印(“ tormon無法下載%s'%url)
            如果網址不在self.errors中:
                self.errors.append(URL)
        其他:
            文件名= self.url2文件名(URL)
            target_file = os.path.join(self.opt.output_dir,文件名)
            打印(“正在下載%s”%target_file)
            內容= sock.read()
            sock.close()
            fh =打開(target_file,“ w”)
            fh.write(內容)
            fh.close()
            self.update_downloaded(網址)
    def url2filename(自己,網址):
        返回os.path.basename(urlparse.urlparse(url)[2])
    def has_been_downloaded(自己,網址):
        如果self.opt.match_by_filename:
            文件名= self.url2文件名(URL)
            返回([self.url2filename(鏈接)中的文件名,用於self.downloaded中的鏈接))
        其他:
            返回(self.download中的URL)
    def parse_rss_feed(個體):
        對於self.opt.url中的url:
            打印(“ RSS供稿:%s”%url)
            嘗試:
                襪子= urllib2.urlopen(URL)
            除了(HTTPError,URLError):
                打印(“ tormon無法下載%s'%url)
            其他:
                內容= sock.read()
                sock.close()
                湯= BeautifulSoup(內容)
                鏈接=([[link.nextSibling為湯中的鏈接。findAll('鏈接')] +
                       [鏈接['href']鏈接到soup.findAll('a')] +
                       [soup.findAll中的鏈接的鏈接['url']('media:content')])
                對於鏈接中的鏈接:
                    if(任何([link.lower()。結尾於(結束)
                             以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(個體):
        fh =打開(self.opt.downloaded_torrents,“ w”)
        fh.write('n'.join(自行下載))
        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 feed的URL替換它。 如何獲得? 好吧,如果你想使用 易RSS,我轉到主頁並寫下了該系列的名稱。 結果將顯示一個巨大的列表。 如果您想優化搜索(過濾日期,質量或翻錄視頻的人),則可以通過在該頁面上清晰發布的示例進行指導來實現。 獲得所需的結果後,右鍵單擊顯示以下內容的鏈接 基於搜索的RSS提要 出現在RSS Feed的橙色按鈕特徵旁邊。 複製鏈接並將其粘貼替換為 http://rss.feed 的例子。

注意一些額外的數據:

  • 如果省略-O參數,則.torrent文件將下載到桌面。
  • 如果之後立即運行相同的命令,則除非下載了新的Torrent,否則它不應下載任何新的Torrent。
  • 如果不存在種子,此命令將創建用於保存種子的文件夾。
  • 成功下載的種子的URL列表將保存在〜/ .downloaded_torrents中。
  • 要監視多個RSS提要,可以使用-u參數。 示例:tormon.py -u“ http://rss.feed1” -u“ http://rss.feed1”

5。 - 如果一切正常,則可以將腳本添加為crontab計劃任務。

crontab -e命令

該命令將打開一個文本編輯器。

粘貼以下代碼,使其位於文件的開頭:

PATH = / sbin:/ bin:/ usr / sbin:/ usr / bin:/ home / USER / bin
MAILTO = USER

更改 USER 通過您的用戶名。

將以下代碼粘貼到下面的某個位置 路徑=…

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

這將每15分鐘運行一次腳本。 當然,您可以根據需要進行更改。 對於電視連續劇,每週運行一次可能是明智的選擇。 不要忘記閱讀我們的上一篇文章,其中我們將逐步解釋 如何將任務添加到crontab.

要在每個星期日的上午10點運行它:

00 10 * * 0 tormon.py -u“ http://rss.feed”
注意:不要忘記替換傳遞給 tomon.py 與那些適合您的需求。 至少在上述命令中,您將必須替換RSS feed的URL。

最後,請確保crontab文件末尾有空白行。 我不知道為什麼,但這是所有工作正常的crontab要求。

保存文件並退出文本編輯器。

注意:如果您安裝了電子郵件傳輸代理,例如exim4,則MAILTO = USER行將告訴crontab在電子郵件中向您發送tormon.py的執行結果。


在 Google 中將其新增為首選來源