Creating An Overly Simple RSS downloader in Python

February 16th, 2010 by Alan MacGregor Leave a reply »

I Wrote this script the other day as I was getting more and more annoyed that my version of uTorrent wouldn’t download torrents from torrentbytes for reasons that I still am not sure of. Because of this I created a new script that fits my purpose.

The script is written for the TorrentBytes tracker but you should be able to modify the code to work on other sites too. Anyway here it is

#!/usr/bin/python

#######################################
# RSS Downloader for torrenbytes
# Programmed by Alan MacGregor
#######################################
import os
import sys
from commands import getoutput

###Get Arguments
option = ""
if len(sys.argv) > 1:
 if sys.argv[1] == "-c":
  option =  "check"
 elif sys.argv[1] == "-d":
  option = "download"
else:
 option = "default"

###User Required Variables
cookie_file   = "/home/alan/rss_downloaders/.lynx_cookies"
search_filter = "TV.Show.*720p|" + \
                "Other.TV.Show"
watch_folder  = "/torrent/watch/"
prev_down_loc = "/home/alan/rss_downloaders/torrentbytes_downloaded"
tb_passkey    = "##########################"
tb_username   = "##########################"

def downloadtorrent(torrent_name, link):
 os.system('wget -q --referer=http://www.torrentbytes.net/login.php --cookies=on --load-cookies="' + cookie_file + '" ' + \
           '--keep-session-cookies --save-cookies="' + cookie_file + '" "' + link + '"  -O ' + watch_folder + torrent_name)
 os.system('echo "' + torrent_name + '" >> "' + prev_down_loc + '"')

if option == "download":

 downloadtorrent("Manually_Downloaded_Torrent_File.torrent", sys.argv[2])
 sys.exit()



###Initialise Variables
listoftorrents = ""
previously_downloaded = getoutput('cat ' + prev_down_loc)
rss_feed              = getoutput('curl "http://www.torrentbytes.net/rss.php?passkey=' + tb_passkey + \
                                  '&username=' + tb_username + '&direct" | grep guid').replace("&amp;","&").split("<link>")



for torrent in rss_feed[1:]:
 torrent = torrent.split("</link>")[0].split("\r")

 #fix issue with curl data
 if len(torrent) > 1:
  torrent = torrent[0] + torrent[1].split("\n")[len(torrent) -1]
 else:
  torrent = torrent[0]

 if option == "check":
  print torrent.split("=")[2]

 episodes = search_filter.split("|")
 for episode in episodes:
  items = episode.split("*")
  found = "true"

  for filter in items:
   if filter not in torrent:
    found = "false"

  # Display torrent if all items are matched
  if found == "true":
   listoftorrents = listoftorrents + "|" + torrent

for link in listoftorrents[1:].split("|"):
 if len(link) > 0:
  torrent_name = link.split("&name=")[1]
  if option == "default":
   if torrent_name not in previously_downloaded:
    downloadtorrent(torrent_name)
    print "Downloaded:         " + torrent_name
   else:
    print "Already Downloaded: " + torrent_name
 else:
  print "No Torrents Found in Query"

All you have to do is modify the “###User Required Variables” section along with the cookie file and you should be set. I’d love to here what sites you’ve gotten this to work on plus if you can see where my code might have tried to join the failbus then please leave comments :)

Advertisement

Leave a Reply