|
I ett annat inlägg pratade vi om Torrent Episod Downloader (TED), ett utmärkt program skrivet i Java som låter oss lägga till våra favoritserier och ladda ner dem automatiskt när nya kapitel kommer ut.
Metoden som beskrivs i det här inlägget är ett alternativ till TED, som många av er förmodligen kommer att hitta intresse.. |
Metoden består av att skapa en schemalagd uppgift som kör ett python-skript så ofta. Det här skriptet laddar ner torrenterna via RSS. Många torrentnedladdningssidor tillåter detta alternativ, det mest populära ezRSS. Fördelen med att använda RSS för att ladda ner torrents är att det låter dig "prenumerera" och ladda ner torrents i din favoritserie när nya kapitel dyker upp. Precis som när du prenumererar på en blogg eller nyhetsflöde.
Stegen att följa
1.- Installera paketet python-vacker soppa.
sudo apt-get install python-beautifulsoup
2.- Öppna din favorittextredigerare. Kopiera följande kod till den och spara filen med följande namn: ~ / bin / tormon.py
#! / usr / bin / env python
importera urllib2, urlparse
från urllib2 importera HTTPError, URLError
från BeautifulSoup importera BeautifulSoup
import os
importera optparse
__användning __ = ''
tormon.py -O ~ / test / tormon -u "http: //rss.feed"
'' '
klass Main (objekt):
'' '
tormon kontrollerar ett RSS-flöde för nya torrenter. När den hittar en ny .torrent, till
laddar ner den till en angiven utdatakatalog, där (förmodligen) en övervakning
torrent-programmet hämtar motsvarande fil.
'' '
def parse_options (själv):
användning = 'användning:% prog [alternativ]' + __ användning__
parser = optparse.OptionParser (användning = användning)
parser.add_option (
'-O', '--output_dir', dest = 'output_dir',
help = 'katalog där nya torrenter sparas',
metavar = 'DIR')
parser.add_option (
'-f', '--filetype', dest = 'filtype',
action = 'append',
standard = [],
help = 'tillåtna filtyper',
metavar = 'TYPE')
parser.add_option (
'-d', '--downloaded_torrents', dest = 'downloaded_torrents',
standard = os.path.expanduser ('~ / .downloaded_torrents'),
help = 'logg över redan nedladdade torrenter',
metavar = 'FILE')
parser.add_option (
'-e', '--error_log', dest = 'error_log',
help = 'log of torrents tormon failed to download',
metavar = 'FILE')
parser.add_option (
'-b', '--batch', dest = 'batch',
help = 'fil som innehåller en lista med RSS-webbadresser',
metavar = 'FILE')
parser.add_option (
'-u', '--url', dest = 'url',
action = 'append',
standard = [],
help = 'url of the rss feed',
metavar = 'URL')
parser.add_option (
'-m', '- mark_all_downloaded', dest = 'mark_all_downloaded',
action = 'store_true',
default = False,
help = "markera alla torrents som redan nedladdade")
parser.add_option (
'-M', '- match_by_filename', dest = 'match_by_filename',
action = 'store_true',
default = False,
help = "känna igen nedladdade filer efter filnamn, inte URL. Matchning efter URL är standard.")
(self.opt, args) = parser.parse_args ()
om self.opt.batch:
för rad i öppen (self.opt.batch, 'r'):
line = line.strip ()
if line och inte line.startswith ('#'):
self.opt.url.append (rad)
om inte self.opt.output_dir:
self.opt.output_dir = os.path.expanduser ('~ / Desktop')
om inte self.opt.filetype:
self.opt.filetype = ['. torrent'] om inte self.opt.error_log:
self.opt.error_log = self.opt.downloaded_torrents + '. fel'
prova:
os.makedirs (self.opt.output_dir)
utom OSError:
om inte os.path.exists (self.opt.output_dir):
skriva ut ('tormon misslyckades med att skapa katalog% s'% self.opt.output_dir)
utgång (1)
def load_list_of_already_downloaded_torrents (själv):
prova:
self.downloaded = open (self.opt.downloaded_torrents, 'r'). läs (). split ()
utom IOError:
self.downloaded = [] försök:
self.errors = open (self.opt.error_log, 'r'). läs (). split ()
utom IOError:
self.errors = [] def update_downloaded (self, url):
self.downloaded.append (url)
prova:
self.errors.remove (url)
utom ValueError:
passera
def nedladdning_torrent (själv, url):
prova:
strumpa = urllib2.urlopen (url)
utom (HTTPError, URLError):
# print ('tormon kunde inte ladda ner% s'% url)
om webbadress inte är i självfel:
self.errors.append (url)
annan:
filnamn = self.url2filename (url)
target_file = os.path.join (self.opt.output_dir, filnamn)
skriva ut ('Hämtar% s'% målfil)
innehåll = sock.read ()
sock.close ()
fh = öppen (målfil, 'w')
fh.write (innehåll)
fh.close ()
self.update_downloaded (url)
def url2filnamn (själv, url):
returnera os.path.basename (urlparse.urlparse (url) [2])
def has_been_downloaded (själv, url):
om self.opt.match_by_filename:
filnamn = self.url2filename (url)
returnera (filnamn i [self.url2filename (länk) för länk i self.downloaded])
annan:
returnera (url i självdownloaded)
def parse_rss_feed (själv):
för url i self.opt.url:
skriv ut ('RSS-flöde:% s'% url)
prova:
strumpa = urllib2.urlopen (url)
utom (HTTPError, URLError):
skriva ut ('tormon misslyckades med att ladda ner% s'% url)
annan:
innehåll = sock.read ()
sock.close ()
soppa = BeautifulSoup (innehåll)
länkar = ([link.nextSibling för länk i soppa.findAll ('länk')] +
[länk ['href'] för länk i soup.findAll ('a')] +
[länk ['url'] för länk i soup.findAll ('media: content')])
för länk i länkar:
if (any ([link.lower (). slutar med (slutar))
för att sluta med self.opt.filetype])
och inte själv.has_been_downloaded (länk)):
om self.opt.mark_all_downloaded:
skriv ut ('Markera% s som nedladdad'% länk)
self.update_downloaded (länk)
annan:
self.download_torrent (länk)
def save_list_of_already_downloaded_torrents (self):
fh = öppen (self.opt.downloaded_torrents, 'w')
fh.write ('n'.join (själv nedladdad))
fh.close ()
fh = öppen (self.opt.error_log, 'w')
fh.write ('n'.join (självfel))
fh.close ()
def __init __ (själv):
self.parse_options ()
self.load_list_of_already_downloaded_torrents ()
prova:
self.parse_rss_feed ()
utom KeyboardInterrupt:
passera
till sist:
self.save_list_of_already_downloaded_torrents ()
om __namn __ == '__ main__':
Main ()
3.- Bevilja körningstillstånd.
chmod + x ~ / bin / tormon.py
4.- Kontrollera att allt fungerar bra.
tormon.py -O ~ / torrents / -u "http: //rss.feed"
Var säger ~ / torrents /måste du ersätta den med sökvägen där du vill spara de nedladdade torrenterna. Tänk på att det kommer att finnas många .torrent-filer.
Där det står "http: //rss.feed", måste du ersätta det med webbadressen till RSS-flödet för din favoritserie. Hur man får tag på det? Om du vill använda det ezRSS, Jag gick till huvudsidan och skrev seriens namn. En enorm lista kommer att visas med resultaten. Om du vill förfina din sökning (filtreringsdatum, kvalitet eller person som rippade videon) kan du göra det genom att vägleda dig med de exempel som tydligt publiceras på den sidan. När du har fått de resultat du letar efter högerklickar du på länken som säger Sökbaserat RSS-flöde som visas bredvid den orange knappkaraktäristiken för RSS-flöden. Kopiera länken och klistra in den http://rss.feed av exemplet.
Några extra data att tänka på:
- Om -O-parametern utelämnas laddas ned .torrent-filerna till skrivbordet.
- Om du kör samma kommando direkt därefter bör det inte ladda ner någon ny torrent, såvida inte en ny torrent har lagts till i RSS-flödet.
- Detta kommando skapar den mapp där torrents sparas om den inte finns.
- En lista över nedladdade torrent-URL: er sparas i ~ / .downloaded_torrents.
- För att övervaka mer än 1 RSS-flöde kan du använda parametern -u. Exempel: tormon.py -u "http: //rss.feed1" -u "http: //rss.feed2"
5.- Om allt fungerar bra kan du lägga till skriptet som en planerad uppgift för crontab.
crontab -e
Detta kommando öppnar en textredigerare.
Klistra in följande kod så att den är i början av filen:
PATH = / sbin: / bin: / usr / sbin: / usr / bin: / home / USER / bin
MAILTO = ANVÄNDARE
Förändra ANVÄNDARE med ditt användarnamn.
Klistra in följande kod någonstans nedan PATH = ...
* / 15 * * * * tormon.py -u "http: //rss.feed"
Detta kör skriptet var 15: e minut. Visst, du kan ändra det för att passa dina behov. När det gäller tv-serier kan det vara klokt att köra den en gång i veckan. Glöm inte att läsa vårt tidigare inlägg där vi förklarar steg för steg hur man lägger till uppgifter i crontab.
Att köra den varje söndag klockan 10:
00 10 * * 0 tormon.py -u "http: //rss.feed"
För att avsluta, se till att det finns en tom rad i slutet av crontab-filen. Jag vet inte varför men det är ett crontab-krav att allt ska fungera bra.
Spara filen och avsluta textredigeraren.
Obs! Om du har en mailöverföringsagent installerad, till exempel exim4, kommer raden MAILTO = USER att säga till crontab att skicka resultaten av utförandet av tormon.py i en e-post. post.