Adding most popular matching track when no track matches duration is a bad idea...
Hi,
Made a slight modif in my local base to avoid adding a random matching track when there is no track matching the exact duration. It's mostly the case with remixes and extended versions that are not (yet) available on Spotify. I personally prefer skipping these tracks instead of adding a random version of them:
def best_of_multiple_matches(source_track, found_tracks):
counter = 1
duration_matches = [
0,
]
for track in found_tracks:
print("\t\t\t[+] Match {}: {}".format(counter, track["id"]))
if do_durations_match(source_track["duration_ms"], track["duration_ms"]):
duration_matches[0] += 1
duration_matches.append(track)
counter += 1
if duration_matches[0] == 1:
best_track = duration_matches.pop()["id"]
print(
"\t\t\t[+] Only one exact match with matching duration, going with that one: {}".format(
best_track
)
)
return best_track
else:
if duration_matches[0] == 0:
print("No track with matching duration, ignoring track !")
else:
# TODO: Popularity does not always yield the correct result
best_track = most_popular_track(found_tracks)
print(
"\t\t\t[+] Multiple exact matches with matching durations, going with the most popular one: {}".format(
best_track
)
)
return best_track
Modified a slight bit as well the duration matching as it happens quite often to have around 1 seconds of duration difference between platforms:
def do_durations_match(source_track_duration, found_track_duration):
if abs(source_track_duration - found_track_duration) < 1000:
print("\t\t\t\t[+] Durations match")
return True
else:
print("\t\t\t\t[!] Durations do not match")
return False
I changed the code to just return the first match if there is no exact match. I was running into the issue where usually the first match was correct but it was skipping it because spotify didnt have an extended version or the time was different by more than one second. This has yielded the best results for me.
`def best_of_multiple_matches(source_track, found_tracks):
counter = 1
duration_matches = [0, ]
for track in found_tracks:
print("\t\t\t[+] Match {}: {}".format(counter, track["id"]))
if do_durations_match(source_track["duration_ms"], track["duration_ms"]):
duration_matches[0] += 1
duration_matches.append(track)
counter += 1
if duration_matches[0] == 1:
best_track = duration_matches.pop()["id"]
print("\t\t\t[+] Only one exact match with matching duration, going with that one: {}".format(best_track))
return best_track
# Modified: Return the first match instead of the most popular
best_track = found_tracks[0]["id"]
print("\t\t\t[+] No exact match with duration, going with the first match: {}".format(best_track))
return best_track`