def run(path,proxy,username,password): log_file = os.path.join(os.path.dirname(os.path.realpath(__file__)),"log_flashsubs.txt") if os.path.isfile(log_file) and os.path.getsize(log_file) < 10*1024*1024: log = open(log_file,"a") else: log = open(log_file,"w") try: subdb = SubDBAPI() if proxy: imdb = Imdb({'http':proxy}) else: imdb = Imdb() opensub = opensubapi.OpenSubAPI(proxy) if username and password: try: token = opensub.login(username,password) assert type(token)==str except: print "Invalid username or password.\n" sys.exit() else: print "Login Successful\n" else: try: token = opensub.login() assert type(token)==str except: print "Check Internet Connection" sys.exit() #get file list movie_list = get_list(path) #Total Number of Movies num_movie = len(movie_list) #subtitle file for movies sub_list = [None]*num_movie #index number for movies whose imdbid are not yet found no_id_index = [] #imdb id of movies in movie list imdb_id_list = [None]*num_movie #subtitles id for movies in opensubtitles.org open_subs_id = [] #index for which subs are found in opensubtitles.org index_opensub = [] print "Total Files - {}".format(num_movie) if num_movie ==0: opensub.logout() print "Nothing to do here!" sys.exit() #get imdb id for movies whose hash is present in opensubapi print "Searching" result = opensub.check_movie_list(movie_list) if result: for i in xrange(num_movie): if result[i]: imdb_id_list[i] = result[i]['MovieImdbID'] print "Downloading Subs" subdb_download(result,num_movie,movie_list,sub_list,subdb) #get movies which are present in opensub database by name or hash print "\nSearching Subs" result = opensub.search_sub_list(movie_list) len_res = len(result) for i in xrange(num_movie): if i >= len_res or result[i] == None: if not imdb_id_list[i]: no_id_index.append(i) else: if not imdb_id_list[i]: imdb_id_list[i] = result[i]['IDMovieImdb'] if not sub_list[i]: open_subs_id.append(result[i]['IDSubtitleFile']) index_opensub.append(i) #Download Subs which are found in opensubtitles database print "Downloading Subs" opensub_download(open_subs_id,index_opensub,sub_list,opensub) if len(no_id_index) != 0: print "\nSearching Info" no_id_file = [] for index in no_id_index: no_id_file.append(movie_list[index]) id_list = imdb.get_imdb_id(no_id_file) for ids,index in zip(id_list,no_id_index): imdb_id_list[index] = ids #get info from imdb about movies in movie list print "\nGetting Information" info_list = imdb.get_info(["tt"+"0"*(7-len(ids))+ids if ids else None for ids in imdb_id_list]) #Now, sub_list = subtitles for corresponding movies in movie_list # info_list = info for correspoding movies in movie_list if len(info_list) != len(sub_list) != num_movie: print "ERROR" sys.exit() no_sub_imdb_id = [] no_sub_imdb_id_index = [] for i in xrange(num_movie): if imdb_id_list[i] != None and sub_list[i] == None: no_sub_imdb_id.append(imdb_id_list[i]) no_sub_imdb_id_index.append(i) if opensub.get_down_lim() <= 0: print "Download Limit Reached!\nTry again after 24 hours\n" elif len(no_sub_imdb_id) != 0: conf = raw_input("\nWARNING: Experimental\nOnly proceed if the names of your file are not misleading \ like videoplayback, movie, s9e8 etc.\nDo you wish to use this feature?(y/n): ") if conf.lower() in ['yes','y']: opensub_download_id(no_sub_imdb_id,no_sub_imdb_id_index,sub_list,opensub) #Final - sub_list - subtitles of movies in movie_list #Final - info_list - info of movies in movie_list print "Saving" #dictionary with key as id of series and corresponding value as name of series. series_dict={} try: for num in xrange(num_movie): path = movie_list[num] base_path,name = os.path.split(path) base_name,ext = os.path.splitext(name) info = info_list[num] sub = sub_list[num] log.write("\nCurrently Processing - {}\n".format(path)) try: title = normalize('NFKD',info['Title']).encode('ascii','ignore') new_name = title except: new_name = base_name else: if info['Type']=='series': continue elif info['Type'] == 'episode': Season = info['Season'] Episode = info['Episode'] if Season.isdigit() and Episode.isdigit(): try: series_id = str(info['seriesID']) try: Series_name = series_dict[series_id] except: Series_name = normalize('NFKD',imdb.get_info([series_id])[0]['Title']).encode('ascii','ignore') if Series_name: series_dict[series_id] = Series_name except: Series_name = "" len_season = 2 len_episode = 2 if len(Episode) > len_episode: new_name = "{0} S{1:0>2}E{2} {3}".format(Series_name,str(Season),str(Episode),title) else: new_name = "{0} S{1:0>2}E{2:0>2} {3}".format(Series_name,str(Season),str(Episode),title) #Removing forbidden characters from files (Windows forbidden) new_name = str(new_name).translate(None,FORBIDDEN_CHARS).lstrip() #saving save(base_path,base_name,new_name,ext,sub,info,log) except: opensub.logout() raise log.write("-"*120) log.close() opensub.logout() print("\nDone!") print("Changes done are stored in {}\n".format(log_file)) print(DEV_NOTE) if RUNNING_AS_WINDOW: raw_input("Press any key to exit...") except BaseException as e: if not type(e).__name__ in ["SystemExit","KeyboardInterrupt"]: print "\nOops...An Error Occured!\n" log.write("\nERROR:\n") log.write(traceback.format_exc()) print "Error information stored in {}".format(log_file) print(DEV_NOTE) log.write("\n"+"-"*120) log.close() if RUNNING_AS_WINDOW: raw_input("Press any key to exit...") return
if not sub_list[i]: open_subs_id.append(result[i]['IDSubtitleFile']) index_opensub.append(i) #Download Subs which are found in opensubtitles database print "Downloading Subs" opensub_download(open_subs_id,index_opensub,sub_list) if len(no_id_index) != 0: print "\nSearching Info" no_id_file = [] for index in no_id_index: no_id_file.append(movie_list[index]) id_list = imdb.get_imdb_id(no_id_file) for ids,index in zip(id_list,no_id_index): imdb_id_list[index] = ids #get info from imdb about movies in movie list print "\nGetting Information" info_list = imdb.get_info(["tt"+"0"*(7-len(ids))+ids if ids else None for ids in imdb_id_list]) #Now, sub_list = subtitles for corresponding movies in movie_list # info_list = info for correspoding movies in movie_list if len(info_list) != len(sub_list) != num_movie: print "ERROR" sys.exit() no_sub_imdb_id = []