|
Dalam catatan lain, kami membincangkannya Pemuat turun Episod Torrent (TED), program yang sangat baik yang ditulis dalam Java yang membolehkan kami menambahkan siri kegemaran kami dan memuat turunnya secara automatik ketika bab-bab baru keluar.
Kaedah yang diterangkan dalam catatan ini merupakan alternatif kepada TED, yang mungkin menarik minat ramai antara anda. |
Kaedah ini melibatkan penciptaan tugasan berjadual yang menjalankan skrip Python pada selang masa yang tetap. Skrip ini memuat turun torrent melalui RSS. Banyak laman web muat turun torrent menawarkan pilihan ini, dengan ezRSS menjadi yang paling popular . Kelebihan menggunakan RSS untuk memuat turun torrent ialah ia membolehkan anda "melanggan" dan memuat turun torrent siri kegemaran anda apabila episod baharu dikeluarkan, sama seperti melanggan blog atau suapan berita.
Langkah-langkah untuk diikuti
1.- Pasang pakej python-beautifulsoup.
sudo apt-get pasang python-beautifulsoup
2. Buka editor teks kegemaran anda. Salin kod berikut ke dalamnya dan simpan fail dengan nama berikut: ~/bin/tormon.py
#! / usr / bin / env python
import urllib2, urlparse
dari urllib2 import HTTPError, URLError
dari BeautifulSoup import BeautifulSoup
mengimport anda
import opt ​​parse
__penggunaan __ = ""
tormon.py -O ~ / test / tormon -u "http: //rss.feed"
'' '
kelas Utama (objek):
'' '
tormon memeriksa suapan rss untuk torrent baru. Apabila menemui .torrent baru, ke
memuat turunnya ke direktori output yang ditentukan, di mana (mungkin) pemantauan
program torrent akan memuat turun fail yang sesuai.
'' '
def parse_options (diri):
use = 'use:% prog [options]' + __ penggunaan__
parser = optparse.OptionParser (penggunaan = penggunaan)
parser.add_option (
'-O', '--output_dir', dest = 'output_dir',
help = 'direktori di mana torrent baru disimpan',
metavar = 'DIR')
parser.add_option (
'-f', '--filetype', dest = 'filetype',
tindakan = 'tambah',
lalai = [],
help = 'jenis fail yang boleh diterima',
metavar = 'JENIS')
parser.add_option (
'-d', '--downloaded_torrents', dest = 'download_torrents',
lalai = os.path.expanduser ('~ / .downloaded_torrents'),
help = 'log torrents yang sudah dimuat turun',
metavar = 'FILE')
parser.add_option (
'-e', '--error_log', dest = 'error_log',
help = 'log torrents tormon gagal dimuat turun',
metavar = 'FILE')
parser.add_option (
'-b', '--batch', dest = 'batch',
help = 'fail yang mengandungi senarai url suapan rss',
metavar = 'FILE')
parser.add_option (
'-u', '--url', dest = 'url',
tindakan = 'tambah',
lalai = [],
help = 'url feed rss',
metavar = 'URL')
parser.add_option (
'-m', '- mark_all_downloaded', dest = 'mark_all_downloaded',
tindakan = 'store_true',
lalai = Salah,
help = "tandakan semua torrents seperti yang telah dimuat turun")
parser.add_option (
'-M', '- match_by_filename', dest = 'match_by_filename',
tindakan = 'store_true',
lalai = Salah,
help = "mengenali fail yang dimuat turun dengan nama fail, bukan URL. Memadankan dengan URL adalah lalai.")
(self.opt, args) = parser.parse_args ()
jika diri.opt.batch:
untuk baris dalam keadaan terbuka (self.opt.batch, 'r'):
line = line.strip ()
jika garis dan bukan garis.startswith ('#'):
self.opt.url.append (baris)
jika bukan diri.opt.output_dir:
self.opt.output_dir = os.path.expanduser ('~ / Desktop')
jika bukan diri.opt.filetype:
self.opt.filetype = ['. torrent'] jika tidak self.opt.error_log:
self.opt.error_log = self.opt.downloaded_torrents + '. kesalahan'
cuba:
os.makedirs (self.opt.output_dir)
kecuali OSError:
jika tidak os.path.exists (self.opt.output_dir):
cetak ('tormon gagal membuat direktori% s'% self.opt.output_dir)
jalan keluar (1)
def load_list_of_already_downloaded_torrents (diri):
cuba:
self.downloaded = open (self.opt.downloaded_torrents, 'r'). baca (). split ()
kecuali IOError:
self.downloaded = [] cuba:
self.errors = open (self.opt.error_log, 'r'). baca (). split ()
kecuali IOError:
self.errors = [] def update_downloaded (self, url):
self.downloaded.append (url)
cuba:
self.errors.remove (url)
kecuali ValueError:
lulus
def download_torrent (diri, url):
cuba:
stoking = urllib2.urlopen (url)
kecuali (HTTPError, URLError):
# cetak ('tormon gagal memuat turun% s'% url)
jika url tidak dalam diri. kesalahan:
self.errors.append (url)
lain:
nama fail = self.url2filename (url)
target_file = os.path.join (self.opt.output_dir, nama fail)
cetak ('Memuat turun% s'% target_file)
kandungan = sock.read ()
sock. tutup ()
fh = terbuka (target_file, 'w')
fh.write (kandungan)
tutup ()
self.update_downloaded (url)
def url2filename (diri, url):
kembali os.path.basename (urlparse.urlparse (url) [2])
def has_been_downloaded (diri, url):
jika diri.opt.match_by_filename:
nama fail = self.url2filename (url)
kembali (nama fail dalam [self.url2filename (link) untuk pautan dalam self.downloaded])
lain:
kembali (url dalam muat turun sendiri)
def parse_rss_feed (diri):
untuk url dalam diri.opt.url:
cetak ('RSS feed:% s'% url)
cuba:
stoking = urllib2.urlopen (url)
kecuali (HTTPError, URLError):
cetak ('tormon gagal memuat turun% s'% url)
lain:
kandungan = sock.read ()
sock. tutup ()
sup = BeautifulSoup (kandungan)
pautan = ([link.nextSibling untuk pautan dalam sup.findAll ('link')] +
[link ['href'] untuk pautan dalam sup.findAll ('a')] +
[pautan ['url'] untuk pautan dalam sup.findAll ('media: content')])
untuk pautan dalam pautan:
jika (ada ([link.lower (). endswith (berakhir)
kerana berakhir dengan self.opt.filetype])
dan tidak diri.has_been_downloaded (pautan)):
jika self.opt.mark_all_download:
cetak (Menandai pautan% s sebagai dimuat turun)
self.update_downloaded (pautan)
lain:
self.download_torrent (pautan)
def save_list_of_already_downloaded_torrents (diri):
fh = terbuka (self.opt.downloaded_torrents, 'w')
fh.write ('n'.join (self.downloaded))
tutup ()
fh = terbuka (self.opt.error_log, 'w')
fh.write ('n'.join (self.errors))
tutup ()
def __init __ (diri):
self.parse_options ()
self.load_list_of_already_downloaded_torrents ()
cuba:
self.parse_rss_feed ()
kecuali KeyboardInterrupt:
lulus
akhirnya:
self.save_list_of_already_downloaded_torrents ()
jika __nama __ == '__ main__':
Utama ()
3. Berikan kebenaran pelaksanaan.
chmod + x ~ / bin / tormon.py
4.- Pastikan semuanya berfungsi dengan baik.
tormon.py -O ~ / torrents / -u "http: //rss.feed"
Di tempat yang tertulis ~/torrents/ , anda perlu menggantikannya dengan laluan tempat anda ingin menyimpan torrent yang dimuat turun. Perlu diingat bahawa akan terdapat banyak fail .torrent.
Di tempat yang tertulis "http://rss.feed", anda perlu menggantikannya dengan URL suapan RSS siri kegemaran anda. Bagaimanakah caranya? Jika anda ingin menggunakan ezRSS , pergi ke laman utama dan taip nama siri tersebut. Senarai hasil carian yang besar akan muncul. Jika anda ingin memperhalusi carian anda (menapis mengikut tarikh, kualiti atau siapa yang merobek video tersebut), anda boleh melakukannya dengan mengikuti contoh yang dipaparkan dengan jelas pada halaman tersebut. Sebaik sahaja anda mendapat hasil carian yang anda cari, klik kanan pada pautan yang tertulis " Suapan RSS berasaskan carian" di sebelah butang suapan RSS berwarna oren yang menjadi ciri. Salin pautan tersebut dan tampalkannya, menggantikan http://rss.feed dalam contoh tersebut.
Beberapa data tambahan yang perlu diingat:
- Sekiranya parameter -O dihilangkan, fail .torrent akan dimuat turun ke Desktop.
- Sekiranya anda menjalankan perintah yang sama segera, ia tidak boleh memuat turun torrent baru, melainkan torrent baru telah ditambahkan ke RSS feed.
- Perintah ini membuat folder di mana torrents akan disimpan jika tidak ada.
- Senarai URL torrents yang berjaya dimuat akan disimpan dalam ~ / .downloaded_torrents.
- Untuk memantau lebih dari 1 suapan RSS, anda boleh menggunakan parameter -u. Contoh: tormon.py -u "http: //rss.feed1" -u "http: //rss.feed2"
5.- Jika semuanya berfungsi dengan baik, anda boleh menambah skrip sebagai tugasan crontab yang dijadualkan.
crontab -e
Perintah ini akan membuka penyunting teks.
Tampal kod berikut sehingga berada di awal fail:
PATH = / sbin: / bin: / usr / sbin: / usr / bin: / rumah / PENGGUNA / tong
MAILTO = PENGGUNA
Gantikan USER dengan nama pengguna anda.
Tampalkan kod berikut di bawah PATH=…
* / 15 * * * * tormon.py -u "http: //rss.feed"
Ini akan menjalankan skrip setiap 15 minit. Sudah tentu, anda boleh mengubahnya mengikut keperluan anda. Memandangkan kita berurusan dengan siri TV, adalah bijak untuk menjalankannya sekali seminggu. Jangan lupa untuk membaca catatan kami sebelum ini di mana kami menerangkan langkah demi langkah cara menambah tugasan pada crontab.
Dijalankan setiap hari Ahad jam 10 pagi:
00 10 * * 0 tormon.py -u "http: //rss.feed"
Untuk menyelesaikannya, pastikan terdapat garis kosong di hujung fail crontab. Saya tidak tahu mengapa tetapi ia adalah keperluan crontab agar semuanya berfungsi dengan baik.
Simpan fail dan keluar dari editor teks.
Nota: sekiranya anda memasang ejen pemindahan e-mel, seperti exim4, baris MAILTO = USER akan memberitahu crontab untuk menghantar hasil pelaksanaan tormon.py kepada anda melalui e-mel.