diff --git a/db.py b/db.py index 85505711..72e3071a 100644 --- a/db.py +++ b/db.py @@ -92,9 +92,10 @@ class Steam(Base): royal = relationship("Royal", lazy="joined") steam_id = Column(String, primary_key=True) - persona_name = Column(String, nullable=False) - avatar_hex = Column(String, nullable=False) + persona_name = Column(String) + avatar_hex = Column(String) trade_token = Column(String) + most_played_game_id = Column(BigInteger) def __repr__(self): return f"" @@ -105,6 +106,9 @@ class Steam(Base): else: return self.steam_id + def most_played_game_url(self): + return f"https://steamcdn-a.akamaihd.net/steam/apps/{self.most_played_game_id}/header.jpg" + def avatar_url(self): return f"https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/{self.avatar_hex[0:2]}/{self.avatar_hex}.jpg" @@ -151,7 +155,15 @@ class Steam(Base): j = r.json() self.persona_name = j["response"]["players"][0]["personaname"] self.avatar_hex = re.search(r"https://steamcdn-a\.akamaihd\.net/steamcommunity/public/images/avatars/../(.+).jpg", j["response"]["players"][0]["avatar"]).group(1) - + r = requests.get(f"http://api.steampowered.com/IPlayerService/GetRecentlyPlayedGames/v0001/?key={config['Steam']['api_key']}&steamid={self.steam_id}&format=json") + if r.status_code != 200: + raise RequestError(f"Steam returned {r.status_code}") + j = r.json() + if "response" not in j \ + or "games" not in j["response"] \ + or len(j["response"]["games"]) < 1: + raise RequestError(f"Game data is private") + self.most_played_game_id = j["response"]["games"][0]["appid"] class RocketLeague(Base): __tablename__ = "rocketleague" diff --git a/static/nryg.less b/static/nryg.less index 92fa310b..2fb98a86 100644 --- a/static/nryg.less +++ b/static/nryg.less @@ -48,6 +48,30 @@ input[type="text"], input[type="password"] { border-radius: 10px; margin: 4px; position: relative; + + .game-title { + grid-row: 2; + font-size: smaller; + } + + .game-score { + grid-row: 3; + } + + .player { + grid-row: 1; + font-size: large; + + a { + text-decoration: none; + } + + .player-image { + width: 32px; + height: 32px; + vertical-align: middle; + } + } } .osu { @@ -82,17 +106,9 @@ input[type="text"], input[type="password"] { grid-row: 1; grid-column-start: 1; grid-column-end: 4; - font-size: large; - - a { - text-decoration: none; - } .player-image { - width: 32px; - height: 32px; border-radius: 16px; - vertical-align: middle; } .player-name { @@ -101,15 +117,9 @@ input[type="text"], input[type="password"] { } .game-title { - grid-row: 2; - font-size: smaller; font-style: normal; } - .game-score { - grid-row: 3; - } - .standard { grid-column: 1; } @@ -145,39 +155,21 @@ input[type="text"], input[type="password"] { grid-row: 1; grid-column-start: 1; grid-column-end: 4; - font-size: large; - - a { - text-decoration: none; - } - - .player-image { - width: 32px; - height: 32px; - vertical-align: middle; - } .player-name { - vertical-align: middle; color: #ffffff; } } .game-title { - grid-row: 2; - font-size: smaller; text-align: center; color: #41abfa; } - .game-score { - grid-row: 3; - - img { - height: 36px; - display: block; - margin: auto; - } + .game-score img { + height: 36px; + display: block; + margin: auto; } .duel { @@ -210,30 +202,13 @@ input[type="text"], input[type="password"] { grid-row: 1; grid-column-start: 1; grid-column-end: 3; - font-size: large; - - a { - text-decoration: none; - } - - .player-image { - width: 32px; - height: 32px; - vertical-align: middle; - } .player-name { color: #ffffff; } } - .title { - grid-row: 2; - font-size: x-small; - } - - .number { - grid-row: 3; + .game-score.wins { font-size: x-large; } @@ -242,10 +217,6 @@ input[type="text"], input[type="password"] { text-align: center; } - .wins.number { - color: #ffb600; - } - .rank { grid-column: 2; grid-row-start: 2; @@ -283,22 +254,17 @@ input[type="text"], input[type="password"] { grid-row: 1; grid-column-start: 1; grid-column-end: 4; - font-size: large; - - a { - text-decoration: none; - } .player-image { - width: 32px; - height: 32px; - vertical-align: middle; border-radius: 16px; } } .level { grid-column: 1; + } + + .game-score.level { font-size: x-large; } @@ -314,14 +280,11 @@ input[type="text"], input[type="password"] { grid-column: 4; } - .title { - grid-row: 2; - font-size: x-small; + .game-title { text-align: center; } - .value { - grid-row: 3; + .game-score { text-align: center; margin: auto; } @@ -329,4 +292,55 @@ input[type="text"], input[type="password"] { .rank { height: 40px; } +} + +.steam { + font-family: "Motiva Sans", sans-serif; + padding: 18px; + background: url("https://steamstore-a.akamaihd.net/public/images/v6/colored_body_top2.png?v=2") center; + + .player .player-name { + grid-row: 1; + grid-column: 1; + color: #ffffff; + } + + .buttons { + grid-row: 2; + grid-column-start: 1; + grid-column-end: 3; + } + + .game-banner { + grid-row: 1; + grid-column: 2; + text-align: right; + + img { + height: 58px; + border-radius: 4px; + } + } + + a { + text-decoration: none; + display: inline-block; + } + + .button { + background-color: rgba(0,0,0,0.4); + color: #9e9d9b; + width: 32px; + height: 32px; + border-radius: 4px; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + } + + .button:hover, .button:active { + background-color: rgba(102,192,244,0.4); + color: #ffffff; + } } \ No newline at end of file diff --git a/templates/minis/dota.html b/templates/minis/dota.html index 21e3e430..91aff469 100644 --- a/templates/minis/dota.html +++ b/templates/minis/dota.html @@ -1,15 +1,15 @@
-
+
Vittorie
-
+
{{ dota.wins }}
diff --git a/templates/minis/lol.html b/templates/minis/lol.html index b7dd7f5f..79c30303 100644 --- a/templates/minis/lol.html +++ b/templates/minis/lol.html @@ -10,40 +10,40 @@ {{ lol.summoner_name }}
-
+
LIVELLO
-
+
{{ lol.level }}
-
+
SOLO/DUO
-
+
{% if lol.solo_division is none %} - + {% else %} - + {% endif %}
-
+
FLEX
-
+
{% if lol.flex_division is none %} - + {% else %} - + {% endif %}
-
+
3V3
-
+
{% if lol.twtr_division is none %} - + {% else %} - + {% endif %}
diff --git a/templates/minis/rl.html b/templates/minis/rl.html index 50856cc7..8f7ecc73 100644 --- a/templates/minis/rl.html +++ b/templates/minis/rl.html @@ -4,7 +4,7 @@
- + {{ rl.steam.persona_name }} diff --git a/templates/minis/steam.html b/templates/minis/steam.html new file mode 100644 index 00000000..3e6909ef --- /dev/null +++ b/templates/minis/steam.html @@ -0,0 +1,45 @@ + + +
+
+ +
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ {% if steam.trade_token %} + +
+ +
+
+ {% endif %} +
+ {% if steam.most_played_game_id %} + +
+ +
+
+ {% endif %} +
+
\ No newline at end of file diff --git a/templates/profile.html b/templates/profile.html index 5ed951af..37614473 100644 --- a/templates/profile.html +++ b/templates/profile.html @@ -8,8 +8,8 @@

Profilo di {{ royal.username }}

- {% if osu %} - {% include "minis/osu.html" %} + {% if steam %} + {% include "minis/steam.html" %} {% endif %} {% if rl %} {% include "minis/rl.html" %} @@ -17,6 +17,9 @@ {% if dota %} {% include "minis/dota.html" %} {% endif %} + {% if osu %} + {% include "minis/osu.html" %} + {% endif %} {% if lol %} {% include "minis/lol.html" %} {% endif %} diff --git a/update.py b/update.py index 1ee44c00..e4f6a2f3 100644 --- a/update.py +++ b/update.py @@ -22,85 +22,85 @@ try: sleep_time = 1 - time.clock() + t time.sleep(sleep_time if sleep_time > 0 else 0) # Update Rocket League - print("ROCKET LEAGUE") - for user in session.query(db.RocketLeague).all(): - t = time.clock() - print(f"Updating {user.steam.royal.username}", end="\t\t", flush=True) - try: - user.update() - except errors.RequestError: - print("Request Error") - except errors.NotFoundError: - print("Not Found Error (?)") - else: - print("OK") - finally: - sleep_time = 1 - time.clock() + t - time.sleep(sleep_time if sleep_time > 0 else 0) - # Update Dota 2 - print("DOTA 2") - for user in session.query(db.Dota).all(): - t = time.clock() - print(f"Updating {user.steam.royal.username}", end="\t\t", flush=True) - try: - user.update() - except errors.RequestError: - print("Request Error") - except errors.NotFoundError: - print("Not Found Error (?)") - else: - print("OK") - finally: - sleep_time = 1 - time.clock() + t - time.sleep(sleep_time if sleep_time > 0 else 0) - # Update League of Legends - print("LEAGUE OF LEGENDS") - for user in session.query(db.LeagueOfLegends).all(): - t = time.clock() - print(f"Updating {user.royal.username}", end="\t\t", flush=True) - try: - user.update() - except errors.RequestError: - print("Request Error") - except errors.NotFoundError: - print("Not Found Error (?)") - else: - print("OK") - finally: - sleep_time = 1 - time.clock() + t - time.sleep(sleep_time if sleep_time > 0 else 0) - # Update Osu! - print("OSU!") - for user in session.query(db.Osu).all(): - t = time.clock() - print(f"Updating {user.royal.username}", end="\t\t", flush=True) - try: - user.update() - except errors.RequestError: - print("Request Error") - except errors.NotFoundError: - print("Not Found Error (?)") - else: - print("OK") - finally: - sleep_time = 1 - time.clock() + t - time.sleep(sleep_time if sleep_time > 0 else 0) - # Update Overwatch - print("OVERWATCH") - for user in session.query(db.Overwatch).all(): - t = time.clock() - print(f"Updating {user.royal.username}", end="\t\t", flush=True) - try: - user.update() - except errors.RequestError: - print("Request Error") - except errors.NotFoundError: - print("Not Found Error (?)") - else: - print("OK") - finally: - sleep_time = 1 - time.clock() + t - time.sleep(sleep_time if sleep_time > 0 else 0) + # print("ROCKET LEAGUE") + # for user in session.query(db.RocketLeague).all(): + # t = time.clock() + # print(f"Updating {user.steam.royal.username}", end="\t\t", flush=True) + # try: + # user.update() + # except errors.RequestError: + # print("Request Error") + # except errors.NotFoundError: + # print("Not Found Error (?)") + # else: + # print("OK") + # finally: + # sleep_time = 1 - time.clock() + t + # time.sleep(sleep_time if sleep_time > 0 else 0) + # # Update Dota 2 + # print("DOTA 2") + # for user in session.query(db.Dota).all(): + # t = time.clock() + # print(f"Updating {user.steam.royal.username}", end="\t\t", flush=True) + # try: + # user.update() + # except errors.RequestError: + # print("Request Error") + # except errors.NotFoundError: + # print("Not Found Error (?)") + # else: + # print("OK") + # finally: + # sleep_time = 1 - time.clock() + t + # time.sleep(sleep_time if sleep_time > 0 else 0) + # # Update League of Legends + # print("LEAGUE OF LEGENDS") + # for user in session.query(db.LeagueOfLegends).all(): + # t = time.clock() + # print(f"Updating {user.royal.username}", end="\t\t", flush=True) + # try: + # user.update() + # except errors.RequestError: + # print("Request Error") + # except errors.NotFoundError: + # print("Not Found Error (?)") + # else: + # print("OK") + # finally: + # sleep_time = 1 - time.clock() + t + # time.sleep(sleep_time if sleep_time > 0 else 0) + # # Update Osu! + # print("OSU!") + # for user in session.query(db.Osu).all(): + # t = time.clock() + # print(f"Updating {user.royal.username}", end="\t\t", flush=True) + # try: + # user.update() + # except errors.RequestError: + # print("Request Error") + # except errors.NotFoundError: + # print("Not Found Error (?)") + # else: + # print("OK") + # finally: + # sleep_time = 1 - time.clock() + t + # time.sleep(sleep_time if sleep_time > 0 else 0) + # # Update Overwatch + # print("OVERWATCH") + # for user in session.query(db.Overwatch).all(): + # t = time.clock() + # print(f"Updating {user.royal.username}", end="\t\t", flush=True) + # try: + # user.update() + # except errors.RequestError: + # print("Request Error") + # except errors.NotFoundError: + # print("Not Found Error (?)") + # else: + # print("OK") + # finally: + # sleep_time = 1 - time.clock() + t + # time.sleep(sleep_time if sleep_time > 0 else 0) except KeyboardInterrupt: pass finally: diff --git a/webserver.py b/webserver.py index 387dbd98..8a6d8e66 100644 --- a/webserver.py +++ b/webserver.py @@ -32,12 +32,13 @@ def page_profile(name: str): db_session.close() abort(404) return + steam = db_session.query(db.Steam).filter_by(royal=user).one_or_none() osu = db_session.query(db.Osu).filter_by(royal=user).one_or_none() rl = db_session.query(db.RocketLeague).join(db.Steam).filter_by(royal=user).one_or_none() dota = db_session.query(db.Dota).join(db.Steam).filter_by(royal=user).one_or_none() lol = db_session.query(db.LeagueOfLegends).filter_by(royal=user).one_or_none() db_session.close() - return render_template("profile.html", royal=user, osu=osu, rl=rl, dota=dota, lol=lol) + return render_template("profile.html", royal=user, osu=osu, rl=rl, dota=dota, lol=lol, steam=steam) @app.route("/login")