วิธีดาวน์โหลดซีรีส์ที่คุณชื่นชอบโดยอัตโนมัติ

ในโพสต์อื่นเราได้พูดคุยเกี่ยวกับ Torrent ตอนดาวน์โหลด (TED)โปรแกรมที่ยอดเยี่ยมที่เขียนด้วย Java ที่ช่วยให้เราสามารถเพิ่มซีรีส์โปรดของเราและดาวน์โหลดโดยอัตโนมัติเมื่อมีบทใหม่ออกมา

วิธีที่อธิบายไว้ในโพสต์นี้เป็นอีกทางเลือกหนึ่งของ TED ซึ่งหลาย ๆ ท่านอาจจะสนใจ.

หมายเหตุ: ก่อนที่เราจะเริ่มดูเหมือนจะรอบคอบที่จะบอกว่ามีวิธีการอื่น ๆ เพื่อให้ได้ผลลัพธ์เช่นเดียวกัน วิธีหนึ่งในการทำเช่นนี้คือการใช้ TED แต่ยังมีไคลเอนต์ torrent บางตัวที่มาพร้อมกับการรองรับ RSS (ซึ่งทำให้ทุกอย่างง่ายขึ้นมาก) นอกจากนี้ยังมีสคริปต์อื่น ๆ (คล้ายกับที่แสดงด้านล่าง) ที่ทำเหมือนกัน (และดียิ่งขึ้น) …ฉันกำลังคิดว่า FlexRSS

วิธีนี้ประกอบด้วยการสร้างงานตามกำหนดเวลาที่รันสคริปต์ python ทุก ๆ ครั้ง สคริปต์นี้ดาวน์โหลดเพลงผ่าน RSS ไซต์ดาวน์โหลด torrent จำนวนมากอนุญาตให้ใช้ตัวเลือกนี้ซึ่งเป็นที่นิยมมากที่สุด ezRSS. ข้อดีของการใช้ RSS เพื่อดาวน์โหลดทอร์เรนต์คือช่วยให้คุณสามารถ "สมัคร" และดาวน์โหลดเพลงของซีรีส์โปรดของคุณได้เมื่อมีบทใหม่ปรากฏขึ้น เช่นเดียวกับเมื่อคุณสมัครรับข้อมูลบล็อกหรือฟีดข่าว

ขั้นตอนในการติดตาม

1.- ติดตั้งแพคเกจ หลามสวยซุป.

sudo apt-get ติดตั้ง 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 สำหรับ torrents ใหม่ เมื่อพบ. torrent ใหม่ถึง
    ดาวน์โหลดไปยังไดเร็กทอรีเอาต์พุตที่ระบุโดยที่ (น่าจะเป็น) การมอนิเตอร์
    โปรแกรม torrent จะดาวน์โหลดไฟล์ที่เกี่ยวข้อง    
    '' '
    def parse_options (ตัวเอง):
        การใช้งาน = 'การใช้งาน:% prog [ตัวเลือก]' + __ การใช้งาน __
        parser = optparse.OptionParser (การใช้งาน = การใช้งาน)
        parser.add_option (
            '-O', '--output_dir', dest = 'output_dir',
            help = 'ไดเร็กทอรีที่บันทึก torrents ใหม่',
            metavar = 'DIR')
        parser.add_option (
            '-f', '--filetype', dest = 'filetype',
            การกระทำ = 'ผนวก',
            ค่าเริ่มต้น = [],
            help = 'ประเภทไฟล์ที่ยอมรับได้',
            metavar = 'TYPE')
        parser.add_option (
            '-d', '--downloaded_torrents', dest = 'download_torrents',
            เริ่มต้น = os.path.expanduser ('~ / .downloaded_torrents'),
            help = 'บันทึกของเพลงที่ดาวน์โหลดแล้ว',
            metavar = 'FILE')
        parser.add_option (
            '-e', '--error_log', dest = 'error_log',
            help = 'log of torrents tormon ไม่สามารถดาวน์โหลดได้',
            metavar = 'FILE')
        parser.add_option (
            '-b', '- แบทช์', dest = 'แบทช์',
            help = 'ไฟล์ที่มีรายการ URL ฟีด rss',
            metavar = 'FILE')
        parser.add_option (
            '-u', '--url', dest = 'url',
            การกระทำ = 'ผนวก',
            ค่าเริ่มต้น = [],
            help = 'url ของฟีด rss',
            metavar = 'URL')
        parser.add_option (
            '-m', '- mark_all_downloaded', dest = 'mark_all_downloaded',
            การกระทำ = 'store_true',
            default = เท็จ
            help = "ทำเครื่องหมายเพลงทั้งหมดว่าดาวน์โหลดแล้ว")
        parser.add_option (
            '-M', '- match_by_filename', dest = 'match_by_filename',
            การกระทำ = 'store_true',
            default = เท็จ
            help = "รู้จักไฟล์ที่ดาวน์โหลดโดยใช้ชื่อไฟล์ไม่ใช่ URL การจับคู่ตาม URL เป็นค่าเริ่มต้น")        
        (self.opt, args) = parser.parse_args ()
        ถ้า self.opt.batch:
            สำหรับบรรทัดใน open (self.opt.batch, 'r'):
                บรรทัด = line.strip ()
                ถ้าบรรทัดไม่ใช่ line.startswith ('#'):
                    self.opt.url.append (บรรทัด)
        ถ้าไม่ใช่ self.opt.output_dir:
            self.opt.output_dir = os.path.expanduser ('~ / เดสก์ท็อป')
        ถ้าไม่ใช่ self.opt.filetype:
            self.opt.filetype = ['. torrent'] ถ้าไม่ใช่ 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):
                พิมพ์ ('tormon ไม่สามารถสร้างไดเร็กทอรี% s'% self.opt.output_dir)
                ทางออก (1)
    def load_list_of_already_downloaded_torrents (ตัวเอง):
        ลอง:
            self.downloaded = เปิด (self.opt.downloaded_torrents, 'r'). read (). split ()
        ยกเว้น IOError:
            self.downloaded = [] ลอง:
            self.errors = เปิด (self.opt.error_log, 'r') อ่าน (). split ()
        ยกเว้น IOError:
            self.errors = [] def update_downloaded (self, url):
        self.downloaded.append (url)
        ลอง:
            self.errors.remove (url)
        ยกเว้น ValueError:
            ส่ง        
    def download_torrent (ตัวเอง, url):
        ลอง:
            ถุงเท้า = urllib2.urlopen (url)
        ยกเว้น (HTTPError, URLError):
            # พิมพ์ ('tormon ไม่สามารถดาวน์โหลด% s'% url)
            หาก url ไม่อยู่ใน self.errors:
                self.errors.append (url)
        อื่น:
            ชื่อไฟล์ = self.url2filename (url)
            target_file = os.path.join (self.opt.output_dir, ชื่อไฟล์)
            พิมพ์ ('กำลังดาวน์โหลด% s'% target_file)
            เนื้อหา = sock.read ()
            sock.close ()
            fh = เปิด (target_file, 'w')
            fh.write (เนื้อหา)
            ฉ. ปิด ()
            self.update_downloaded (url)
    def url2filename (ตัวเอง, url):
        ส่งคืน 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) สำหรับลิงค์ใน self.downloaded])
        อื่น:
            return (url ใน self.downloaded)
    def parse_rss_feed (ตัวเอง):
        สำหรับ url ใน self.opt.url:
            พิมพ์ ('RSS feed:% s'% url)
            ลอง:
                ถุงเท้า = urllib2.urlopen (url)
            ยกเว้น (HTTPError, URLError):
                พิมพ์ ('tormon ไม่สามารถดาวน์โหลด% s'% url)
            อื่น:
                เนื้อหา = sock.read ()
                sock.close ()
                ซุป = BeautifulSoup (เนื้อหา)
                ลิงค์ = ([link.nextSibling สำหรับลิงค์ใน soup.findAll ('link')] +
                       [link ['href'] สำหรับลิงค์ใน soup.findAll ('a')] +
                       [link ['url'] สำหรับลิงค์ใน soup.findAll ('media: content')])
                สำหรับลิงค์ในลิงค์:
                    ถ้า (ใด ๆ ([link.lower (). endwith (ตอนจบ)
                             สำหรับการลงท้ายด้วย 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 (self.downloaded))
        ฉ. ปิด ()
        fh = เปิด (self.opt.error_log, 'w')
        fh.write ('n'.join (self.errors))
        ฉ. ปิด ()
    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 ~ / torrents / -u "http: //rss.feed"

ที่ไหนเอ่ย ~ / torrents /คุณต้องแทนที่ด้วยเส้นทางที่คุณต้องการบันทึกเพลงที่ดาวน์โหลดมา โปรดทราบว่าจะมีไฟล์. torrent จำนวนมาก

โดยระบุว่า "http: //rss.feed" คุณต้องแทนที่ด้วย URL ของฟีด RSS ของซีรีส์โปรด จะเอายังไง? ในกรณีที่คุณต้องการใช้ ezRSSฉันไปที่หน้าหลักและเขียนชื่อซีรีส์ รายการขนาดใหญ่จะปรากฏขึ้นพร้อมกับผลลัพธ์ ในกรณีที่คุณต้องการปรับแต่งการค้นหาของคุณ (วันที่กรองคุณภาพหรือบุคคลที่ฉีกวิดีโอ) คุณสามารถทำได้โดยแนะนำตัวอย่างที่มีการเผยแพร่อย่างชัดเจนในหน้านั้น เมื่อคุณได้ผลลัพธ์ที่ต้องการแล้วให้คลิกขวาที่ลิงค์ที่ระบุ ฟีด RSS ตามการค้นหา ที่ปรากฏถัดจากลักษณะปุ่มสีส้มของฟีด RSS คัดลอกลิงค์และวางแทนที่ไฟล์ http://rss.feed ของตัวอย่าง

ข้อมูลเพิ่มเติมที่ควรทราบ:

  • หากไม่ใส่พารามิเตอร์ -O ไฟล์. torrent จะถูกดาวน์โหลดไปยังเดสก์ท็อป
  • หากคุณเรียกใช้คำสั่งเดียวกันในทันทีหลังจากนั้นก็ไม่ควรดาวน์โหลดทอร์เรนต์ใหม่เว้นแต่จะมีการเพิ่มทอเรนต์ใหม่ลงในฟีด RSS
  • คำสั่งนี้จะสร้างโฟลเดอร์ที่จะบันทึก torrents หากไม่มีอยู่
  • รายการ URL ของเพลงที่ดาวน์โหลดสำเร็จจะถูกบันทึกไว้ใน ~ / .downloaded_torrents
  • หากต้องการตรวจสอบฟีด RSS มากกว่า 1 รายการคุณสามารถใช้พารามิเตอร์ -u ตัวอย่าง: tormon.py -u "http: //rss.feed1" -u "http: //rss.feed2"

5.- หากทุกอย่างทำงานได้ดีคุณสามารถเพิ่มสคริปต์เป็นงานที่กำหนดเวลาไว้ของ crontab ได้

crontab -e

คำสั่งนี้จะเปิดโปรแกรมแก้ไขข้อความ

วางรหัสต่อไปนี้เพื่อให้อยู่ที่จุดเริ่มต้นของไฟล์:

PATH = / 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"
หมายเหตุ: อย่าลืมแทนที่พารามิเตอร์ที่ส่งไป storm.py กับสิ่งที่เหมาะกับความต้องการของคุณ อย่างน้อยที่สุดในคำสั่งด้านบนคุณจะต้องแทนที่ URL ของฟีด RSS

ในการดำเนินการให้เสร็จสิ้นให้ตรวจสอบว่ามีบรรทัดว่างที่ท้ายไฟล์ crontab ฉันไม่รู้ว่าทำไม แต่มันเป็นข้อกำหนดสำหรับ crontab เพื่อให้ทุกอย่างทำงานได้ดี

บันทึกไฟล์และออกจากโปรแกรมแก้ไขข้อความ

หมายเหตุ: ในกรณีที่คุณติดตั้งเอเจนต์การโอนอีเมลเช่น exim4 บรรทัด MAILTO = USER จะบอกให้ crontab ส่งผลลัพธ์ของการเรียกใช้ tormon.py ให้คุณทางอีเมล


เพิ่มเป็นแหล่งข้อมูลที่ต้องการใน Google