|
ในโพสต์อื่นเราได้พูดคุยเกี่ยวกับ Torrent ตอนดาวน์โหลด (TED)โปรแกรมที่ยอดเยี่ยมที่เขียนด้วย Java ที่ช่วยให้เราสามารถเพิ่มซีรีส์โปรดของเราและดาวน์โหลดโดยอัตโนมัติเมื่อมีบทใหม่ออกมา
วิธีที่อธิบายไว้ในโพสต์นี้เป็นอีกทางเลือกหนึ่งของ TED ซึ่งหลาย ๆ ท่านอาจจะสนใจ. |
วิธีนี้ประกอบด้วยการสร้างงานตามกำหนดเวลาที่รันสคริปต์ 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"
ในการดำเนินการให้เสร็จสิ้นให้ตรวจสอบว่ามีบรรทัดว่างที่ท้ายไฟล์ crontab ฉันไม่รู้ว่าทำไม แต่มันเป็นข้อกำหนดสำหรับ crontab เพื่อให้ทุกอย่างทำงานได้ดี
บันทึกไฟล์และออกจากโปรแกรมแก้ไขข้อความ
หมายเหตุ: ในกรณีที่คุณติดตั้งเอเจนต์การโอนอีเมลเช่น exim4 บรรทัด MAILTO = USER จะบอกให้ crontab ส่งผลลัพธ์ของการเรียกใช้ tormon.py ให้คุณทางอีเมล