def NZB_SEARCH(ComicName, IssueNumber, ComicYear, SeriesYear, nzbprov, nzbpr, IssDateFix, IssueID): logger.info(u"Shhh be very quiet...I'm looking for " + ComicName + " issue: " + str(IssueNumber) + " using " + str(nzbprov)) if nzbprov == 'nzb.su': apikey = mylar.NZBSU_APIKEY elif nzbprov == 'dognzb': apikey = mylar.DOGNZB_APIKEY elif nzbprov == 'experimental': apikey = 'none' #print ("-------------------------") if mylar.PREFERRED_QUALITY == 0: filetype = "" elif mylar.PREFERRED_QUALITY == 1: filetype = ".cbr" elif mylar.PREFERRED_QUALITY == 2: filetype = ".cbz" if mylar.SAB_PRIORITY: if mylar.SAB_PRIORITY == 1: sabpriority = "-100" elif mylar.SAB_PRIORITY == 2: sabpriority = "-1" elif mylar.SAB_PRIORITY == 3: sabpriority = "0" elif mylar.SAB_PRIORITY == 4: sabpriority = "1" elif mylar.SAB_PRIORITY == 5: sabpriority = "-2" else: #if sab priority isn't selected, default to Normal (0) sabpriority = "0" # figure out what was missed via rss feeds and do a manual search via api #tsc = int(tot-1) findcomic = [] findcomiciss = [] findcount = 0 ci = "" comsearch = [] isssearch = [] comyear = str(ComicYear) #print ("-------SEARCH FOR MISSING------------------") findcomic.append(str(ComicName)) IssueNumber = str(re.sub("\.00", "", str(IssueNumber))) #print ("issueNumber" + str(IssueNumber)) findcomiciss.append(str(re.sub("\D", "", str(IssueNumber)))) #print ("we need : " + str(findcomic[findcount]) + " issue: #" + str(findcomiciss[findcount])) # replace whitespace in comic name with %20 for api search cm1 = re.sub(" ", "%20", str(findcomic[findcount])) cm = re.sub("\&", "%26", str(cm1)) #print (cmi) if len(str(findcomiciss[findcount])) == 1: cmloopit = 3 elif len(str(findcomiciss[findcount])) == 2: cmloopit = 2 else: cmloopit = 1 isssearch.append(str(findcomiciss[findcount])) comsearch.append(cm) findcount+=1 # ---- #print ("------RESULTS OF SEARCH-------------------") findloop = 0 foundcomic = [] #---issue problem # if issue is '011' instead of '11' in nzb search results, will not have same # results. '011' will return different than '11', as will '009' and '09'. while (findloop < (findcount) ): comsrc = comsearch[findloop] while (cmloopit >= 1 ): # here we account for issue pattern variations if cmloopit == 3: comsearch[findloop] = comsrc + "%2000" + isssearch[findloop] + "%20" + str(filetype) elif cmloopit == 2: comsearch[findloop] = comsrc + "%200" + isssearch[findloop] + "%20" + str(filetype) elif cmloopit == 1: comsearch[findloop] = comsrc + "%20" + isssearch[findloop] + "%20" + str(filetype) if nzbprov != 'experimental': if nzbprov == 'dognzb': findurl = "http://dognzb.cr/api?t=search&apikey=" + str(apikey) + "&q=" + str(comsearch[findloop]) + "&o=xml&cat=7030" elif nzbprov == 'nzb.su': findurl = "http://nzb.su/api?t=search&q=" + str(comsearch[findloop]) + "&apikey=" + str(apikey) + "&o=xml&cat=7030" bb = feedparser.parse(findurl) elif nzbprov == 'experimental': bb = parseit.MysterBinScrape(comsearch[findloop], comyear) done = False foundc = "no" if bb == "no results": pass foundc = "no" else: for entry in bb['entries']: #print ("Entry:" + str(entry['title'])) cleantitle = re.sub('_', ' ', str(entry['title'])) cleantitle = helpers.cleanName(str(cleantitle)) nzbname = cleantitle #print ("cleantitle:" + str(cleantitle)) if len(re.findall('[^()]+', cleantitle)) == 1: cleantitle = "abcdefghijk 0 (1901).cbz" if done: break #let's narrow search down - take out year (2010), (2011), etc #let's check for first occurance of '(' as generally indicates #that the 'title' has ended ripperlist=['digital-', 'empire', 'dcp'] #this takes care of the brackets :) m = re.findall('[^()]+', cleantitle) lenm = len(m) #print ("there are " + str(lenm) + " words.") cnt = 0 yearmatch = "false" while (cnt < lenm): if m[cnt] is None: break #print (str(cnt) + ". Bracket Word: " + m[cnt] ) if cnt == 0: comic_andiss = m[cnt] #print ("Comic:" + str(comic_andiss)) if m[cnt][:-2] == '19' or m[cnt][:-2] == '20': #print ("year detected!") result_comyear = m[cnt] if str(comyear) in result_comyear: #print (str(comyear) + " - right - years match baby!") yearmatch = "true" else: #print (str(comyear) + " - not right - years don't match ") yearmatch = "false" if 'digital' in m[cnt] and len(m[cnt]) == 7: pass #print ("digital edition") if ' of ' in m[cnt]: #print ("mini-series detected : " + str(m[cnt])) result_of = m[cnt] if 'cover' in m[cnt]: #print ("covers detected") result_comcovers = m[cnt] for ripper in ripperlist: if ripper in m[cnt]: #print ("Scanner detected:" + str(m[cnt])) result_comscanner = m[cnt] cnt+=1 if yearmatch == "false": continue splitit = [] watchcomic_split = [] comic_iss = re.sub('[\-\:\,]', '', str(comic_andiss)) splitit = comic_iss.split(None) watchcomic_split = findcomic[findloop].split(None) bmm = re.findall('v\d', comic_iss) #print ("vers - " + str(bmm)) if len(bmm) > 0: splitst = len(splitit) - 2 else: splitst = len(splitit) - 1 if (splitst) != len(watchcomic_split): #print ("incorrect comic lengths...not a match") if str(splitit[0]).lower() == "the": #print ("THE word detected...attempting to adjust pattern matching") splitit[0] = splitit[4:] else: #print ("length match..proceeding") n = 0 scount = 0 #print ("search-length:" + str(len(splitit))) #print ("watchlist-length:" + str(len(watchcomic_split))) while ( n <= len(splitit)-1 ): #print ("splitit:" + str(splitit[n])) if n < len(splitit)-1 and n < len(watchcomic_split)-1: #print ( str(n) + ". Comparing: " + watchcomic_split[n] + " .to. " + splitit[n] ) if str(watchcomic_split[n].lower()) in str(splitit[n].lower()): #print ("word matched on : " + splitit[n]) scount+=1 #elif ':' in splitit[n] or '-' in splitit[n]: # splitrep = splitit[n].replace('-', '') # print ("non-character keyword...skipped on " + splitit[n]) elif str(splitit[n].lower()).startswith('v'): #print ("possible verisoning..checking") #we hit a versioning # - account for it if splitit[n][1:].isdigit(): comicversion = str(splitit[n]) #print ("version found:" + str(comicversion)) else: #print ("issue section") if splitit[n].isdigit(): #print ("issue detected") comiss = splitit[n] comicNAMER = n - 1 comNAME = splitit[0] cmnam = 1 while (cmnam < comicNAMER): comNAME = str(comNAME) + " " + str(splitit[cmnam]) cmnam+=1 #print ("comic: " + str(comNAME)) else: #print ("non-match for: " + splitit[n]) pass n+=1 spercent = ( scount/int(len(splitit)) ) * 100 #print (str(spercent) + "% match") #if spercent >= 75: print ("it's a go captain...") #if spercent < 75: print ("failure - we only got " + str(spercent) + "% right!") #print ("this should be a match!") #issue comparison now as well if int(findcomiciss[findloop]) == int(comiss): #print ("issues match!") logger.info(u"Found " + str(ComicName) + " (" + str(comyear) + ") issue: " + str(IssueNumber) + " using " + str(nzbprov) ) ## -- inherit issue. Comic year is non-standard. nzb year is the year ## -- comic was printed, not the start year of the comic series and ## -- thus the deciding component if matches are correct or not linkstart = os.path.splitext(entry['link'])[0] #following is JUST for nzb.su if nzbprov == 'nzb.su': linkit = os.path.splitext(entry['link'])[1] linkit = linkit.replace("&", "%26") linkapi = str(linkstart) + str(linkit) else: # this should work for every other provider linkstart = linkstart.replace("&", "%26") linkapi = str(linkstart) #here we distinguish between rename and not. #blackhole functinality--- #let's download the file to a temporary cache. if mylar.BLACKHOLE: if os.path.exists(mylar.BLACKHOLE_DIR): filenamenzb = str(ComicName) + " " + str(IssueNumber) + " (" + str(comyear) + ").nzb" urllib.urlretrieve(linkapi, str(mylar.BLACKHOLE_DIR) + str(filenamenzb)) logger.info(u"Successfully sent .nzb to your Blackhole directory : " + str(mylar.BLACKHOLE_DIR) + str(filenamenzb) ) #end blackhole else: tmppath = mylar.CACHE_DIR if os.path.exists(tmppath): pass else: #let's make the dir. try: os.makedirs(str(mylar.CACHE_DIR)) logger.info(u"Cache Directory successfully created at: " + str(mylar.CACHE_DIR)) except OSError.e: if e.errno != errno.EEXIST: raise filenamenzb = os.path.split(linkapi)[1] #filenzb = os.path.join(tmppath,filenamenzb) if nzbprov == 'nzb.su': filenzb = linkstart[21:] elif nzbprov == 'experimental': filenzb = filenamenzb[6:] elif nzbprov == 'dognzb': filenzb = str(filenamenzb) if mylar.RENAME_FILES == 1: filenzb = str(ComicName.replace(' ', '_')) + "_" + str(IssueNumber) + "_(" + str(comyear) + ")" if mylar.REPLACE_SPACES: repchar = mylar.REPLACE_CHAR repurlchar = mylar.REPLACE_CHAR else: repchar = ' ' repurlchar = "%20" #let's make sure there's no crap in the ComicName since it's O.G. ComicNM = re.sub('[\:\,]', '', str(ComicName)) renameit = str(ComicNM) + " " + str(IssueNumber) + " (" + str(SeriesYear) + ")" + " " + "(" + str(comyear) + ")" renamethis = renameit.replace(' ', repchar) renamer1 = renameit.replace(' ', repurlchar) renamer = re.sub("\&", "%26", str(renamer1)) savefile = str(tmppath) + "/" + str(filenzb) + ".nzb" print "savefile:" + str(savefile) try: urllib.urlretrieve(linkapi, str(savefile)) except urllib.URLError: logger.error(u"Unable to retrieve nzb file.") return if os.path.getsize(str(savefile)) == 0: logger.error(u"nzb size detected as zero bytes.") continue logger.info(u"Sucessfully retrieved nzb file using " + str(nzbprov)) nzbname = str(filenzb) print "nzbname:" + str(nzbname) # NOT NEEDED ANYMORE. #print (str(mylar.RENAME_FILES)) #check sab for current pause status # sabqstatusapi = str(mylar.SAB_HOST) + "/api?mode=qstatus&output=xml&apikey=" + str(mylar.SAB_APIKEY) # file = urllib2.urlopen(sabqstatusapi); # data = file.read() # file.close() # dom = parseString(data) # for node in dom.getElementsByTagName('paused'): # pausestatus = node.firstChild.wholeText #print pausestatus # if pausestatus != 'True': #pause sab first because it downloads too quick (cbr's are small!) # pauseapi = str(mylar.SAB_HOST) + "/api?mode=pause&apikey=" + str(mylar.SAB_APIKEY) # urllib2.urlopen(pauseapi); #print "Queue paused" #else: #print "Queue already paused" # END OF NOT NEEDED. if mylar.RENAME_FILES == 1: tmpapi = str(mylar.SAB_HOST) + "/api?mode=addlocalfile&name=" + str(savefile) + "&pp=3&cat=" + str(mylar.SAB_CATEGORY) + "&script=ComicRN.py&apikey=" + str(mylar.SAB_APIKEY) else: tmpapi = str(mylar.SAB_HOST) + "/api?mode=addurl&name=" + str(linkapi) + "&pp=3&cat=" + str(mylar.SAB_CATEGORY) + "&script=ComicRN.py&apikey=" + str(mylar.SAB_APIKEY) # time.sleep(5) print "send-to-SAB:" + str(tmpapi) try: urllib2.urlopen(tmpapi) except urllib2.URLError: logger.error(u"Unable to send nzb file to SABnzbd") return logger.info(u"Successfully sent nzb file to SABnzbd") #---NOT NEEDED ANYMORE. # if mylar.RENAME_FILES == 1: #let's give it 5 extra seconds to retrieve the nzb data... # time.sleep(5) # outqueue = str(mylar.SAB_HOST) + "/api?mode=queue&start=START&limit=LIMIT&output=xml&apikey=" + str(mylar.SAB_APIKEY) # urllib2.urlopen(outqueue); # time.sleep(5) #<slots><slot><filename>.nzb filename #chang nzbfilename to include series(SAB will auto rename based on this) #api?mode=queue&name=rename&value=<filename_nzi22ks>&value2=NEWNAME # file = urllib2.urlopen(outqueue); # data = file.read() # file.close() # dom = parseString(data) # queue_slots = dom.getElementsByTagName('filename') # queue_cnt = len(queue_slots) #print ("there are " + str(queue_cnt) + " things in SABnzbd's queue") # que = 0 # slotmatch = "no" # for queue in queue_slots: #retrieve the first xml tag (<tag>data</tag>) #that the parser finds with name tagName: # queue_file = dom.getElementsByTagName('filename')[que].firstChild.wholeText # while ('Trying to fetch NZB' in queue_file): #let's keep waiting until nzbname is resolved by SABnzbd # time.sleep(5) # file = urllib2.urlopen(outqueue); # data = file.read() # file.close() # dom = parseString(data) # queue_file = dom.getElementsByTagName('filename')[que].firstChild.wholeText #print ("queuefile:" + str(queue_file)) #print ("filenzb:" + str(filenzb)) # queue_file = queue_file.replace("_", " ") # if str(queue_file) in str(filenzb): #print ("matched") # slotmatch = "yes" # slot_nzoid = dom.getElementsByTagName('nzo_id')[que].firstChild.wholeText #print ("slot_nzoid: " + str(slot_nzoid)) # break # que+=1 # if slotmatch == "yes": #--start - this is now broken - SAB Priority. # # nzo_prio = str(mylar.SAB_HOST) + "/api?mode=queue&name=priority&apikey=" + str(mylar.SAB_APIKEY) + "&value=" + str(slot_nzoid) + "&value2=" + str(sabpriority) # urllib2.urlopen(nzo_prio); # #--end # nzo_ren = str(mylar.SAB_HOST) + "/api?mode=queue&name=rename&apikey=" + str(mylar.SAB_APIKEY) + "&value=" + str(slot_nzoid) + "&value2=" + str(renamer) # urllib2.urlopen(nzo_ren); # logger.info(u"Renamed nzb file in SABnzbd queue to : " + str(renamethis)) #---END OF NOT NEEDED. #delete the .nzb now. if mylar.PROG_DIR is not "/": os.remove(savefile) logger.info(u"Removed temporary save file") #--- NOT NEEDED. #we need to track nzo_id to make sure finished downloaded with SABnzbd. #controlValueDict = {"nzo_id": str(slot_nzoid)} #newValueDict = {"ComicName": str(ComicName), # "ComicYEAR": str(comyear), # "ComicIssue": str(IssueNumber), # "name": str(filenamenzb)} #print ("updating SABLOG") #myDB = db.DBConnection() #myDB.upsert("sablog", newValueDict, controlValueDict) # else: logger.info(u"Couldn't locate file in SAB - are you sure it's being downloaded?") #resume sab if it was running before we started # if pausestatus != 'True': #let's unpause queue now that we did our jobs. # resumeapi = str(mylar.SAB_HOST) + "/api?mode=resume&apikey=" + str(mylar.SAB_APIKEY) # urllib2.urlopen(resumeapi); #else: #print "Queue already paused" #--- END OF NOT NEEDED. #raise an exception to break out of loop foundc = "yes" done = True break else: #print ("issues don't match..") foundc = "no" if done == True: break cmloopit-=1 findloop+=1 if foundc == "yes": print ("found-yes") foundcomic.append("yes") updater.nzblog(IssueID, nzbname) break elif foundc == "no" and nzbpr <> 0: logger.info(u"More than one search provider given - trying next one.") elif foundc == "no" and nzbpr == 0: foundcomic.append("no") if IssDateFix == "no": logger.info(u"Couldn't find Issue " + str(IssueNumber) + " of " + str(ComicName) + "(" + str(comyear) + "). Status kept as wanted." ) break return foundc
def NZB_SEARCH(ComicName, IssueNumber, ComicYear, SeriesYear, nzbprov, nzbpr, IssDateFix, IssueID, UseFuzzy, newznab_host=None): if nzbprov == 'nzb.su': apikey = mylar.NZBSU_APIKEY elif nzbprov == 'dognzb': apikey = mylar.DOGNZB_APIKEY elif nzbprov == 'nzbx': apikey = 'none' elif nzbprov == 'experimental': apikey = 'none' elif nzbprov == 'newznab': host_newznab = newznab_host[0] apikey = newznab_host[1] logger.fdebug("using Newznab host of : " + str(host_newznab)) logger.info(u"Shhh be very quiet...I'm looking for " + ComicName + " issue: " + str(IssueNumber) + "(" + str(ComicYear) + ") using " + str(nzbprov)) if mylar.PREFERRED_QUALITY == 0: filetype = "" elif mylar.PREFERRED_QUALITY == 1: filetype = ".cbr" elif mylar.PREFERRED_QUALITY == 2: filetype = ".cbz" if mylar.SAB_PRIORITY: if mylar.SAB_PRIORITY == "Default": sabpriority = "-100" elif mylar.SAB_PRIORITY == "Low": sabpriority = "-1" elif mylar.SAB_PRIORITY == "Normal": sabpriority = "0" elif mylar.SAB_PRIORITY == "High": sabpriority = "1" elif mylar.SAB_PRIORITY == "Paused": sabpriority = "-2" else: #if sab priority isn't selected, default to Normal (0) sabpriority = "0" #UseFuzzy == 0: Normal #UseFuzzy == 1: Remove Year #UseFuzzy == 2: Fuzzy Year # figure out what was missed via rss feeds and do a manual search via api #tsc = int(tot-1) findcomic = [] findcomiciss = [] findcount = 0 ci = "" comsearch = [] isssearch = [] comyear = str(ComicYear) #print ("-------SEARCH FOR MISSING------------------") findcomic.append(str(ComicName)) # this should be called elsewhere..redudant code. if '.' in IssueNumber: isschk_find = IssueNumber.find('.') isschk_b4dec = IssueNumber[:isschk_find] isschk_decval = IssueNumber[isschk_find+1:] logger.fdebug("IssueNumber: " + str(IssueNumber)) logger.fdebug("..before decimal: " + str(isschk_b4dec)) logger.fdebug("...after decimal: " + str(isschk_decval)) #--let's make sure we don't wipe out decimal issues ;) if int(isschk_decval) == 0: iss = isschk_b4dec intdec = int(isschk_decval) else: if len(isschk_decval) == 1: iss = isschk_b4dec + "." + isschk_decval intdec = int(isschk_decval) * 10 else: iss = isschk_b4dec + "." + isschk_decval.rstrip('0') intdec = int(isschk_decval.rstrip('0')) * 10 logger.fdebug("let's search with this issue value: " + str(iss)) #Issue_Number = carry-over with decimals #iss = clean issue number (no decimals) intIss = (int(isschk_b4dec) * 1000) + intdec logger.fdebug("int.issue :" + str(intIss)) logger.fdebug("int.issue_b4: " + str(isschk_b4dec)) logger.fdebug("int.issue_dec: " + str(intdec)) IssueNumber = iss #issue_decimal = re.compile(r'[^\d.]+') #issue = issue_decimal.sub('', str(IssueNumber)) findcomiciss.append(iss) #print ("we need : " + str(findcomic[findcount]) + " issue: #" + str(findcomiciss[findcount])) # replace whitespace in comic name with %20 for api search cm1 = re.sub(" ", "%20", str(findcomic[findcount])) cm = re.sub("\&", "%26", str(cm1)) #print (cmi) if '.' in findcomiciss[findcount]: if len(str(isschk_b4dec)) == 3: cmloopit = 1 elif len(str(isschk_b4dec)) == 2: cmloopit = 2 elif len(str(isschk_b4dec)) == 1: cmloopit = 3 else: if len(str(findcomiciss[findcount])) == 1: cmloopit = 3 elif len(str(findcomiciss[findcount])) == 2: cmloopit = 2 else: cmloopit = 1 isssearch.append(str(findcomiciss[findcount])) comsearch.append(cm) findcount+=1 # ---- #print ("------RESULTS OF SEARCH-------------------") findloop = 0 foundcomic = [] done = False #---issue problem # if issue is '011' instead of '11' in nzb search results, will not have same # results. '011' will return different than '11', as will '009' and '09'. while (findloop < (findcount) ): comsrc = comsearch[findloop] while (cmloopit >= 1 ): if done is True: logger.fdebug("we should break out now - sucessful search previous") findloop == 99 break # here we account for issue pattern variations if cmloopit == 3: comsearch[findloop] = comsrc + "%2000" + isssearch[findloop] + "%20" + str(filetype) elif cmloopit == 2: comsearch[findloop] = comsrc + "%200" + isssearch[findloop] + "%20" + str(filetype) elif cmloopit == 1: comsearch[findloop] = comsrc + "%20" + isssearch[findloop] + "%20" + str(filetype) logger.fdebug("comsearch: " + str(comsearch)) logger.fdebug("cmloopit: " + str(cmloopit)) logger.fdebug("done: " + str(done)) if nzbprov != 'experimental': if nzbprov == 'dognzb': findurl = "http://dognzb.cr/api?t=search&apikey=" + str(apikey) + "&q=" + str(comsearch[findloop]) + "&o=xml&cat=7030" elif nzbprov == 'nzb.su': findurl = "http://www.nzb.su/api?t=search&q=" + str(comsearch[findloop]) + "&apikey=" + str(apikey) + "&o=xml&cat=7030" elif nzbprov == 'newznab': #let's make sure the host has a '/' at the end, if not add it. if host_newznab[-1] != "/": host_newznab = str(host_newznab) + "/" findurl = str(host_newznab) + "api?t=search&q=" + str(comsearch[findloop]) + "&apikey=" + str(apikey) + "&o=xml&cat=7030" logger.fdebug("search-url: " + str(findurl)) elif nzbprov == 'nzbx': bb = prov_nzbx.searchit(comsearch[findloop]) logger.fdebug("nzbx.co!") if nzbprov != 'nzbx': bb = feedparser.parse(findurl) elif nzbprov == 'experimental': #bb = parseit.MysterBinScrape(comsearch[findloop], comyear) bb = findcomicfeed.Startit(cm, isssearch[findloop], comyear) # since the regexs in findcomicfeed do the 3 loops, lets force the exit after cmloopit == 1 done = False foundc = "no" log2file = "" if bb == "no results": pass foundc = "no" else: for entry in bb['entries']: logger.fdebug("checking search result: " + str(entry['title'])) thisentry = str(entry['title']) logger.fdebug("Entry: " + str(thisentry)) cleantitle = re.sub('[_/.]', ' ', str(entry['title'])) cleantitle = helpers.cleanName(str(cleantitle)) nzbname = cleantitle logger.fdebug("Cleantitle: " + str(cleantitle)) if len(re.findall('[^()]+', cleantitle)) == 1: cleantitle = "abcdefghijk 0 (1901).cbz" if done: break #let's narrow search down - take out year (2010), (2011), etc #let's check for first occurance of '(' as generally indicates #that the 'title' has ended ripperlist=['digital-', 'empire', 'dcp'] #this takes care of the brackets :) m = re.findall('[^()]+', cleantitle) lenm = len(m) #print ("there are " + str(lenm) + " words.") cnt = 0 yearmatch = "false" while (cnt < lenm): if m[cnt] is None: break if m[cnt] == ' ': pass else: logger.fdebug(str(cnt) + ". Bracket Word: " + str(m[cnt])) if cnt == 0: comic_andiss = m[cnt] logger.fdebug("Comic: " + str(comic_andiss)) logger.fdebug("UseFuzzy is : " + str(UseFuzzy)) if UseFuzzy == "0" or UseFuzzy == "2" or UseFuzzy is None or IssDateFix == "yes": if m[cnt][:-2] == '19' or m[cnt][:-2] == '20': logger.fdebug("year detected: " + str(m[cnt])) result_comyear = m[cnt] if str(comyear) in result_comyear: logger.fdebug(str(comyear) + " - right years match baby!") yearmatch = "true" else: logger.fdebug(str(comyear) + " - not right - years do not match") yearmatch = "false" if UseFuzzy == "2": #Fuzzy the year +1 and -1 ComUp = int(ComicYear) + 1 ComDwn = int(ComicYear) - 1 if str(ComUp) in result_comyear or str(ComDwn) in result_comyear: logger.fdebug("Fuzzy Logic'd the Year and got a match with a year of " + str(result_comyear)) yearmatch = "true" else: logger.fdebug(str(comyear) + "Fuzzy logic'd the Year and year still didn't match.") #let's do this hear and save a few extra loops ;) #fix for issue dates between Nov-Dec/Jan if IssDateFix == "yes" and UseFuzzy is not "2": ComicYearFix = int(ComicYear) + 1 if str(ComicYearFix) in result_comyear: logger.fdebug("further analysis reveals this was published inbetween Nov-Jan, incrementing year to " + str(ComicYearFix) + " has resulted in a match!") yearmatch = "true" else: logger.fdebug(str(comyear) + " - not the right year.") elif UseFuzzy == "1": yearmatch = "true" if 'digital' in m[cnt] and len(m[cnt]) == 7: logger.fdebug("digital edition detected") pass if ' of ' in m[cnt]: logger.fdebug("mini-series detected : " + str(m[cnt])) result_of = m[cnt] if 'cover' in m[cnt]: logger.fdebug("covers detected: " + str(m[cnt])) result_comcovers = m[cnt] for ripper in ripperlist: if ripper in m[cnt]: logger.fdebug("Scanner detected: " + str(m[cnt])) result_comscanner = m[cnt] cnt+=1 if yearmatch == "false": continue splitit = [] watchcomic_split = [] logger.fdebug("original nzb comic and issue: " + str(comic_andiss)) #changed this from '' to ' ' comic_iss_b4 = re.sub('[\-\:\,]', ' ', str(comic_andiss)) comic_iss = comic_iss_b4.replace('.',' ') logger.fdebug("adjusted nzb comic and issue: " + str(comic_iss)) splitit = comic_iss.split(None) #something happened to dognzb searches or results...added a '.' in place of spaces #screwed up most search results with dognzb. Let's try to adjust. #watchcomic_split = findcomic[findloop].split(None) if splitit[(len(splitit)-1)].isdigit(): #compares - if the last digit and second last digit are #'s seperated by spaces assume decimal comic_iss = splitit[(len(splitit)-1)] splitst = len(splitit) - 1 if splitit[(len(splitit)-2)].isdigit(): # for series that have a digit at the end, it screws up the logistics. i = 1 chg_comic = splitit[0] while (i < (len(splitit)-1)): chg_comic = chg_comic + " " + splitit[i] i+=1 logger.fdebug("chg_comic:" + str(chg_comic)) if chg_comic.upper() == findcomic[findloop].upper(): logger.fdebug("series contains numerics...adjusting..") else: changeup = "." + splitit[(len(splitit)-1)] logger.fdebug("changeup to decimal: " + str(changeup)) comic_iss = splitit[(len(splitit)-2)] + "." + comic_iss splitst = len(splitit) - 2 else: # if the nzb name doesn't follow the series-issue-year format even closely..ignore nzb logger.fdebug("invalid naming format of nzb detected - cannot properly determine issue") continue logger.fdebug("adjusting from: " + str(comic_iss_b4) + " to: " + str(comic_iss)) #bmm = re.findall('v\d', comic_iss) #if len(bmm) > 0: splitst = len(splitit) - 2 #else: splitst = len(splitit) - 1 # make sure that things like - in watchcomic are accounted for when comparing to nzb. watchcomic_split = re.sub('[\-\:\,\.]', ' ', findcomic[findloop]).split(None) logger.fdebug(str(splitit) + " nzb series word count: " + str(splitst)) logger.fdebug(str(watchcomic_split) + " watchlist word count: " + str(len(watchcomic_split))) if (splitst) != len(watchcomic_split): logger.fdebug("incorrect comic lengths...not a match") if str(splitit[0]).lower() == "the": logger.fdebug("THE word detected...attempting to adjust pattern matching") splitit[0] = splitit[4:] else: logger.fdebug("length match..proceeding") n = 0 scount = 0 logger.fdebug("search-length: " + str(splitst)) logger.fdebug("Watchlist-length: " + str(len(watchcomic_split))) while ( n <= (splitst)-1 ): logger.fdebug("splitit: " + str(splitit[n])) if n < (splitst) and n < len(watchcomic_split): logger.fdebug(str(n) + " Comparing: " + str(watchcomic_split[n]) + " .to. " + str(splitit[n])) if '+' in watchcomic_split[n]: watchcomic_split[n] = re.sub('+', '', str(watchcomic_split[n])) if str(watchcomic_split[n].lower()) in str(splitit[n].lower()): logger.fdebug("word matched on : " + str(splitit[n])) scount+=1 #elif ':' in splitit[n] or '-' in splitit[n]: # splitrep = splitit[n].replace('-', '') # print ("non-character keyword...skipped on " + splitit[n]) elif str(splitit[n].lower()).startswith('v'): logger.fdebug("possible versioning..checking") #we hit a versioning # - account for it if splitit[n][1:].isdigit(): comicversion = str(splitit[n]) logger.fdebug("version found: " + str(comicversion)) else: logger.fdebug("Comic / Issue section") if splitit[n].isdigit(): logger.fdebug("issue detected") #comiss = splitit[n] comicNAMER = n - 1 comNAME = splitit[0] cmnam = 1 while (cmnam <= comicNAMER): comNAME = str(comNAME) + " " + str(splitit[cmnam]) cmnam+=1 logger.fdebug("comic: " + str(comNAME)) else: logger.fdebug("non-match for: "+ str(splitit[n])) pass n+=1 #set the match threshold to 80% (for now) # if it's less than 80% consider it a non-match and discard. #splitit has to splitit-1 because last position is issue. wordcnt = int(scount) logger.fdebug("scount:" + str(wordcnt)) totalcnt = int(splitst) logger.fdebug("splitit-len:" + str(totalcnt)) spercent = (wordcnt/totalcnt) * 100 logger.fdebug("we got " + str(spercent) + " percent.") if int(spercent) >= 80: logger.fdebug("it's a go captain... - we matched " + str(spercent) + "%!") if int(spercent) < 80: logger.fdebug("failure - we only got " + str(spercent) + "% right!") continue logger.fdebug("this should be a match!") logger.fdebug("issue we are looking for is : " + str(findcomiciss[findloop])) logger.fdebug("integer value of issue we are looking for : " + str(intIss)) #redudant code - should be called elsewhere... if '.' in comic_iss: comisschk_find = comic_iss.find('.') comisschk_b4dec = comic_iss[:comisschk_find] comisschk_decval = comic_iss[comisschk_find+1:] logger.fdebug("Found IssueNumber: " + str(comic_iss)) logger.fdebug("..before decimal: " + str(comisschk_b4dec)) logger.fdebug("...after decimal: " + str(comisschk_decval)) #--let's make sure we don't wipe out decimal issues ;) if int(comisschk_decval) == 0: ciss = comisschk_b4dec cintdec = int(comisschk_decval) else: if len(comisschk_decval) == 1: ciss = comisschk_b4dec + "." + comisschk_decval cintdec = int(comisschk_decval) * 10 else: ciss = comisschk_b4dec + "." + comisschk_decval.rstrip('0') cintdec = int(comisschk_decval.rstrip('0')) * 10 comintIss = (int(comisschk_b4dec) * 1000) + cintdec else: comintIss = int(comic_iss) * 1000 logger.fdebug("issue we found for is : " + str(comic_iss)) logger.fdebug("integer value of issue we are found : " + str(comintIss)) #issue comparison now as well if int(intIss) == int(comintIss): logger.fdebug('issues match!') logger.info(u"Found " + str(ComicName) + " (" + str(comyear) + ") issue: " + str(IssueNumber) + " using " + str(nzbprov) ) ## -- inherit issue. Comic year is non-standard. nzb year is the year ## -- comic was printed, not the start year of the comic series and ## -- thus the deciding component if matches are correct or not linkstart = os.path.splitext(entry['link'])[0] #following is JUST for nzb.su if nzbprov == 'nzb.su' or nzbprov == 'newznab': linkit = os.path.splitext(entry['link'])[1] linkit = linkit.replace("&", "%26") linkapi = str(linkstart) + str(linkit) else: # this should work for every other provider linkstart = linkstart.replace("&", "%26") linkapi = str(linkstart) logger.fdebug("link given by: " + str(nzbprov)) logger.fdebug("link: " + str(linkstart)) logger.fdebug("linkforapi: " + str(linkapi)) #here we distinguish between rename and not. #blackhole functinality--- #let's download the file to a temporary cache. if mylar.BLACKHOLE: logger.fdebug("using blackhole directory at : " + str(mylar.BLACKHOLE_DIR)) if os.path.exists(mylar.BLACKHOLE_DIR): #pretty this biatch up. Bl_ComicName = re.sub('[/:/,\/]', '', str(ComicName)) filenamenzb = str(re.sub(" ", ".", str(Bl_ComicName))) + "." + str(IssueNumber) + ".(" + str(comyear) + ").nzb" urllib.urlretrieve(linkapi, str(mylar.BLACKHOLE_DIR) + str(filenamenzb)) logger.fdebug("filename saved to your blackhole as : " + str(filenamenzb)) logger.info(u"Successfully sent .nzb to your Blackhole directory : " + str(mylar.BLACKHOLE_DIR) + str(filenamenzb) ) #end blackhole else: tmppath = mylar.CACHE_DIR if os.path.exists(tmppath): logger.fdebug("cache directory successfully found at : " + str(tmppath)) pass else: #let's make the dir. logger.fdebug("couldn't locate cache directory, attempting to create at : " + str(mylar.CACHE_DIR)) try: os.makedirs(str(mylar.CACHE_DIR)) logger.info(u"Cache Directory successfully created at: " + str(mylar.CACHE_DIR)) except OSError.e: if e.errno != errno.EEXIST: raise logger.fdebug("link to retrieve via api:" + str(linkapi)) #we need to change the nzbx string now to allow for the nzbname rename. if nzbprov == 'nzbx': nzbxlink_st = linkapi.find("*|*") linkapi = linkapi[:(nzbxlink_st + 3)] + str(nzbname) logger.fdebug("new linkapi (this should =nzbname) :" + str(linkapi)) # let's build the send-to-SAB string now: tmpapi = str(mylar.SAB_HOST) logger.fdebug("send-to-SAB host string: " + str(tmpapi)) # changed to just work with direct links now... SABtype = "/api?mode=addurl&name=" fileURL = str(linkapi) tmpapi = tmpapi + str(SABtype) logger.fdebug("...selecting API type: " + str(tmpapi)) tmpapi = tmpapi + str(fileURL) logger.fdebug("...attaching nzb provider link: " + str(tmpapi)) # determine SAB priority if mylar.SAB_PRIORITY: tmpapi = tmpapi + "&priority=" + str(sabpriority) logger.fdebug("...setting priority: " + str(tmpapi)) # if category is blank, let's adjust if mylar.SAB_CATEGORY: tmpapi = tmpapi + "&cat=" + str(mylar.SAB_CATEGORY) logger.fdebug("...attaching category: " + str(tmpapi)) if mylar.RENAME_FILES == 1: tmpapi = tmpapi + "&script=ComicRN.py" logger.fdebug("...attaching rename script: " + str(tmpapi)) #final build of send-to-SAB tmpapi = tmpapi + "&apikey=" + str(mylar.SAB_APIKEY) logger.fdebug("Completed send-to-SAB link: " + str(tmpapi)) try: urllib2.urlopen(tmpapi) except urllib2.URLError: logger.error(u"Unable to send nzb file to SABnzbd") return logger.info(u"Successfully sent nzb file to SABnzbd") #delete the .nzb now. #if mylar.PROG_DIR is not "/" and nzbprov != 'nzb.su': # logger.fdebug("preparing to remove temporary nzb file at: " + str(savefile)) # os.remove(savefile) # logger.info(u"Removed temporary save file") #raise an exception to break out of loop #let's change all space to decimals for simplicity if mylar.BLACKHOLE: bhole_cname = re.sub('[/:/,\/]', '', str(ComicName)) nzbname = str(re.sub(" ", ".", str(bhole_cname))) + "." + str(IssueNumber) + ".(" + str(comyear) + ")" else: nzbname = re.sub(" ", ".", str(entry['title'])) nzbname = re.sub('[\,\:]', '', str(nzbname)) extensions = ('.cbr', '.cbz') if nzbname.lower().endswith(extensions): fd, ext = os.path.splitext(nzbname) logger.fdebug("Removed extension from nzb: " + ext) nzbname = re.sub(str(ext), '', str(nzbname)) logger.fdebug("nzbname used for post-processing:" + str(nzbname)) foundc = "yes" done = True break else: log2file = log2file + "issues don't match.." + "\n" foundc = "no" if done == True: cmloopit == 1 #let's make sure it STOPS searching after a sucessful match. break cmloopit-=1 findloop+=1 if foundc == "yes": foundcomic.append("yes") logger.fdebug("Found matching comic...preparing to send to Updater with IssueID: " + str(IssueID) + " and nzbname: " + str(nzbname)) updater.nzblog(IssueID, nzbname) nzbpr == 0 #break return foundc elif foundc == "no" and nzbpr == 0: foundcomic.append("no") logger.fdebug("couldn't find a matching comic") if IssDateFix == "no": logger.info(u"Couldn't find Issue " + str(IssueNumber) + " of " + str(ComicName) + "(" + str(comyear) + "). Status kept as wanted." ) break return foundc
foundc = "yes" done = True break else: log2file = log2file + "issues don't match.." + "\n" foundc = "no" if done == True: cmloopit == 1 #let's make sure it STOPS searching after a sucessful match. break cmloopit-=1 findloop+=1 if foundc == "yes": foundcomic.append("yes") logger.fdebug("Found matching comic...preparing to send to Updater with IssueID: " + str(IssueID) + " and nzbname: " + str(nzbname)) updater.nzblog(IssueID, nzbname) nzbpr == 0 #break return foundc elif foundc == "no" and nzbpr == 0: foundcomic.append("no") logger.fdebug("couldn't find a matching comic") if IssDateFix == "no": logger.info(u"Couldn't find Issue " + str(IssueNumber) + " of " + str(ComicName) + "(" + str(comyear) + "). Status kept as wanted." ) break return foundc def searchforissue(issueid=None, new=False): myDB = db.DBConnection() if not issueid: