mirror of
https://github.com/krateng/maloja.git
synced 2023-08-10 21:12:55 +03:00
Expanded start page
This commit is contained in:
parent
562c796a92
commit
9a4afe4b1f
30
database.py
30
database.py
@ -146,6 +146,16 @@ def get_scrobbles():
|
|||||||
|
|
||||||
return {"list":r} ##json can't be a list apparently???
|
return {"list":r} ##json can't be a list apparently???
|
||||||
|
|
||||||
|
@dbserver.route("/numscrobbles")
|
||||||
|
def get_scrobbles():
|
||||||
|
keys = FormsDict.decode(request.query)
|
||||||
|
|
||||||
|
r = db_query(artists=keys.getall("artist"),title=keys.get("title"),since=keys.get("since"),to=keys.get("to"),associated=(keys.get("associated")!=None))
|
||||||
|
r.reverse()
|
||||||
|
|
||||||
|
return {"amount":len(r)}
|
||||||
|
|
||||||
|
|
||||||
@dbserver.route("/tracks")
|
@dbserver.route("/tracks")
|
||||||
def get_tracks():
|
def get_tracks():
|
||||||
keys = FormsDict.decode(request.query)
|
keys = FormsDict.decode(request.query)
|
||||||
@ -168,6 +178,10 @@ def get_artists():
|
|||||||
|
|
||||||
return {"list":ARTISTS}
|
return {"list":ARTISTS}
|
||||||
|
|
||||||
|
@dbserver.route("/amounts")
|
||||||
|
def get_amounts():
|
||||||
|
return {"scrobbles":len(SCROBBLES),"tracks":len(TRACKS),"artists":len(ARTISTS)}
|
||||||
|
|
||||||
@dbserver.route("/charts/artists")
|
@dbserver.route("/charts/artists")
|
||||||
def get_charts_artists():
|
def get_charts_artists():
|
||||||
since = request.query.get("since")
|
since = request.query.get("since")
|
||||||
@ -735,6 +749,22 @@ def getTimestamps(f,t):
|
|||||||
t = [tod.year,tod.month,tod.day]
|
t = [tod.year,tod.month,tod.day]
|
||||||
|
|
||||||
|
|
||||||
|
if isinstance(f, str) and f.lower() == "month":
|
||||||
|
tod = datetime.datetime.utcnow()
|
||||||
|
f = [tod.year,tod.month]
|
||||||
|
if isinstance(t, str) and t.lower() == "month":
|
||||||
|
tod = datetime.datetime.utcnow()
|
||||||
|
t = [tod.year,tod.month]
|
||||||
|
|
||||||
|
|
||||||
|
if isinstance(f, str) and f.lower() == "year":
|
||||||
|
tod = datetime.datetime.utcnow()
|
||||||
|
f = [tod.year]
|
||||||
|
if isinstance(t, str) and t.lower() == "year":
|
||||||
|
tod = datetime.datetime.utcnow()
|
||||||
|
t = [tod.year]
|
||||||
|
|
||||||
|
|
||||||
if isinstance(f, str):
|
if isinstance(f, str):
|
||||||
f = [int(x) for x in f.split("/")]
|
f = [int(x) for x in f.split("/")]
|
||||||
|
|
||||||
|
@ -84,6 +84,7 @@ def static_image(pth):
|
|||||||
@webserver.route("/<name:re:.*\\.css>")
|
@webserver.route("/<name:re:.*\\.css>")
|
||||||
@webserver.route("/<name:re:.*\\.png>")
|
@webserver.route("/<name:re:.*\\.png>")
|
||||||
@webserver.route("/<name:re:.*\\.jpeg>")
|
@webserver.route("/<name:re:.*\\.jpeg>")
|
||||||
|
@webserver.route("/<name:re:.*\\.ico>")
|
||||||
def static(name):
|
def static(name):
|
||||||
return static_file("website/" + name,root="")
|
return static_file("website/" + name,root="")
|
||||||
|
|
||||||
|
15
utilities.py
15
utilities.py
@ -272,6 +272,21 @@ def getArtistInfo(artist):
|
|||||||
cachedArtists[artist] = result["image"]
|
cachedArtists[artist] = result["image"]
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
def getTracksInfo(trackobjectlist):
|
||||||
|
|
||||||
|
threads = []
|
||||||
|
|
||||||
|
for track in trackobjectlist:
|
||||||
|
t = Thread(target=getTrackInfo,args=(track["artists"],track["title"],))
|
||||||
|
t.start()
|
||||||
|
threads.append(t)
|
||||||
|
|
||||||
|
for t in threads:
|
||||||
|
t.join()
|
||||||
|
|
||||||
|
|
||||||
|
return [getTrackInfo(t["artists"],t["title"]) for t in trackobjectlist]
|
||||||
|
|
||||||
def getArtistsInfo(artistlist):
|
def getArtistsInfo(artistlist):
|
||||||
|
|
||||||
threads = []
|
threads = []
|
||||||
|
BIN
website/favicon.ico
Normal file
BIN
website/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
BIN
website/favicon.png
Normal file
BIN
website/favicon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
@ -9,38 +9,86 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<h1>Top Artists</h1>
|
<span class="stats">Scrobbles today</span> KEY_SCROBBLES_TODAY
|
||||||
|
<br/><span class="stats">Scrobbles this month</span> KEY_SCROBBLES_MONTH
|
||||||
|
<br/><span class="stats">Scrobbles overall</span> KEY_SCROBBLES_TOTAL
|
||||||
|
|
||||||
|
<h1><a href="/topartists">Top Artists</a></h1>
|
||||||
<table class="tiles_top">
|
<table class="tiles_top">
|
||||||
<tr>
|
<tr>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
<td>
|
<td>
|
||||||
<table class="tiles_2x2 tiles_sub">
|
<table class="tiles_2x2 tiles_sub">
|
||||||
<tr>
|
<tr>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<table class="tiles_3x3 tiles_sub">
|
<table class="tiles_3x3 tiles_sub">
|
||||||
<tr>
|
<tr>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION</span> KEY_ARTISTLINK</div></td>
|
<td><div style="background-image:url('KEY_ARTISTIMAGE')"><span class="stats">KEY_POSITION_ARTIST</span> KEY_ARTISTLINK</div></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<h1><a href="/toptracks">Top Tracks</a></h1>
|
||||||
|
<table class="tiles_top">
|
||||||
|
<tr>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
<td>
|
||||||
|
<table class="tiles_2x2 tiles_sub">
|
||||||
|
<tr>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<table class="tiles_3x3 tiles_sub">
|
||||||
|
<tr>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
|
<td><div style="background-image:url('KEY_TRACKIMAGE')"><span class="stats">KEY_POSITION_TRACK</span> KEY_TRACKLINK</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
@ -3,32 +3,69 @@ import json
|
|||||||
|
|
||||||
|
|
||||||
def replacedict(keys,dbport):
|
def replacedict(keys,dbport):
|
||||||
from utilities import getArtistInfo, getArtistsInfo
|
from utilities import getArtistInfo, getArtistsInfo, getTracksInfo
|
||||||
from htmlgenerators import artistLink, artistLinks, trackLink, scrobblesArtistLink, keysToUrl, pickKeys, clean
|
from htmlgenerators import artistLink, artistLinks, trackLink, scrobblesArtistLink, keysToUrl, pickKeys, clean
|
||||||
|
|
||||||
clean(keys)
|
max_show = 15
|
||||||
timekeys = pickKeys(keys,"since","to","in")
|
posrange = ["#" + str(i) for i in range(1,max_show)]
|
||||||
limitkeys = pickKeys(keys)
|
|
||||||
|
#clean(keys)
|
||||||
|
#timekeys = pickKeys(keys,"since","to","in")
|
||||||
|
#limitkeys = pickKeys(keys)
|
||||||
|
|
||||||
# get chart data
|
# get chart data
|
||||||
response = urllib.request.urlopen("http://localhost:" + str(dbport) + "/charts/artists?" + keysToUrl(timekeys,limitkeys))
|
|
||||||
|
# artists
|
||||||
|
response = urllib.request.urlopen("http://localhost:" + str(dbport) + "/charts/artists")
|
||||||
db_data = json.loads(response.read())
|
db_data = json.loads(response.read())
|
||||||
charts = db_data["list"][:50]
|
charts = db_data["list"][:max_show]
|
||||||
topartist = charts[0]["artist"]
|
topartist = charts[0]["artist"]
|
||||||
|
|
||||||
chartslist = [c["artist"] for c in charts]
|
artisttitles = [c["artist"] for c in charts]
|
||||||
#chartslistimg = [getArtistInfo(a).get("image") for a in chartslist]
|
#chartslistimg = [getArtistInfo(a).get("image") for a in chartslist]
|
||||||
chartslistimg = [info.get("image") for info in getArtistsInfo(chartslist)]
|
artistimages = [info.get("image") for info in getArtistsInfo(artisttitles)]
|
||||||
chartslistlink = [artistLink(a) for a in chartslist]
|
artistlinks = [artistLink(a) for a in artisttitles]
|
||||||
|
|
||||||
|
|
||||||
# get total amount of scrobbles
|
# tracks
|
||||||
response = urllib.request.urlopen("http://localhost:" + str(dbport) + "/scrobbles?" + keysToUrl(timekeys,limitkeys))
|
response = urllib.request.urlopen("http://localhost:" + str(dbport) + "/charts/tracks")
|
||||||
db_data = json.loads(response.read())
|
db_data = json.loads(response.read())
|
||||||
scrobblelist = db_data["list"]
|
charts = db_data["list"][:max_show]
|
||||||
scrobbles = len(scrobblelist)
|
|
||||||
|
trackobjects = [t["track"] for t in charts]
|
||||||
|
tracktitles = [t["title"] for t in trackobjects]
|
||||||
|
trackartists = [", ".join(t["artists"]) for t in trackobjects]
|
||||||
|
trackimages = [info.get("image") for info in getTracksInfo(trackobjects)]
|
||||||
|
tracklinks = [trackLink(t) for t in trackobjects]
|
||||||
|
|
||||||
|
|
||||||
|
# get scrobbles
|
||||||
|
#response = urllib.request.urlopen("http://localhost:" + str(dbport) + "/scrobbles")
|
||||||
|
#db_data = json.loads(response.read())
|
||||||
|
#scrobblelist = db_data["list"]
|
||||||
|
|
||||||
|
# get stats
|
||||||
|
response = urllib.request.urlopen("http://localhost:" +str(dbport) + "/numscrobbles?since=today")
|
||||||
|
stats = json.loads(response.read())
|
||||||
|
scrobbles_today = "<a href='/scrobbles?since=today'>" + str(stats["amount"]) + "</a>"
|
||||||
|
|
||||||
|
response = urllib.request.urlopen("http://localhost:" +str(dbport) + "/numscrobbles?since=month")
|
||||||
|
stats = json.loads(response.read())
|
||||||
|
scrobbles_month = "<a href='/scrobbles?since=month'>" + str(stats["amount"]) + "</a>"
|
||||||
|
|
||||||
|
response = urllib.request.urlopen("http://localhost:" +str(dbport) + "/numscrobbles?since=year")
|
||||||
|
stats = json.loads(response.read())
|
||||||
|
scrobbles_year = "<a href='/scrobbles?since=year'>" + str(stats["amount"]) + "</a>"
|
||||||
|
|
||||||
|
response = urllib.request.urlopen("http://localhost:" +str(dbport) + "/numscrobbles")
|
||||||
|
stats = json.loads(response.read())
|
||||||
|
scrobbles_total = "<a href='/scrobbles'>" + str(stats["amount"]) + "</a>"
|
||||||
|
#stats_tracks = "<a href='/toptracks'>" + str(stats["tracks"]) + "</a>"
|
||||||
|
#stats_artists = "<a href='/topartists'>" + str(stats["artists"]) + "</a>"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return {"KEY_ARTISTIMAGE":chartslistimg,"KEY_ARTISTNAME":chartslist,"KEY_ARTISTLINK":chartslistlink,"KEY_POSITION":["#" + str(i) for i in range(1,50)]}
|
return {"KEY_ARTISTIMAGE":artistimages,"KEY_ARTISTNAME":artisttitles,"KEY_ARTISTLINK":artistlinks,"KEY_POSITION_ARTIST":posrange,
|
||||||
|
"KEY_TRACKIMAGE":trackimages,"KEY_TRACKNAME":tracktitles,"KEY_TRACKLINK":tracklinks,"KEY_POSITION_TRACK":posrange,
|
||||||
|
"KEY_SCROBBLES_TODAY":scrobbles_today,"KEY_SCROBBLES_MONTH":scrobbles_month,"KEY_SCROBBLES_YEAR":scrobbles_year,"KEY_SCROBBLES_TOTAL":scrobbles_total}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user