init
This commit is contained in:
commit
0edf5c544f
4 changed files with 113 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
.venv
|
37
main.py
Normal file
37
main.py
Normal file
|
@ -0,0 +1,37 @@
|
|||
import requests
|
||||
from flask import Flask, jsonify, render_template
|
||||
|
||||
users = {"local_klink": "Francis"}
|
||||
|
||||
|
||||
def get_data():
|
||||
res = requests.get("https://botbattle.be/api/leaderboard")
|
||||
return res.json()
|
||||
|
||||
|
||||
def filter_date(data):
|
||||
data = sorted(data, key=lambda x: x["elo"], reverse=True)
|
||||
filtered = list(filter(lambda x: x["username"] in users.keys(), data))
|
||||
[dict.update(item, position=index + 1, name=users[item["username"]]) for index, item in enumerate(filtered)]
|
||||
return filtered
|
||||
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
@app.route("/")
|
||||
def index():
|
||||
data = get_data()
|
||||
filtered = filter_date(data)
|
||||
return render_template("index.html", data=filtered)
|
||||
|
||||
|
||||
@app.route("/leaderboard")
|
||||
def leaderboard():
|
||||
data = get_data()
|
||||
filtered = filter_date(data)
|
||||
return jsonify(filtered)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run()
|
15
templates/header.html
Normal file
15
templates/header.html
Normal file
|
@ -0,0 +1,15 @@
|
|||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link
|
||||
rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/bulma@1.0.2/css/bulma.min.css"
|
||||
/>
|
||||
<title>Ceneka leaderboard</title>
|
||||
</head>
|
||||
<body>
|
||||
{% block content %} {% endblock %}
|
||||
</body>
|
||||
</html>
|
60
templates/index.html
Normal file
60
templates/index.html
Normal file
|
@ -0,0 +1,60 @@
|
|||
{% extends "header.html" %} {% block content %}
|
||||
<header>
|
||||
<h1 class="title">Leaderboard</h1>
|
||||
</header>
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Position</th>
|
||||
<th>Name</th>
|
||||
<th>Elo</th>
|
||||
<th>Username</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="leaderboard-body">
|
||||
{% for row in data %}
|
||||
<tr>
|
||||
<td>{{ row['position'] }}</td>
|
||||
<td>{{ row['name'] }}</td>
|
||||
<td>{{ row['elo'] }}</td>
|
||||
<td>{{ row['username'] }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<script>
|
||||
async function fetchLeaderboardData() {
|
||||
try {
|
||||
const response = await fetch("http://localhost:5000/leaderboard");
|
||||
if (!response.ok) return;
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
const tableBody = document.getElementById("leaderboard-body");
|
||||
|
||||
tableBody.innerHTML = "";
|
||||
|
||||
data.forEach((row) => {
|
||||
const tr = document.createElement("tr");
|
||||
tr.innerHTML = `
|
||||
<td>${row.position}</td>
|
||||
<td>${row.name}</td>
|
||||
<td>${row.elo}</td>
|
||||
<td>${row.username}</td>
|
||||
`;
|
||||
tableBody.appendChild(tr);
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Failed to fetch leaderboard data:", error);
|
||||
}
|
||||
}
|
||||
|
||||
// Poll the server every 5 seconds
|
||||
setInterval(fetchLeaderboardData, 5000);
|
||||
|
||||
// Initial load
|
||||
fetchLeaderboardData();
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
Loading…
Reference in a new issue