listen.moe song history
10/1/2019
I had someone who listens to listen.moe complain that they had heard a song they liked but couldn't get the name of because they were driving. The website only gives you the last 3 songs played so I used their API to parse their song list and display every one that was played on a particular day in order. They found the song, and it sure is great.
getsongs.py
#!/usr/bin/python2.7 import json import urllib2 import codecs def request(url, header, jsonpayload): baseurl = "https://listen.moe/api/{}"; req = urllib2.Request(baseurl.format(url)); req.add_header("Content-Type", "application/json"); req.add_header("Accept", "application/vnd.listen.v4+json"); if header is not None: req.add_header(header[0], header[1]); response = urllib2.urlopen(req, json.dumps(jsonpayload) if jsonpayload is not None else None); return response; loginpayload = { "username": "name", "password": "password" } def main(): # login and get response with our token response = request("login", None, loginpayload); # extract token token = json.loads(response.read()); token = token["token"]; # request songs list response = request("songs", ["Authorization", "Bearer " + token], None); response = json.loads(response.read()); # dump song list to file with codecs.open("songs.json", 'w', encoding="utf-8") as f: json.dump(response, f, indent=2, sort_keys=True, ensure_ascii=False); exit(); if __name__ == "__main__": main();parse.py
#!/usr/bin/python2.7 import json date = "2019-01-09"; songs = []; def main(): infile = "songs.json"; with open(infile) as f: data = json.load(f) for song in data["songs"]: if date in song["lastPlayed"]: songs.append(song); # sort songs by timestamp songs.sort(key=lambda x:x["lastPlayed"]); for song in songs: print("{} last played {}".format(song["title"].encode("utf-8"), song["lastPlayed"])); if __name__ == "__main__": main();