Page 1 of 15

Autodownload script

Posted: November 3rd, 2008, 11:13 am
by popcornarsonist
I recently re-worked my automatic download system, writing it all in python this time. I don't like to use the default sabnzbd rss feeds, since it can't tell what I already have, so I worked up one that would only fill in episodes/movies that I'm missing. There are two ways of doing this:

Database
I don't like this, since it requires a full database of all your stuff, which is sometimes a bitch to populate, and it also requires that you add the database stuff into your post-processing script. This is why I went the route of:

Filesystem
I have all of my TV and Movies pretty well organized, so it's pretty easy to read straight from the file system. My TV is in the format
"BASE_DIRECTORY/SHOW_NAME/Season SEASON_NUMBER/SHOW_NAME - SEASON_NUMBERxEPSIODE_NUMBER - EPISODE_TITLE"
I imagine that a lot of you have your TV in the same format, so this script should be easily portable.

I'm uploading two scripts, here's a rundown on their functionality:

rss_tv.py:
http://pastebin.com/m7d0d3793
You'll need to update the script with some of your own information, namely:
-Your SABnzbd host:port info
-A newzbin RSS URL that will include all the TV you want (I just ran a search for shows in English, less than 450 MB, in divx or xvid.
-The path to your TV directory

With the correct information added, it will run through the feed, checking if you want any of the shows. This is decided based on wether you have a folder for that show, such as "BASE_TV_DIRECTORY/House". If the show is wanted, the script checks to see if you have that specific episode yet. If you don't, and the episode is not currently in the SABnzbd queue, it is added.

rss_movies:
http://pastebin.com/m24f8f3ab
You'll need to update the script with some of your own information, namely:
-Your SABnzbd host:port info
-A newzbin RSS URL that will include all the Movies you want (I just ran a search for movies in English, from 650-1600 MB, in divx or xvid.
-The path to your Movies directory

This script will run through the RSS feed and decide if the movie is "good". The logic I use is if the movie is over 8.0 on IMDB with over 1,000 votes, I won't mind downloading it. Of course, the script also checks to see if you have that movie yet, or if it's in the queue.

I set these to run on a schedule. The TV script runs every 10 minutes, while the movie script runs every few hours.

If anyone uses this, please let me know how it works for you, and if you have any recommendations. I just did this yesterday, so it's very much a work in progress, but it's worked great so far.

Re: Autodownload script

Posted: November 3rd, 2008, 11:46 am
by rAf
Thanks for sharing, it's a great idea !
I'll test it as soon as i can.

Re: Autodownload script

Posted: November 3rd, 2008, 4:26 pm
by zakharm
As I've started to use the RSS feature of SABnzbd more and more I've found myself wanting more functionality. Your scripts provide a great method for doing this, nice work!

My method was to create a PHP script that outputs an RSS feed that I have SAB checking every 60 minutes, but I like your method a lot better.

Re: Autodownload script

Posted: November 4th, 2008, 6:31 am
by JayBird
This looks great, will test it out when i get a minute

Re: Autodownload script

Posted: November 4th, 2008, 12:25 pm
by Flambard
This certainly looks like a good script, but would you mind explaining how to run it for those of us who are new here? I've done some browsing around, but can't seem to find how I'm supposed to make it work... I've changed all the entries I need to in the TV script, and have run the file using Python, but it seems to do nothing.

Any help would be appreciated  :)

Edit: for ease of testing, I have created a folder tvdir/House and confirmed there are episodes in the RSS link I put in the ini file...

Re: Autodownload script

Posted: November 6th, 2008, 6:22 pm
by popcornarsonist
Well, that's strange. Are you getting any errors from the script? It will only give you commandline feedback if there's something added into the queue If you don't get anything back, I'd recommend putting in some additional logging statements, which I've added into the following parts of the script:

Code: Select all

print("Testing: " + report)
if (isWanted(series) == 1) and (isMissing(series, season, episode) == 1) and (isInQueue(report) == 0):
                        msgid=node.getElementsByTagName("report:id")[0].childNodes[0].data
                        download(msgid)

Code: Select all

def isWanted(series_title):
        series_path = tv_dir + "/" + series_title
        if os.path.exists(series_path):
                return 1
                print("Is wanted")
        else:
                print("Is not wanted")
                return 0

Code: Select all

def isMissing(series_title, season_number, episode_number):
        regex_episode = re.compile(series_title + " - " + season_number + "x" + episode_number)
        if os.path.exists(tv_dir + "/" + series_title + "/Season " + season_number):
                for tested_episode in os.listdir(tv_dir + "/" + series_title + "/Season " + season_number):
                        if re.match(regex_episode, tested_episode):
                                print("Is not missing")
                                return 0
        print("Is missing")
        return 1
That should give you a better idea of why the script is failing.

Re: Autodownload script

Posted: November 8th, 2008, 8:17 pm
by frankhuzzah
Thanks for making this, once I get it tweaked and running I think this is going to be exactly the type of solution I was looking for.  I do have a couple problems/questions though.

First, I normally have my sabnzbd setup to use the built in username/password fuction.  It doesn't appear your script is able to pass the report ids through that.  When I have the password enabled and run the script it shows the correct missing episodes, but it doesn't download anything.  When I disable the password protection, however, it works perfectly.  Am I missing a setting or will your script simply not pass the protection?

Secondly, I've been running the scripts manually, but you said you have yours set to run on a schedule, is that through Sabnzbd or some other software?  Obviously with something like this automating is key.

Thanks again for all the hard work!

Re: Autodownload script

Posted: November 9th, 2008, 12:21 pm
by zakharm
frankhuzzah wrote: Secondly, I've been running the scripts manually, but you said you have yours set to run on a schedule, is that through Sabnzbd or some other software?  Obviously with something like this automating is key.
You can use cron to schedule the running of your scripts on Linux / Mac.  If you're on Windows, Windows Scheduler would do the trick.

Re: Autodownload script

Posted: November 9th, 2008, 12:56 pm
by frankhuzzah
zakharm wrote:You can use cron to schedule the running of your scripts on Linux / Mac.  If you're on Windows, Windows Scheduler would do the trick.
Thanks, I was doing a bunch of research last night and found Cron and finally got it setup the way I wanted here just now.  Works great.

Re: Autodownload script

Posted: November 9th, 2008, 11:32 pm
by interfacelift
I'm really impressed with the movies script. It's straightforward, yet very effective. I love how it uses the rating power of the masses to decide what to download.

I'd love to see one based on Rotten Tomatoes ratings instead of IMDB :-)

Re: Autodownload script

Posted: November 10th, 2008, 11:26 am
by Flambard
popcornarsonist wrote: Well, that's strange. Are you getting any errors from the script? It will only give you commandline feedback if there's something added into the queue If you don't get anything back, I'd recommend putting in some additional logging statements, which I've added into the following parts of the script:
Aha, thanks for the suggestion. I think I may know why it's failing now. I'm running this on a windows box, so the paths may not be resolving properly due to the "/" used as a folder seperator instead of the "" windows uses. Unfortunately when I changed these it broke the script with an error "EOL while scanning string literal" in this line:

Code: Select all

series_path = tv_dir + "" + series_title
As I know virtually nothing about Python, I have no idea how to resolve it...

Re: Autodownload script

Posted: November 10th, 2008, 11:53 am
by Flambard
I do however know how to use Google  ;)

I fixed my path issue with "\\" where necessary & the script now seems to be doing what it's supposed to (after fixing the other parts I needed to change to point to the correct IP address on my network...)

Thanks for your help!

Re: Autodownload script

Posted: November 10th, 2008, 9:40 pm
by popcornarsonist
First, I normally have my sabnzbd setup to use the built in username/password fuction.  It doesn't appear your script is able to pass the report ids through that.  When I have the password enabled and run the script it shows the correct missing episodes, but it doesn't download anything.  When I disable the password protection, however, it works perfectly.  Am I missing a setting or will your script simply not pass the protection?
Yeah, I don't have a username/password set up, but it's a simple change. You just need to ass another coupld of parameters to the download URL. So it should look something like this:

Code: Select all

http://host:port/sabnzbd/api?mode=addid&name="+report_id+"&cat="tv"&ma_username=USER&ma_password=PASSWORD
This stuff can be found in the manual: http://sabnzbd.wikidot.com/automation-support

Re: Autodownload script

Posted: November 10th, 2008, 11:26 pm
by frankhuzzah
popcornarsonist wrote:
Yeah, I don't have a username/password set up, but it's a simple change. You just need to ass another coupld of parameters to the download URL. So it should look something like this:

Code: Select all

http://host:port/sabnzbd/api?mode=addid&name="+report_id+"&cat="tv"&ma_username=USER&ma_password=PASSWORD
This stuff can be found in the manual: http://sabnzbd.wikidot.com/automation-support
Thanks a ton, I really love the TV show script.  It is exactly what I needed and works great.  I'll set the password portion back up when I get home from work.

Re: Autodownload script

Posted: November 11th, 2008, 5:30 pm
by Flambard
Both the TV & Movies scripts are working great for me now, but I do have one small problem with them. If the any part of the title pulled from the Newzbin RSS feeds has a colon in it, the script translates it somehow to a semicolon when creating the queue item. This in itself isn't a problem, but if the same show/movie comes up again, the same item gets added back to the queue as the script doesn't "see" it as a duplicate.

Is someone here knowledgeable enough with Python to strip out any colons & replace with something like a hyphen which is allowed as a filename so this doesn't happen? I'd love to do it myself, but as I said above, my Python skills are next to non-existent... =)

Other than this little issue, great scripts!