Hur man laddar ner din favoritserie automatiskt

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..

Obs: Innan vi börjar verkar det klokt att säga att det finns andra metoder för att uppnå samma resultat. Ett sätt att göra detta är att använda TED, men det finns också några torrentklienter som kommer med RSS-stöd (vilket gör allt mycket lättare). Det finns också andra manus (liknande den som visas nedan) som gör detsamma (och ännu bättre) ... Jag tänker till exempel på FlexRSS.

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"
Obs! Glöm inte att ersätta parametrarna som skickas till storm.py med de som passar dina behov. I det ovanstående kommandot måste du åtminstone ersätta webbadressen till RSS-flödet.

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.


Lägg till som prioriterad källa i Google