mirror of
https://github.com/krateng/maloja.git
synced 2023-08-10 21:12:55 +03:00
Added bare-bones experimental compare feature
This commit is contained in:
parent
aeaaf3a8e9
commit
8a80c265cd
@ -239,7 +239,7 @@ def info():
|
|||||||
"name":settings.get_settings("NAME"),
|
"name":settings.get_settings("NAME"),
|
||||||
"artists":{
|
"artists":{
|
||||||
chartentry["artist"]:round(chartentry["scrobbles"] * 100 / totalscrobbles,3)
|
chartentry["artist"]:round(chartentry["scrobbles"] * 100 / totalscrobbles,3)
|
||||||
for chartentry in get_charts_artists() if chartentry["scrobbles"]/totalscrobbles >= 0.001}
|
for chartentry in get_charts_artists() if chartentry["scrobbles"]/totalscrobbles >= 0}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
65
website/compare.html
Normal file
65
website/compare.html
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<title>Maloja - Compare</title>
|
||||||
|
<style>
|
||||||
|
.comparecircle {
|
||||||
|
height:500px;
|
||||||
|
width:500px;
|
||||||
|
border-radius:250px;
|
||||||
|
border: 1px solid rgba(245,245,220,0.3);
|
||||||
|
margin:auto;
|
||||||
|
margin-top:100px;
|
||||||
|
text-align:center;
|
||||||
|
line-height:500px;
|
||||||
|
font-size:60px;
|
||||||
|
color:black;
|
||||||
|
/* background-image: linear-gradient(to right,KEY_CIRCLE_CSS); */
|
||||||
|
background-image: radial-gradient(#KEY_CICLE_COLOR KEY_FULLMATCHpx, transparent KEY_PARTIALMATCHpx);
|
||||||
|
}
|
||||||
|
|
||||||
|
table tr td:first-child {
|
||||||
|
text-align: left;
|
||||||
|
padding:20px;
|
||||||
|
}
|
||||||
|
table tr td {
|
||||||
|
text-align: center;
|
||||||
|
padding:20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table tr td:last-child {
|
||||||
|
text-align: right;
|
||||||
|
padding:20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<table style="width:99%;">
|
||||||
|
<tr>
|
||||||
|
<td><h1>KEY_NAME_SELF</h1></td>
|
||||||
|
<td>
|
||||||
|
<div class="comparecircle">
|
||||||
|
KEY_MATCH%
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td><h1>KEY_NAME_OTHER</h1></td>
|
||||||
|
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td>
|
||||||
|
<td style="font-size:70%">
|
||||||
|
The size of the circle shows matching music taste.
|
||||||
|
The fuzziness of its border indicates differences in quantity.
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
80
website/compare.py
Normal file
80
website/compare.py
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
import urllib
|
||||||
|
import database
|
||||||
|
import json
|
||||||
|
|
||||||
|
def instructions(keys):
|
||||||
|
|
||||||
|
compareto = keys.get("to")
|
||||||
|
compareurl = compareto + "/api/info"
|
||||||
|
|
||||||
|
response = urllib.request.urlopen(compareurl)
|
||||||
|
strangerinfo = json.loads(response.read())
|
||||||
|
|
||||||
|
owninfo = database.info()
|
||||||
|
|
||||||
|
artists = {}
|
||||||
|
|
||||||
|
for a in owninfo["artists"]:
|
||||||
|
artists[a.lower()] = {"name":a,"self":int(owninfo["artists"][a]*1000),"other":0}
|
||||||
|
|
||||||
|
for a in strangerinfo["artists"]:
|
||||||
|
artists[a.lower()] = artists.setdefault(a.lower(),{"name":a,"self":0})
|
||||||
|
artists[a.lower()]["other"] = int(strangerinfo["artists"][a]*1000)
|
||||||
|
|
||||||
|
for a in artists:
|
||||||
|
common = min(artists[a]["self"],artists[a]["other"])
|
||||||
|
artists[a]["self"] -= common
|
||||||
|
artists[a]["other"] -= common
|
||||||
|
artists[a]["common"] = common
|
||||||
|
|
||||||
|
best = sorted((a for a in artists),key=lambda x: artists[x.lower()]["common"],reverse=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
result = {
|
||||||
|
"unique_self":sum(artists[a]["self"] for a in artists if artists[a]["common"] == 0),
|
||||||
|
"more_self":sum(artists[a]["self"] for a in artists if artists[a]["common"] != 0),
|
||||||
|
# "common":{
|
||||||
|
# **{
|
||||||
|
# artists[a]["name"]:artists[a]["common"]
|
||||||
|
# for a in best[:3]},
|
||||||
|
# None: sum(artists[a]["common"] for a in artists if a not in best[:3])
|
||||||
|
# },
|
||||||
|
"common":sum(artists[a]["common"] for a in artists),
|
||||||
|
"more_other":sum(artists[a]["other"] for a in artists if artists[a]["common"] != 0),
|
||||||
|
"unique_other":sum(artists[a]["other"] for a in artists if artists[a]["common"] == 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
total = sum(result[c] for c in result)
|
||||||
|
|
||||||
|
percentages = {c:result[c]*100/total for c in result}
|
||||||
|
css = []
|
||||||
|
|
||||||
|
cumulative = 0
|
||||||
|
for color,category in [
|
||||||
|
("rgba(255,255,255,0.2)","unique_self"),
|
||||||
|
("rgba(255,255,255,0.5)","more_self"),
|
||||||
|
("white","common"),
|
||||||
|
("rgba(255,255,255,0.5)","more_other"),
|
||||||
|
("rgba(255,255,255,0.2)","unique_other")]:
|
||||||
|
cumulative += percentages[category]
|
||||||
|
css.append(color + " " + str(cumulative) + "%")
|
||||||
|
|
||||||
|
|
||||||
|
fullmatch = percentages["common"]
|
||||||
|
partialmatch = percentages["more_self"] + percentages["more_other"]
|
||||||
|
match = fullmatch + (partialmatch)/2
|
||||||
|
pixel_fullmatch = fullmatch * 2.5
|
||||||
|
pixel_partialmatch = (fullmatch+partialmatch) * 2.5
|
||||||
|
|
||||||
|
matchcolor = format(int(min(1,match/50)*255),"x") * 2 + format(int(max(0,match/50-1)*255),"x")
|
||||||
|
|
||||||
|
return {
|
||||||
|
"KEY_CIRCLE_CSS":",".join(css),
|
||||||
|
"KEY_CICLE_COLOR":matchcolor,
|
||||||
|
"KEY_MATCH":str(round(match,2)),
|
||||||
|
"KEY_FULLMATCH":str(int(pixel_fullmatch)),
|
||||||
|
"KEY_PARTIALMATCH":str(int(pixel_partialmatch)),
|
||||||
|
"KEY_NAME_SELF":owninfo["name"],
|
||||||
|
"KEY_NAME_OTHER":strangerinfo["name"],
|
||||||
|
},[]
|
Loading…
Reference in New Issue
Block a user