Fix NBA leaderboard team ID field for logo fetching (#116)

* Fix NBA leaderboard team ID field for logo fetching

- Add missing 'id' field to NBA team standings data structure
- Enables proper logo fetching from assets/sports/nba_logos/
- Fixes 'id' KeyError when creating NBA leaderboard images
- Includes diagnostic and test scripts for verification

* Add NBA logo downloader script and documentation

- download_nba_logos.py: Script to download all 30 NBA team logos from ESPN API
- README_NBA_LOGOS.md: Comprehensive documentation for the logo downloader
- Supports force re-download and quiet modes
- Downloads to assets/sports/nba_logos/ for leaderboard integration

* replace NBA Logos

* return NBA logo
This commit is contained in:
Chuck
2025-10-10 18:27:36 -04:00
committed by GitHub
parent 584a4f258e
commit 98d3ed7d91
39 changed files with 1181 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
#!/usr/bin/env python3
"""
Script to download all NBA team logos from ESPN API and save them in assets/sports/nba_logos/
"""
import sys
import os
import logging
from typing import Tuple
# Add the src directory to Python path so we can import the logo downloader
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src'))
# Set up logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
def download_nba_logos(force_download: bool = False) -> Tuple[int, int]:
"""
Download all NBA team logos from ESPN API.
Args:
force_download: Whether to re-download existing logos
Returns:
Tuple of (downloaded_count, failed_count)
"""
try:
from logo_downloader import download_all_logos_for_league
logger.info("🏀 Starting NBA logo download...")
logger.info(f"Target directory: assets/sports/nba_logos/")
logger.info(f"Force download: {force_download}")
# Use the existing function to download all NBA logos
downloaded_count, failed_count = download_all_logos_for_league('nba', force_download)
logger.info("✅ NBA logo download complete!")
logger.info(f"📊 Summary: {downloaded_count} downloaded, {failed_count} failed")
if downloaded_count > 0:
logger.info("🎉 NBA logos are now ready for use in the leaderboard!")
else:
logger.info(" All NBA logos were already present or download failed for all teams")
return downloaded_count, failed_count
except ImportError as e:
logger.error(f"❌ Import error: {e}")
logger.info("💡 Make sure you're running this from the LEDMatrix project directory")
return 0, 0
except Exception as e:
logger.error(f"❌ Unexpected error: {e}")
return 0, 0
def main():
"""Main function with command line argument parsing."""
import argparse
parser = argparse.ArgumentParser(description='Download all NBA team logos from ESPN API')
parser.add_argument(
'--force',
action='store_true',
help='Force re-download of existing logos'
)
parser.add_argument(
'--quiet',
action='store_true',
help='Reduce logging output'
)
args = parser.parse_args()
# Set logging level based on quiet flag
if args.quiet:
logging.getLogger().setLevel(logging.WARNING)
logger.info("🚀 NBA Logo Downloader")
logger.info("=" * 50)
# Download the logos
downloaded, failed = download_nba_logos(args.force)
# Exit with appropriate code
if failed > 0 and downloaded == 0:
logger.error("❌ All downloads failed!")
sys.exit(1)
elif failed > 0:
logger.warning(f"⚠️ {failed} downloads failed, but {downloaded} succeeded")
sys.exit(0) # Partial success is still success
else:
logger.info("🎉 All NBA logos downloaded successfully!")
sys.exit(0)
if __name__ == "__main__":
main()