如何自动下载喜欢的系列

在另一篇文章中,我们谈到了 激流情节下载器(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 feed网址列表的文件',
            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的执行结果。


7条评论,留下您的评论

发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   杰卡库拉内

    好吧,我知道一些英语。 我用YaRSS做到了。 看看是否可行。

  2.   杰卡库拉内

    是的,很酷。 但是没有人解释如何使用FlexRSS。 在您的页面上,一切都非常好,但是我还没有找到将其添加到deluge的方法...他们还说Deluge默认附带一个,但这不是真的。

    问候

  3.   米克尔·马约尔·图尔

    Qbittorrent和其他人具有内置的调度系统。 最好解释一下它们各自的工作方式,我通常解释一下MS WOS的microtorrent和Linux的Qbittorrent。 在剧透中有一个教程,但是如果您使用每个受欢迎的torrent程序制作视频,当然可以得到很多访问,例如添加EZ

  4.   让我们使用Linux

    谢谢Miquel! 与您的所有评论和建议一样,我会考虑在内!
    我给你一个大大的拥抱! 保罗

  5.   海草

    这是包含此程序的存储库:
    https://launchpad.net/~lopeztobal/+archive/maths
    通过: http://linuxmusica.com/

  6.   沙里克

    停止鼓吹使用内核,并传播操作系统!

  7.   让我们使用Linux

    呵呵 ...