|
在另一篇文章中,我們談到了 激流情節下載器(TED),這是一個用Java編寫的優秀程序,它使我們可以添加自己喜歡的系列,並在出現新章節時自動下載它們。
這篇文章中描述的方法是TED的替代方法,許多人可能會感興趣。. |
該方法包括創建一個計劃任務,該任務每隔一段時間運行一次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”
最後,請確保crontab文件末尾有空白行。 我不知道為什麼,但這是所有工作正常的crontab要求。
保存文件並退出文本編輯器。
注意:如果您安裝了電子郵件傳輸代理,例如exim4,則MAILTO = USER行將告訴crontab在電子郵件中向您發送tormon.py的執行結果。