Application Design

Fantasy Homepage Web Application

Application Overview

Independent project utilizing web scraping for live NFL scores, accessing an NFL API for live fantasy performance in JSON format, and a dataset from Kaggle with predictive 2024 fantasy football performance data (based on fantasy performance in the 2023 NFL season).

GitHub Repository - Fantasy Homepage Application

Flask Application Routes

/

@app.route('/')

def home():

   return render_template('index.html')

/dashboard

@app.route('/dashboard')

def dashboard():

   return render_template('dashboard.html')

/fantasy

@app.route('/fantasy')

def fantasy():

   return render_template('fantasy.html')

/score

@app.route('/score')

def score():

   return render_template('score.html')

/teams

@app.route('/teams')

def teams():

   return render_template('teams.html')

/superbowl

@app.route('/superbowl')

def superbowl():

   return render_template('superbowl.html')

/rookie

@app.route('/rookie')

def rookie():

   return render_template('rookie.html')

/dst

@app.route('/dst')

def dst():

   return render_template('dst.html')

/qb

@app.route('/qb')

def qb():

   return render_template('qb.html')

/rb

@app.route('/rb')

def rb():

   return render_template('rb.html')

/wr

@app.route('/wr')

def wr():

   return render_template('wr.html')

/te

@app.route('/te')

def te():

   return render_template('te.html')

Accessing Data

# Pull in fantasy predictive data

@app.route('/get_data/<position>', methods=['GET'])

def get_data(position):

   # Load CSV for each position

   if position == 'qb':

       df = pd.read_csv('data/qb_data.csv')

       main_columns = QB_COLUMNS

   elif position == 'wr':

       df = pd.read_csv('data/wr_data.csv')

       main_columns = WR_COLUMNS

   elif position == 'rb':

       df = pd.read_csv('data/rb_data.csv')

       main_columns = RB_COLUMNS

   elif position == 'te':

       df = pd.read_csv('data/te_data.csv')

       main_columns = TE_COLUMNS

   else:

       return jsonify({'error': 'Invalid position selected'}), 400

   # Prepare dashboard data

   main_data = reorder_columns(df[main_columns], main_columns).to_dict(orient='records')

   # Prepare popup data

   popup_data = df[POPUP_COLUMNS].to_dict(orient='records')

   return jsonify({

       'main_data': main_data,

       'main_columns': main_columns,

       'popup_data': popup_data,

       'popup_columns': POPUP_COLUMNS

   })

# Get weekly scoring data

@app.route('/api/scores/<int:week>', methods=['GET'])

def get_scores(week):

   url = f"https://www.pro-football-reference.com/years/2024/week_{week}.htm"

   try:

       response = requests.get(url)

       response.raise_for_status()

       soup = BeautifulSoup(response.content, 'html.parser')

       games = soup.select('#games tbody tr')

       

       scores = []

       for game in games:

           winner = game.select_one('.winner')

           loser = game.select_one('.loser')

           if winner and loser:

               scores.append({

                   'date': game.select_one('.date').text,

                   'winner': winner.select_one('a').text,

                   'winnerScore': winner.select_one('.score').text,

                   'loser': loser.select_one('a').text,

                   'loserScore': loser.select_one('.score').text

               })

       return jsonify(scores)

   except requests.RequestException as e:

       return jsonify({'error': str(e)}), 500

GitHub Repository

DIGITAL
PORTFOLIO