7 Commits
v2.0 ... v.2.1

Author SHA1 Message Date
d07330891f Merge pull request #15 from JoshNotWright/feature/update-standings
Feature: Update NHL standings automatically
2024-02-18 22:42:50 -05:00
0412b07f35 app.py: add update_nhl_standings function and set to run every 5 min 2024-02-18 22:40:51 -05:00
2543036ddd update .gitignore: add nhl standings and remove from repo 2024-02-18 22:40:01 -05:00
c0f1be346c Merge pull request #14 from JoshNotWright/feature/better-refresh
Update styles.css: fix sections
2024-02-18 18:24:11 -05:00
1b376b4aa1 styles.css: fix sections 2024-02-18 18:23:27 -05:00
941871d766 Merge pull request #11 from JoshNotWright/feature/better-refresh
index.html: fix game score not appearing
2024-02-18 18:08:50 -05:00
7cc8913a00 index.html: fix game score not appearing 2024-02-18 18:08:01 -05:00
6 changed files with 29 additions and 25 deletions

3
.gitignore vendored
View File

@@ -1,2 +1,3 @@
/nhle_scoreboard_response.txt /nhle_scoreboard_response.txt
/nhle_standings_response.txt /nhle_standings_response.txt
/nhl_standings.db

12
app.py
View File

@@ -7,6 +7,7 @@ import threading
import time import time
import schedule import schedule
import json import json
from update_nhl_standings_db import update_nhl_standings
app = Flask(__name__) app = Flask(__name__)
@@ -39,8 +40,9 @@ def store_scoreboard_data():
global scoreboard_data global scoreboard_data
scoreboard_data = get_nhle_scoreboard() scoreboard_data = get_nhle_scoreboard()
# Schedule the task to run every 10 seconds # Schedule tasks
def schedule_task(): def schedule_tasks():
schedule.every(300).seconds.do(update_nhl_standings)
schedule.every(10).seconds.do(store_scoreboard_data) schedule.every(10).seconds.do(store_scoreboard_data)
while True: while True:
schedule.run_pending() schedule.run_pending()
@@ -157,9 +159,6 @@ def get_game_outcome(game_state, game):
return last_period_type return last_period_type
def calculate_game_priority(game): def calculate_game_priority(game):
if game["gameState"] in ["FINAL", "OFF", "PRE", "FUT"] or game["clock"]["inIntermission"]: if game["gameState"] in ["FINAL", "OFF", "PRE", "FUT"] or game["clock"]["inIntermission"]:
return 0 return 0
@@ -250,5 +249,6 @@ def get_scoreboard():
if __name__ == '__main__': if __name__ == '__main__':
store_scoreboard_data() store_scoreboard_data()
threading.Thread(target=schedule_task).start() update_nhl_standings()
threading.Thread(target=schedule_tasks).start()
serve(app, host="0.0.0.0", port=2897) serve(app, host="0.0.0.0", port=2897)

Binary file not shown.

View File

@@ -72,6 +72,7 @@ function generateGameBoxes(games, state) {
html += '<span class="team-power-play">' + game['Home Power Play'] + '</span>'; html += '<span class="team-power-play">' + game['Home Power Play'] + '</span>';
html += '</div>'; html += '</div>';
html += '<span class="team-score">' + game['Home Score'] + '</span>'; html += '<span class="team-score">' + game['Home Score'] + '</span>';
html += '</div>';
html += '<div class="game-info">'; html += '<div class="game-info">';
if (game['Intermission']) { if (game['Intermission']) {
html += '<div class="live-state-intermission">' html += '<div class="live-state-intermission">'
@@ -104,7 +105,7 @@ function generateGameBoxes(games, state) {
html += '<div class="live-time">' + game['Time Remaining'] + '</div>'; html += '<div class="live-time">' + game['Time Remaining'] + '</div>';
} }
html += '</div>'; html += '</div>';
html += '<div class="game-info>'; html += '<div class="game-info">';
html += '<strong>Game Score: </strong>' + game['Priority']; html += '<strong>Game Score: </strong>' + game['Priority'];
html += '</div>'; html += '</div>';
html += '</div>'; html += '</div>';

View File

@@ -76,9 +76,10 @@ h1 {
} }
.game-info { .game-info {
margin-top: 10px; margin-top: 12px;
color: #aaa; /* Lighten the text color */ color: #aaa; /* Lighten the text color */
text-align: center; text-align: center;
font-size: 14px;
} }
.game-info strong { .game-info strong {
@@ -171,7 +172,7 @@ h1 {
z-index: 1; /* Ensure the time box is above other content */ z-index: 1; /* Ensure the time box is above other content */
} }
.live-games-section { #live-games-section {
display: flex; display: flex;
align-items: start; align-items: start;
flex-wrap: wrap; flex-wrap: wrap;
@@ -179,7 +180,7 @@ h1 {
margin-top: 20px; margin-top: 20px;
} }
.pre-games-section { #pre-games-section {
display: flex; display: flex;
align-items: start; align-items: start;
flex-wrap: wrap; flex-wrap: wrap;
@@ -187,7 +188,7 @@ h1 {
margin-top: 20px; margin-top: 20px;
} }
.final-games-section { #final-games-section {
display: flex; display: flex;
align-items: start; align-items: start;
flex-wrap: wrap; flex-wrap: wrap;

View File

@@ -44,21 +44,22 @@ def extract_standings_info():
print("Error:", response.status_code) print("Error:", response.status_code)
return None return None
# Connect to SQLite database def update_nhl_standings():
conn = sqlite3.connect("nhl_standings.db") # Connect to SQLite database
conn = sqlite3.connect("nhl_standings.db")
# Create standings table if it doesn't exist # Create standings table if it doesn't exist
create_standings_table(conn) create_standings_table(conn)
# Truncate standings table before inserting new data # Truncate standings table before inserting new data
truncate_standings_table(conn) truncate_standings_table(conn)
# Extract standings info # Extract standings info
standings_info = extract_standings_info() standings_info = extract_standings_info()
# Insert standings info into the database # Insert standings info into the database
if standings_info: if standings_info:
insert_standings_info(conn, standings_info) insert_standings_info(conn, standings_info)
# Close database connection # Close database connection
conn.close() conn.close()