nzbToMedia/autoProcessMovie.py
2013-02-06 01:32:25 -08:00

153 lines
4.7 KiB
Python

import sys
import urllib
import os.path
import shutil
import ConfigParser
import time
import json
from pprint import pprint
class AuthURLOpener(urllib.FancyURLopener):
def __init__(self, user, pw):
self.username = user
self.password = pw
self.numTries = 0
urllib.FancyURLopener.__init__(self)
def prompt_user_passwd(self, host, realm):
if self.numTries == 0:
self.numTries = 1
return (self.username, self.password)
else:
return ('', '')
def openit(self, url):
self.numTries = 0
return urllib.FancyURLopener.open(self, url)
def process(dirName, nzbName=None, status=0):
status = int(status)
config = ConfigParser.ConfigParser()
configFilename = os.path.join(os.path.dirname(sys.argv[0]), "autoProcessMedia.cfg")
print "Loading config from", configFilename
if not os.path.isfile(configFilename):
print "ERROR: You need an autoProcessMedia.cfg file - did you rename and edit the .sample?"
sys.exit(-1)
config.read(configFilename)
host = config.get("CouchPotato", "host")
port = config.get("CouchPotato", "port")
username = config.get("CouchPotato", "username")
password = config.get("CouchPotato", "password")
apikey = config.get("CouchPotato", "apikey")
delay = float(config.get("CouchPotato", "delay"))
method = config.get("CouchPotato", "method")
delete_failed = int(config.get("CouchPotato", "delete_failed"))
try:
ssl = int(config.get("CouchPotato", "ssl"))
except (ConfigParser.NoOptionError, ValueError):
ssl = 0
try:
web_root = config.get("CouchPotato", "web_root")
except ConfigParser.NoOptionError:
web_root = ""
myOpener = AuthURLOpener(username, password)
nzbName1 = str(nzbName)
if ssl:
protocol = "https://"
else:
protocol = "http://"
# don't delay when we are calling this script manually.
if nzbName == "Manual Run":
delay = 0
if status == 0:
if method == "manage":
command = "manage.update"
else:
command = "renamer.scan"
url = protocol + host + ":" + port + web_root + "/api/" + apikey + "/" + command
print "waiting for", str(delay), "seconds to allow CPS to process newly extracted files"
time.sleep(delay)
print "Opening URL:", url
try:
urlObj = myOpener.openit(url)
except IOError, e:
print "Unable to open URL: ", str(e)
sys.exit(1)
result = json.load(urlObj)
print "CouchPotatoServer returned", result
if result['success']:
print command, "started on CouchPotatoServer for", nzbName1
else:
print "Error", command, "has NOT started on CouchPotatoServer for", nzbName1
else:
print "download of", nzbName1, "has failed."
print "trying to re-cue the next highest ranked release"
a=nzbName1.find('.cp(')+4
b=nzbName1[a:].find(')')+a
imdbid=nzbName1[a:b]
#print imdbid
url = protocol + host + ":" + port + web_root + "/api/" + apikey + "/movie.list"
print "Opening URL:", url
try:
urlObj = myOpener.openit(url)
except IOError, e:
print "Unable to open URL: ", str(e)
sys.exit(1)
n=0
result = json.load(urlObj)
movieid = [item["id"] for item in result["movies"]]
library = [item["library"] for item in result["movies"]]
identifier = [item["identifier"] for item in library]
for index in range(len(movieid)):
if identifier[index] == imdbid:
movid = str(movieid[index])
print "found movie id", movid, "in database for release", nzbName1
n = n + 1
break
if n == 0:
print "cound not find a movie in the database for release", nzbName1
print "please manually ignore this release and refresh the wanted movie"
print "exiting postprocessing script"
sys.exit(1)
url = protocol + host + ":" + port + web_root + "/api/" + apikey + "/searcher.try_next/?id=" + movid
print "Opening URL:", url
try:
urlObj = myOpener.openit(url)
except IOError, e:
print "Unable to open URL: ", str(e)
sys.exit(1)
result = urlObj.readlines()
for line in result:
print line
print "movie", movid, "set to try the next best release on CouchPotatoServer"
if delete_failed:
print "Deleting failed files and folder", dirName
shutil.rmtree(dirName)