def search_track(self, tr): sFktname = "search_track" # build search term. so connect artist and # title, delete some characters and split on # white spaces search_term_list = tr.title.lower() + " " + tr.artist.lower() search_term_list = search_term_list.replace("(","").replace(")","") search_term_list = search_term_list.split() ePrint(2, sFktname, "looking for term: {}".format(search_term_list)) # to find the track, we constuct a ranking, with the term on the highest rank, wich # made the most hits max_hits = 0 match_list = [] for item in self.tunes: item_hits = 0 # create target term search_target_list = item.artist.lower() + " " + item.title.lower() search_target_list = search_target_list.split() # match for s in search_term_list: if s in search_target_list: item_hits += 1 # create a matchcount, item tupel match_list.append((item_hits, item)) if len(match_list) == 0: return None # sort matchlist match_list = sorted(match_list, key = lambda tup: tup[0], reverse = True) return [match_list[0][1]]
def search_release (term): sFktname = "search_release" term = term.replace(" ","+") ePrint(1, sFktname, "search the web") # search on chemical query_chemical = chemical.chemical() results = query_chemical.search(term) # case if nothing was found if len(results) == 0: ePrint(1, sFktname, "nothing found on chemical") return None # case, if more then one was found if len(results) > 1: ePrint(1, sFktname, "Multiple Links found. Make a Choice\n") k = 0 for i in results: print("{0:3d}:\t{1}".format(k , results[k][1])) k = k + 1 print("\n") choice = int(input(" <-- ")) results = [ [ results[choice][0], results[choice][1] ] ] # create an release instance and feed it rel = release() rel.shortinfo = results[0][1] rel.infopage = results[0][0] rel = query_chemical.getReleaseInfo(rel) return rel
def search_clever (tr): sFktname = "search_clever" # build search-term if tr.artist != "" and tr.title != "": term = tr.artist + "+" + tr.title term = term.replace("&","") term = term.replace("(","") term = term.replace(")","") term = term.replace(" ","+") # first try to find the track in the release # cache if len(cache.rels_found) > 0: for rel in cache.rels_found: ePrint(1, sFktname, "search in cache") # search track in release res = rel.search_track(tr) # nothing found if res == None: continue # more than one item found if len(res) > 1: ePrint(1, sFktname, "Multiple tracks found in release, make a choice") k = 0 for t in res: print("{0:3d}:\t{1}".format(k , t)) k = k + 1 print("\n") choice = int(input(" <-- ")) res = res[choice] return res return res[0] ePrint(1, sFktname, "search the web") # search on chemical query_chemical = chemical.chemical() results = query_chemical.search(term) # case if nothing was found if len(results) == 0: ePrint(1, sFktname, "nothing found on chemical") return None # case, if more then one was found if len(results) > 1: ePrint(1, sFktname, "Multiple Links found. Make a Choice\n") k = 0 for i in results: print("{0:3d}:\t{1}".format(k , results[k][1])) k = k + 1 print("\n") choice = int(input(" <-- ")) results = [ [ results[choice][0], results[choice][1] ] ] # create an release instance and feed it rel = release() rel.shortinfo = results[0][1] rel.infopage = results[0][0] rel = query_chemical.getReleaseInfo(rel) # append the release to the cache cache.rels_found.append(rel) # search track in release res = rel.search_track(tr) # nothing found if res == None: ePrint(1, sFktname, "Track not found in release page") return None # more than one item found if len(res) > 1: ePrint(1, sFktname, "Multible tracks found in release, make a choice") k = 0 for t in res: print("{0:3d}:\t{1}".format(k , t)) k = k + 1 print("\n") choice = int(input(" <-- ")) res = res[choice] return res[0]
def main (): sFktname = "main" # handle arguments try: opts, args = getopt.getopt(sys.argv[1:], "hcws:p:", ["help", "copy", "use-chemical-format", "search=", "pattern="]) except: print_help () sys.exit(2) # handle options for o, a in opts: if o in ("-h", "--help"): print_help() sys.exit(2) elif o in ("-c", "--copy"): settings.copymode = True elif o in ("-p", "--pattern"): settings.pattern_user = a elif o in ("-w", "--use-chemical-format"): settings.use_chemical_format = True elif o in ("-s", "--search"): settings.search_term = a # handle arguments if len(args) == 0: ePrint(1, sFktname, "No Files specified") # check, whether files have valid paths for fn in args: if path.exists(fn) == False: ePrint(1, sFktname, "Path not found: {}".format(fn)) sys.exit(2) # if search_term is given search for it first # and if found append it to the cache if settings.search_term: rel = search_release(settings.search_term) if rel: cache.rels_found.append(rel) # enter main loop for fn in args: # fill pattern if settings.pattern_user: pat = pattern.pattern(settings.pattern_user) else: pat = pattern.pattern(settings.pattern_default) # try to get information from tags new_track = id3_to_track(fn) suffix = split_ld(fn) # we have flags in the pattern class to # determine wich keys are used res_t = None # currently we only can operate if we have some information if new_track.is_empty() == False: # if artist field is set if pat.artist: if new_track.artist == "": res_t = search_clever(new_track) if res_t: new_track.artist = res_t.artist else: ePrint(1, sFktname, "Cant determine Artist Field for: {}".format(fn)) continue pat.replace_artist(new_track.artist) # if title field is set if pat.title: if new_track.title == "": res_t = search_clever(new_track) if res_t: new_track.title = res_t.title else: ePrint(1, sFktname, "Cant determine title Field for: {}".format(fn)) continue pat.replace_title(new_track.title) # if key field is set if pat.key: if new_track.key == "": res_t = search_clever(new_track) if res_t: # map key if (res_t.key in settings.quint_map) and settings.use_chemical_format == None: new_track.key = settings.quint_map[res_t.key] else: new_track.key = res_t.key else: ePrint(1, sFktname, "Cant determine key Field for: {}".format(fn)) continue pat.replace_key(new_track.key) pat.replace_tn(new_track.tn) final_name = "{}.{}".format(pat.get_result(), suffix) else: final_name = fn ePrint(1, sFktname, "{} will be renamed to: {}".format(fn, final_name)) # rename or copy if fn == final_name: continue else: if settings.copymode: shutil.copy(fn, final_name) else: rename(fn, final_name)