Add script for scrobbling physical albums
parent
cc87be8be9
commit
3ac23d3ed2
@ -1,3 +1,4 @@
|
|||||||
|
albums.py
|
||||||
prompts.html
|
prompts.html
|
||||||
prompts.org
|
prompts.org
|
||||||
__pycache__/*
|
__pycache__/*
|
@ -0,0 +1,119 @@
|
|||||||
|
import pylast,random,re,sys,time
|
||||||
|
import albums
|
||||||
|
|
||||||
|
network = pylast.LastFMNetwork(api_key=albums.apikey, api_secret=albums.apisecret, username="litrovers", password_hash=pylast.md5(albums.pw)) # https://input.sh/scrobbling-live-sets-into-last-fm-using-python/
|
||||||
|
|
||||||
|
thealbums = sorted(albums.albums,key=lambda d: d["name"])
|
||||||
|
# albums = sorted(albums,key=lambda d: d["artist"])
|
||||||
|
|
||||||
|
def countdown(t): # https://stackoverflow.com/a/25189629
|
||||||
|
while t:
|
||||||
|
mins, secs = divmod(t, 60)
|
||||||
|
timeformat = '{:02d}:{:02d}'.format(mins, secs)
|
||||||
|
print(timeformat, end='\r')
|
||||||
|
time.sleep(1)
|
||||||
|
t -= 1
|
||||||
|
|
||||||
|
def scrobble(thealbum):
|
||||||
|
for album in thealbums:
|
||||||
|
if thealbum == album["code"]:
|
||||||
|
i = 0
|
||||||
|
for tracklist in album["tracks"]:
|
||||||
|
i += 1
|
||||||
|
for item in tracklist:
|
||||||
|
if " :: " in item:
|
||||||
|
theartist = re.sub(" :: .*","",item)
|
||||||
|
thetrack = re.sub(".* :: ","",item)
|
||||||
|
else:
|
||||||
|
theartist = album["artist"]
|
||||||
|
thetrack = item
|
||||||
|
# last_api_call = network.scrobble(theartist,thetrack,int(time.time()))
|
||||||
|
print("Scrobbled " + item)
|
||||||
|
# countdown(tracklist[item])
|
||||||
|
if i < len(album["tracks"]):
|
||||||
|
input("Press enter after changing side")
|
||||||
|
|
||||||
|
def query_yes_no(question, default="yes"): # https://code.activestate.com/recipes/577058/
|
||||||
|
"""Ask a yes/no question via raw_input() and return their answer.
|
||||||
|
|
||||||
|
"question" is a string that is presented to the user.
|
||||||
|
"default" is the presumed answer if the user just hits <Enter>.
|
||||||
|
It must be "yes" (the default), "no" or None (meaning
|
||||||
|
an answer is required of the user).
|
||||||
|
|
||||||
|
The "answer" return value is one of "yes" or "no".
|
||||||
|
"""
|
||||||
|
valid = {"yes":"yes", "y":"yes", "ye":"yes",
|
||||||
|
"no":"no", "n":"no"}
|
||||||
|
if default == None:
|
||||||
|
prompt = " [y/n] "
|
||||||
|
elif default == "yes":
|
||||||
|
prompt = " [Y/n] "
|
||||||
|
elif default == "no":
|
||||||
|
prompt = " [y/N] "
|
||||||
|
else:
|
||||||
|
raise ValueError("invalid default answer: '%s'" % default)
|
||||||
|
while 1:
|
||||||
|
sys.stdout.write(question + prompt)
|
||||||
|
choice = input().lower()
|
||||||
|
if default is not None and choice == '':
|
||||||
|
return default
|
||||||
|
elif choice in valid.keys():
|
||||||
|
return valid[choice]
|
||||||
|
else:
|
||||||
|
sys.stdout.write("Please respond with 'yes' or 'no' "\
|
||||||
|
"(or 'y' or 'n').\n")
|
||||||
|
|
||||||
|
def selectFromDict(options, name): # https://stackoverflow.com/a/64536882
|
||||||
|
index = 0
|
||||||
|
indexValidList = []
|
||||||
|
print('Select an ' + name + ':')
|
||||||
|
for optionName in options:
|
||||||
|
index = index + 1
|
||||||
|
indexValidList.extend([options[optionName]])
|
||||||
|
print(str(index) + ') ' + optionName)
|
||||||
|
inputValid = False
|
||||||
|
while not inputValid:
|
||||||
|
inputRaw = input(name + ': ')
|
||||||
|
inputNo = int(inputRaw) - 1
|
||||||
|
if inputNo > -1 and inputNo < len(indexValidList):
|
||||||
|
selected = indexValidList[inputNo]
|
||||||
|
# print('Selected ' + name + ': ' + selected)
|
||||||
|
inputValid = True
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print('Please select a valid ' + name + ' number')
|
||||||
|
return selected
|
||||||
|
|
||||||
|
def choosealbum():
|
||||||
|
randomer = query_yes_no("Pick an album for me?","no")
|
||||||
|
if randomer == "yes":
|
||||||
|
revision = "yes"
|
||||||
|
while revision == "yes":
|
||||||
|
chosen = random.choice(thealbums)
|
||||||
|
thechosen = chosen["code"]
|
||||||
|
try:
|
||||||
|
print(chosen["album artist"] + ": " + chosen["name"])
|
||||||
|
except:
|
||||||
|
print(chosen["artist"] + ": " + chosen["name"])
|
||||||
|
revision = query_yes_no("Roll again?","no")
|
||||||
|
else:
|
||||||
|
process = False
|
||||||
|
while process == False:
|
||||||
|
firstletter = input("Type the first letter of the album name\n")
|
||||||
|
letteralbums = {}
|
||||||
|
for album in thealbums:
|
||||||
|
process = True
|
||||||
|
if album["name"][0].lower() == str(firstletter):
|
||||||
|
try:
|
||||||
|
letteralbums[album["name"] + " (" + album["album artist"] + ")"] = album["code"]
|
||||||
|
except:
|
||||||
|
letteralbums[album["name"] + " (" + album["artist"] + ")"] = album["code"]
|
||||||
|
if len(letteralbums) == 0:
|
||||||
|
process = False
|
||||||
|
print("No albums found")
|
||||||
|
thechosen = selectFromDict(letteralbums, "album")
|
||||||
|
scrobble(thechosen)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
choosealbum()
|
Loading…
Reference in New Issue