aliss77777 commited on
Commit
06cb2a3
·
verified ·
1 Parent(s): 6d7992b

Upload folder using huggingface_hub

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .env.example +11 -0
  2. .gitattributes +10 -0
  3. .gitignore +65 -0
  4. .gradio/certificate.pem +31 -0
  5. README.md +133 -7
  6. components/.gradio/certificate.pem +31 -0
  7. components/game_recap_component.py +292 -0
  8. components/player_card_component.py +158 -0
  9. components/team_story_component.py +63 -0
  10. data/.env.example +11 -0
  11. data/49ers roster - Sheet1.csv +74 -0
  12. data/49ers_fan_communities_clean_GOOD.csv +384 -0
  13. data/april_11_multimedia_data_collect/49ers_2024_column_definitions.csv +62 -0
  14. data/april_11_multimedia_data_collect/49ers_2024_enhanced_stats.csv +0 -0
  15. data/april_11_multimedia_data_collect/component actual example v2.png +0 -0
  16. data/april_11_multimedia_data_collect/custom component attempt 1.png +0 -0
  17. data/april_11_multimedia_data_collect/game recap layout example.png +0 -0
  18. data/april_11_multimedia_data_collect/game_stats.py +392 -0
  19. data/april_11_multimedia_data_collect/get_player_socials.py +239 -0
  20. data/april_11_multimedia_data_collect/get_youtube_playlist_videos.py +65 -0
  21. data/april_11_multimedia_data_collect/match_highlights.py +196 -0
  22. data/april_11_multimedia_data_collect/merge_schedule_logos.py +24 -0
  23. data/april_11_multimedia_data_collect/neo4j_article_uploader.py +146 -0
  24. data/april_11_multimedia_data_collect/new_final_april 11/neo4j_game_update/SCHEMA.md +44 -0
  25. data/april_11_multimedia_data_collect/new_final_april 11/neo4j_game_update/update_game_nodes.py +205 -0
  26. data/april_11_multimedia_data_collect/new_final_april 11/neo4j_player_update/update_player_nodes.py +230 -0
  27. data/april_11_multimedia_data_collect/new_final_april 11/roster_april_11.csv +74 -0
  28. data/april_11_multimedia_data_collect/new_final_april 11/schedule_with_result_april_11.csv +18 -0
  29. data/april_11_multimedia_data_collect/new_games_with_highlights.csv +18 -0
  30. data/april_11_multimedia_data_collect/new_niners_players_with_highlights.csv +74 -0
  31. data/april_11_multimedia_data_collect/new_team_highlights.csv +0 -0
  32. data/april_11_multimedia_data_collect/nfl-2024-san-francisco-49ers-with-results.csv +18 -0
  33. data/april_11_multimedia_data_collect/nfl_team_logos.csv +63 -0
  34. data/april_11_multimedia_data_collect/nfl_team_logos_revised.csv +33 -0
  35. data/april_11_multimedia_data_collect/niners_players_headshots.csv +74 -0
  36. data/april_11_multimedia_data_collect/niners_players_headshots_with_socials_merged.csv +74 -0
  37. data/april_11_multimedia_data_collect/niners_players_with_highlights.csv +74 -0
  38. data/april_11_multimedia_data_collect/player_headshots.py +73 -0
  39. data/april_11_multimedia_data_collect/schedule_with_result_and_logo_urls.csv +18 -0
  40. data/april_11_multimedia_data_collect/team_logos.py +298 -0
  41. data/april_11_multimedia_data_collect/team_logos/arizona_cardinals.png +0 -0
  42. data/april_11_multimedia_data_collect/team_logos/arizona_cardinals_news,_scores,_stats,_schedule.png +1 -0
  43. data/april_11_multimedia_data_collect/team_logos/atlanta_falcons.png +0 -0
  44. data/april_11_multimedia_data_collect/team_logos/atlanta_falcons_news,_scores,_stats,_schedule.png +1 -0
  45. data/april_11_multimedia_data_collect/team_logos/baltimore_ravens.png +0 -0
  46. data/april_11_multimedia_data_collect/team_logos/baltimore_ravens_news,_scores,_stats,_schedule.png +1 -0
  47. data/april_11_multimedia_data_collect/team_logos/buffalo_bills.png +0 -0
  48. data/april_11_multimedia_data_collect/team_logos/buffalo_bills_news,_scores,_stats,_schedule.png +1 -0
  49. data/april_11_multimedia_data_collect/team_logos/carolina_panthers.png +0 -0
  50. data/april_11_multimedia_data_collect/team_logos/carolina_panthers_news,_scores,_stats,_schedule.png +1 -0
.env.example ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # OpenAI API credentials
2
+ OPENAI_API_KEY="your_openai_api_key_here"
3
+ OPENAI_MODEL="gpt-4o"
4
+
5
+ # Neo4j Aura database credentials
6
+ AURA_CONNECTION_URI="your_neo4j_uri_here"
7
+ AURA_USERNAME="your_neo4j_username_here"
8
+ AURA_PASSWORD="your_neo4j_password_here"
9
+
10
+ # Optional: Zep memory service (if using)
11
+ ZEP_API_KEY="your_zep_api_key_here"
.gitattributes CHANGED
@@ -33,3 +33,13 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ data/april_11_multimedia_data_collect/team_logos/new_york_jets.png filter=lfs diff=lfs merge=lfs -text
37
+ data/april_11_multimedia_data_collect/wip[[:space:]]component[[:space:]]layout[[:space:]]april[[:space:]]15.png filter=lfs diff=lfs merge=lfs -text
38
+ data/april_11_multimedia_data_collect/wip[[:space:]]component[[:space:]]layout[[:space:]]april[[:space:]]15_v2.png filter=lfs diff=lfs merge=lfs -text
39
+ data/wip[[:space:]]component[[:space:]]layout[[:space:]]april[[:space:]]15_v3.1.png filter=lfs diff=lfs merge=lfs -text
40
+ data/wip[[:space:]]component[[:space:]]layout[[:space:]]april[[:space:]]15_v3.2.png filter=lfs diff=lfs merge=lfs -text
41
+ data/z_old/49ers[[:space:]]Fan[[:space:]]Chapters.kmz filter=lfs diff=lfs merge=lfs -text
42
+ docs/Phase[[:space:]]1/debug[[:space:]]image[[:space:]]1.png filter=lfs diff=lfs merge=lfs -text
43
+ docs/Phase[[:space:]]1/debug[[:space:]]image[[:space:]]2.png filter=lfs diff=lfs merge=lfs -text
44
+ docs/Phase[[:space:]]1/debug[[:space:]]image[[:space:]]3.png filter=lfs diff=lfs merge=lfs -text
45
+ docs/Phase[[:space:]]1/debug[[:space:]]image[[:space:]]4.png filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Environment variables
2
+ .env
3
+ **/.env
4
+
5
+ # Python cache files
6
+ __pycache__/
7
+ *.py[cod]
8
+ *$py.class
9
+ *.so
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+
27
+ # Jupyter Notebook
28
+ .ipynb_checkpoints
29
+
30
+ # Virtual Environment
31
+ venv/
32
+ ENV/
33
+ env/
34
+
35
+ # IDE files
36
+ .idea/
37
+ .vscode/
38
+ *.swp
39
+ *.swo
40
+
41
+ # OS specific files
42
+ .DS_Store
43
+ .DS_Store?
44
+ ._*
45
+ .Spotlight-V100
46
+ .Trashes
47
+ ehthumbs.db
48
+ Thumbs.db
49
+
50
+ # Streamlit secrets
51
+ .streamlit/secrets.toml
52
+
53
+ # Database files
54
+ *.db
55
+ *.db-shm
56
+ *.db-wal
57
+
58
+ # Logs
59
+ logs/
60
+ *.log
61
+
62
+ # Output files that may contain sensitive data
63
+ **/niners_output/game_summary_embeddings.csv
64
+ **/niners_output/schedule_with_result_embedding.csv
65
+ **/niners_output/schedule_with_result_embedding.gsheet
.gradio/certificate.pem ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
3
+ TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
4
+ cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
5
+ WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
6
+ ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
7
+ MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
8
+ h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
9
+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
10
+ A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
11
+ T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
12
+ B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
13
+ B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
14
+ KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
15
+ OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
16
+ jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
17
+ qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
18
+ rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
19
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
20
+ hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
21
+ ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
22
+ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
23
+ NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
24
+ ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
25
+ TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
26
+ jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
27
+ oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
28
+ 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
29
+ mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
30
+ emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
31
+ -----END CERTIFICATE-----
README.md CHANGED
@@ -1,12 +1,138 @@
1
  ---
2
- title: IFX Sandbox
3
- emoji: 🌍
4
- colorFrom: green
5
- colorTo: purple
6
  sdk: gradio
7
- sdk_version: 5.25.2
8
- app_file: app.py
9
  pinned: false
10
  ---
11
 
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: IFX-sandbox
3
+ emoji: 🏈
4
+ colorFrom: red
5
+ colorTo: gray
6
  sdk: gradio
7
+ app_file: gradio_app.py
 
8
  pinned: false
9
  ---
10
 
11
+ # 49ers FanAI Hub - Gradio Version
12
+
13
+ This is a Gradio-based chatbot application that provides information about the San Francisco 49ers, players, games, and fans. The application uses LangChain, Neo4j, and Zep for memory management.
14
+
15
+ ## Features
16
+
17
+ - Chat interface for asking questions about the 49ers
18
+ - Integration with Neo4j graph database for structured data queries
19
+ - Vector search for finding game summaries
20
+ - Memory management with Zep for conversation history
21
+ - Game Recap component that displays visual information for game-related queries
22
+
23
+ ## Prerequisites
24
+
25
+ - Python 3.9+
26
+ - Neo4j database (local or Aura)
27
+ - OpenAI API key
28
+ - Zep API key
29
+
30
+ ## Installation
31
+
32
+ 1. Clone the repository
33
+ 2. Install the required packages:
34
+
35
+ ```bash
36
+ pip install -r gradio_requirements.txt
37
+ ```
38
+
39
+ 3. Set up your environment variables:
40
+ - Copy `.env.example` to `.env` in the root directory
41
+ - Fill in your API keys and credentials
42
+
43
+ Example `.env` file:
44
+ ```
45
+ OPENAI_API_KEY=your_openai_api_key
46
+ OPENAI_MODEL=gpt-4o
47
+ AURA_CONNECTION_URI=your_neo4j_uri
48
+ AURA_USERNAME=your_neo4j_username
49
+ AURA_PASSWORD=your_neo4j_password
50
+ ZEP_API_KEY=your_zep_api_key
51
+ ```
52
+
53
+ > **IMPORTANT**: Never commit your actual API keys or credentials to the repository. The `.env` files are included in `.gitignore` to prevent accidental exposure of sensitive information.
54
+
55
+ ## Running the Application
56
+
57
+ To run the Gradio application:
58
+
59
+ ```bash
60
+ python gradio_app.py
61
+ ```
62
+
63
+ This will start the Gradio server and open the application in your default web browser.
64
+
65
+ ## Project Structure
66
+
67
+ - `gradio_app.py`: Main Gradio application
68
+ - `gradio_agent.py`: Agent implementation using LangChain for Gradio
69
+ - `gradio_graph.py`: Neo4j graph connection for Gradio
70
+ - `gradio_llm.py`: Language model configuration for Gradio
71
+ - `gradio_utils.py`: Utility functions for Gradio
72
+ - `prompts.py`: System prompts for the agent
73
+ - `tools/`: Specialized tools for the agent
74
+ - `cypher.py`: Tool for Cypher queries to Neo4j
75
+ - `vector.py`: Tool for vector search of game summaries
76
+ - `game_recap.py`: Tool for game recaps with visual component
77
+ - `components/`: UI components
78
+ - `game_recap_component.py`: Game recap visual component
79
+ - `data/`: Data files and scripts
80
+ - Various scripts and CSV files with 49ers data
81
+ - `docs/`: Documentation
82
+ - `requirements.md`: Detailed product and technical requirements
83
+ - `game_recap_implementation_instructions.md`: Implementation details for the game recap feature
84
+
85
+ ## Game Recap Component
86
+
87
+ The Game Recap feature provides visual information about games in addition to text-based summaries. When a user asks about a specific game, the application:
88
+
89
+ 1. Identifies the game being referenced
90
+ 2. Retrieves game data from the Neo4j database
91
+ 3. Displays a visual component with team logos, scores, and other game information
92
+ 4. Generates a text summary in the chat
93
+
94
+ Note: As mentioned in `docs/game_recap_implementation_instructions.md`, this component is still a work in progress. Currently, it displays above the chat window rather than embedded within chat messages.
95
+
96
+ ## Security Considerations
97
+
98
+ This repository includes:
99
+ - `.gitignore` file to prevent committing sensitive information
100
+ - `.env.example` files showing required environment variables without actual values
101
+ - No hardcoded API keys or credentials in the code
102
+
103
+ Before pushing to a public repository:
104
+ 1. Ensure all sensitive information is in `.env` files (which are ignored by git)
105
+ 2. Verify no API keys or credentials are hardcoded in any files
106
+ 3. Check that large data files or binary files are properly ignored if needed
107
+
108
+ ## Usage
109
+
110
+ 1. Start the application
111
+ 2. Ask questions about the 49ers, such as:
112
+ - "Who are the current players on the 49ers roster?"
113
+ - "Tell me about the 49ers game against the Chiefs"
114
+ - "Which fan communities have the most members?"
115
+ - "Show me the recap of the 49ers vs. Vikings game"
116
+
117
+ The application will use the appropriate tools to answer your questions based on the data in the Neo4j database.
118
+
119
+ ## Deployment
120
+
121
+ This application has been deployed to HuggingFace Spaces and is publicly available at:
122
+ [https://huggingface.co/spaces/aliss77777/ifx-sandbox](https://huggingface.co/spaces/aliss77777/ifx-sandbox)
123
+
124
+ ### Deployment Steps
125
+ 1. Used Gradio's built-in deployment feature: `gradio deploy --app-file gradio_app.py --title "49ers FanAI Hub"`
126
+ 2. Uploaded environment variables securely as Secrets in the HuggingFace Space
127
+ 3. Verified all API connections and data access on the deployed version
128
+
129
+ The deployment process automatically handles:
130
+ - Code upload to HuggingFace Spaces
131
+ - Installing dependencies from requirements.txt
132
+ - Building and serving the Gradio application
133
+
134
+ ### Final Checks
135
+ - Verified UI rendering and responsiveness
136
+ - Confirmed data accuracy and Neo4j connection
137
+ - Tested all features: chat, graph queries, and game recap functionality
138
+ - Documented any deployment-specific issues or limitations
components/.gradio/certificate.pem ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
3
+ TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
4
+ cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4
5
+ WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu
6
+ ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY
7
+ MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc
8
+ h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+
9
+ 0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U
10
+ A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW
11
+ T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH
12
+ B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC
13
+ B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv
14
+ KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn
15
+ OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn
16
+ jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw
17
+ qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI
18
+ rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
19
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq
20
+ hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL
21
+ ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ
22
+ 3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK
23
+ NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5
24
+ ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur
25
+ TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC
26
+ jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc
27
+ oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq
28
+ 4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA
29
+ mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d
30
+ emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=
31
+ -----END CERTIFICATE-----
components/game_recap_component.py ADDED
@@ -0,0 +1,292 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ import os
4
+ import html
5
+
6
+ def create_game_recap_component(game_data=None):
7
+ """
8
+ Creates a Gradio component to display game information with a simple table layout.
9
+ Args:
10
+ game_data (dict, optional): Game data to display. If None, returns an empty component.
11
+ Returns:
12
+ gr.HTML: A Gradio component displaying the game recap.
13
+ """
14
+ try:
15
+ # If no game data provided, return an empty component
16
+ if game_data is None or not isinstance(game_data, dict):
17
+ return gr.HTML("")
18
+
19
+ # Extract game details
20
+ match_number = game_data.get('match_number', game_data.get('Match Number', 'N/A'))
21
+ date = game_data.get('date', 'N/A')
22
+ location = game_data.get('location', 'N/A')
23
+
24
+ # Handle different column naming conventions between sources
25
+ home_team = game_data.get('home_team', game_data.get('Home Team', game_data.get('HomeTeam', 'N/A')))
26
+ away_team = game_data.get('away_team', game_data.get('Away Team', game_data.get('AwayTeam', 'N/A')))
27
+
28
+ # Get team logo URLs
29
+ home_logo = game_data.get('home_team_logo_url', '')
30
+ away_logo = game_data.get('away_team_logo_url', '')
31
+
32
+ # Get result and determine scores
33
+ result = game_data.get('result', 'N/A')
34
+ home_score = game_data.get('home_score', 'N/A')
35
+ away_score = game_data.get('away_score', 'N/A')
36
+
37
+ # If we don't have separate scores but have result, try to parse it
38
+ if (home_score == 'N/A' or away_score == 'N/A') and result != 'N/A':
39
+ scores = result.split('-')
40
+ if len(scores) == 2:
41
+ home_score = scores[0].strip()
42
+ away_score = scores[1].strip()
43
+
44
+ # Determine winner for highlighting
45
+ winner = game_data.get('winner')
46
+ if not winner and result != 'N/A':
47
+ try:
48
+ home_score_int = int(home_score)
49
+ away_score_int = int(away_score)
50
+ winner = 'home' if home_score_int > away_score_int else 'away'
51
+ except ValueError:
52
+ winner = None
53
+
54
+ # Get highlight video URL
55
+ highlight_video_url = game_data.get('highlight_video_url', '')
56
+
57
+ # Create a simple HTML table layout
58
+ html_content = f"""
59
+ <style>
60
+ .game-recap-table {{
61
+ width: 100%;
62
+ border-collapse: collapse;
63
+ border: 1px solid #ddd;
64
+ border-radius: 8px;
65
+ overflow: hidden;
66
+ margin: 20px 0;
67
+ box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* Reverted: Uncommented for Bug 2 re-evaluation */
68
+ }}
69
+
70
+ .team-cell {{
71
+ padding: 15px;
72
+ text-align: left;
73
+ vertical-align: middle;
74
+ border-bottom: 1px solid #eee;
75
+ }}
76
+
77
+ .team-logo {{
78
+ width: 40px;
79
+ height: 40px;
80
+ object-fit: contain;
81
+ margin-right: 10px;
82
+ border-radius: 50%;
83
+ vertical-align: middle;
84
+ }}
85
+
86
+ .team-name {{
87
+ display: inline-block;
88
+ vertical-align: middle;
89
+ }}
90
+
91
+ .team-name-main {{
92
+ font-weight: bold;
93
+ font-size: 18px;
94
+ display: block;
95
+ }}
96
+
97
+ .team-name-sub {{
98
+ font-size: 14px;
99
+ color: #666;
100
+ display: block;
101
+ }}
102
+
103
+ .score-cell {{
104
+ padding: 15px;
105
+ text-align: right;
106
+ font-size: 32px;
107
+ font-weight: bold;
108
+ vertical-align: middle;
109
+ width: 80px;
110
+ }}
111
+
112
+ .winner-indicator {{
113
+ color: #ff6b00;
114
+ margin-left: 5px;
115
+ }}
116
+
117
+ .video-cell {{
118
+ background: #ffffff; /* Reverted back to solid white */
119
+ color: #333; /* changed from white to a darker color for visibility */
120
+ padding: 20px;
121
+ text-align: center;
122
+ vertical-align: middle;
123
+ }}
124
+
125
+ .vs-container {{
126
+ margin-bottom: 15px;
127
+ }}
128
+
129
+ .vs-logo {{
130
+ width: 30px;
131
+ height: 30px;
132
+ object-fit: contain;
133
+ margin: 0 5px;
134
+ border-radius: 50%;
135
+ background-color: rgba(255,255,255,0.2);
136
+ vertical-align: middle;
137
+ }}
138
+
139
+ .vs-text {{
140
+ font-weight: bold;
141
+ margin: 0 5px;
142
+ }}
143
+
144
+ .recap-text {{
145
+ font-size: 24px;
146
+ font-weight: bold;
147
+ margin: 10px 0;
148
+ color: #AA0000 !important; /* 49ers primary red from your design system */
149
+ }}
150
+
151
+ .video-link {{
152
+ display: inline-block;
153
+ padding: 8px 15px;
154
+ background-color: #AA0000;
155
+ color: white;
156
+ text-decoration: none;
157
+ border-radius: 4px;
158
+ margin-top: 10px;
159
+ }}
160
+
161
+ .video-link:hover {{
162
+ background-color: #B3995D;
163
+ }}
164
+ </style>
165
+
166
+ <table class="game-recap-table">
167
+ <tr>
168
+ <td class="team-cell">
169
+ <img src="{html.escape(away_logo)}" alt="{html.escape(away_team)} logo" class="team-logo">
170
+ <div class="team-name">
171
+ <span class="team-name-main">{html.escape(away_team.split(' ')[0] if ' ' in away_team else away_team)}</span>
172
+ <span class="team-name-sub">{html.escape(away_team.split(' ', 1)[1] if ' ' in away_team else '')}</span>
173
+ </div>
174
+ </td>
175
+ <td class="score-cell">
176
+ {away_score}{' <span class="winner-indicator">▶</span>' if winner == 'away' else ''}
177
+ </td>
178
+ <td class="video-cell" rowspan="2">
179
+ <div class="vs-container">
180
+ <img src="{html.escape(away_logo)}" alt="{html.escape(away_team)} logo" class="vs-logo">
181
+ <span class="vs-text">VS</span>
182
+ <img src="{html.escape(home_logo)}" alt="{html.escape(home_team)} logo" class="vs-logo">
183
+ </div>
184
+ <div class="recap-text">Recap</div>
185
+ {f'<a href="{html.escape(highlight_video_url)}" target="_blank" class="video-link">Watch Highlights</a>' if highlight_video_url else ''}
186
+ </td>
187
+ </tr>
188
+ <tr>
189
+ <td class="team-cell">
190
+ <img src="{html.escape(home_logo)}" alt="{html.escape(home_team)} logo" class="team-logo">
191
+ <div class="team-name">
192
+ <span class="team-name-main">{html.escape(home_team.split(' ')[0] if ' ' in home_team else home_team)}</span>
193
+ <span class="team-name-sub">{html.escape(home_team.split(' ', 1)[1] if ' ' in home_team else '')}</span>
194
+ </div>
195
+ </td>
196
+ <td class="score-cell">
197
+ {home_score}{' <span class="winner-indicator">▶</span>' if winner == 'home' else ''}
198
+ </td>
199
+ </tr>
200
+ </table>
201
+ """
202
+
203
+ return gr.HTML(html_content)
204
+
205
+ except Exception as e:
206
+ print(f"Error creating game recap component: {str(e)}")
207
+ # Return a simple error message component
208
+ return gr.HTML("<div style='padding: 1rem; color: red;'>⚠️ Error loading game recap. Please try again later.</div>")
209
+
210
+ # Function to process a game recap response from the agent
211
+ def process_game_recap_response(response):
212
+ """
213
+ Process a response from the agent that may contain game recap data.
214
+
215
+ Args:
216
+ response (dict): The response from the agent
217
+
218
+ Returns:
219
+ tuple: (text_output, game_data)
220
+ - text_output (str): The text output to display
221
+ - game_data (dict or None): Game data for the visual component or None
222
+ """
223
+ try:
224
+ # Check if the response has game_data directly
225
+ if isinstance(response, dict) and "game_data" in response:
226
+ return response.get("output", ""), response.get("game_data")
227
+
228
+ # Check if game data is in intermediate steps (where LangChain often puts tool outputs)
229
+ if isinstance(response, dict) and "intermediate_steps" in response:
230
+ steps = response.get("intermediate_steps", [])
231
+ for step in steps:
232
+ # Check the observation part of the step, which contains the tool output
233
+ if isinstance(step, list) and len(step) >= 2:
234
+ observation = step[1] # Second element is typically the observation
235
+ if isinstance(observation, dict) and "game_data" in observation:
236
+ return observation.get("output", response.get("output", "")), observation.get("game_data")
237
+
238
+ # Alternative format where step might be a dict with observation key
239
+ if isinstance(step, dict) and "observation" in step:
240
+ observation = step["observation"]
241
+ if isinstance(observation, dict) and "game_data" in observation:
242
+ return observation.get("output", response.get("output", "")), observation.get("game_data")
243
+
244
+ # If it's just a text response
245
+ if isinstance(response, str):
246
+ return response, None
247
+
248
+ # Default case for other response types
249
+ if isinstance(response, dict):
250
+ return response.get("output", ""), None
251
+
252
+ return str(response), None
253
+
254
+ except Exception as e:
255
+ print(f"Error processing game recap response: {str(e)}")
256
+ import traceback
257
+ traceback.print_exc() # Add stack trace for debugging
258
+ return "I encountered an error processing the game data. Please try again.", None
259
+
260
+ # Test function for running the component directly
261
+ if __name__ == "__main__":
262
+ # Create sample game data for testing
263
+ test_game_data = {
264
+ 'game_id': 'test-game-123',
265
+ 'date': '10/09/2024',
266
+ 'location': "Levi's Stadium",
267
+ 'home_team': 'San Francisco 49ers',
268
+ 'away_team': 'New York Jets',
269
+ 'home_score': '32',
270
+ 'away_score': '19',
271
+ 'result': '32-19',
272
+ 'winner': 'home',
273
+ 'home_team_logo_url': 'https://a.espncdn.com/i/teamlogos/nfl/500/sf.png',
274
+ 'away_team_logo_url': 'https://a.espncdn.com/i/teamlogos/nfl/500/nyj.png',
275
+ 'highlight_video_url': 'https://www.youtube.com/watch?v=igOb4mfV7To'
276
+ }
277
+
278
+ # Create a test Gradio interface
279
+ with gr.Blocks() as demo:
280
+ gr.Markdown("# Game Recap Component Test")
281
+
282
+ with gr.Row():
283
+ game_recap = create_game_recap_component(test_game_data)
284
+
285
+ with gr.Row():
286
+ clear_btn = gr.Button("Clear Component")
287
+ show_btn = gr.Button("Show Component")
288
+
289
+ clear_btn.click(lambda: None, None, game_recap)
290
+ show_btn.click(lambda: test_game_data, None, game_recap)
291
+
292
+ demo.launch(share=True)
components/player_card_component.py ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import html
3
+
4
+ def create_player_card_component(player_data=None):
5
+ """
6
+ Creates a Gradio HTML component to display player information based on test.ipynb structure.
7
+
8
+ Args:
9
+ player_data (dict, optional): Dictionary containing player data.
10
+ Expected keys: 'Name', 'Position', 'Jersey_number',
11
+ 'headshot_url', 'College', 'Height', 'Weight',
12
+ 'Years_in_nfl', 'instagram_url'. Defaults to None.
13
+
14
+ Returns:
15
+ gr.HTML: A Gradio HTML component displaying the player card, or empty if no data.
16
+ """
17
+ print("--- Entered create_player_card_component ---") # DEBUG LOG
18
+ if not player_data or not isinstance(player_data, dict):
19
+ print("Component received no player data, returning empty.") # DEBUG LOG
20
+ return gr.HTML("")
21
+
22
+ print(f"Component received player_data: {player_data}") # DEBUG LOG
23
+
24
+ try:
25
+ # Extract data with defaults, using html.escape
26
+ name = html.escape(player_data.get('Name', 'N/A'))
27
+ position = html.escape(player_data.get('Position', ''))
28
+ number = html.escape(str(player_data.get('Jersey_number', '')))
29
+ headshot_url = html.escape(player_data.get('headshot_url', ''))
30
+ college = html.escape(player_data.get('College', 'N/A'))
31
+ height = html.escape(player_data.get('Height', 'N/A'))
32
+ weight = html.escape(player_data.get('Weight', 'N/A'))
33
+ exp = html.escape(str(player_data.get('Years_in_nfl', 'N/A')))
34
+ instagram_url = html.escape(player_data.get('instagram_url', ''))
35
+
36
+ # CSS from test.ipynb, adapted slightly for theme integration
37
+ css = """
38
+ <style>
39
+ .player-card-container {
40
+ /* Add a container to allow for centering or specific placement */
41
+ padding: 10px 0;
42
+ }
43
+ .player-card {
44
+ background-color: #222222; /* Dark background */
45
+ border: 1px solid #333333;
46
+ margin: 0.5rem auto; /* Center card */
47
+ padding: 1rem;
48
+ border-radius: 8px;
49
+ width: 320px; /* Slightly wider */
50
+ box-sizing: border-box;
51
+ font-family: 'Arial', sans-serif;
52
+ color: #E6E6E6; /* Light text */
53
+ overflow: hidden; /* Clear float */
54
+ box-shadow: 0 2px 5px rgba(0,0,0,0.2);
55
+ }
56
+ .player-photo {
57
+ width: 80px;
58
+ height: 80px;
59
+ background-color: #444; /* Darker placeholder */
60
+ float: left;
61
+ margin-right: 1rem;
62
+ border-radius: 50%; /* Make it round */
63
+ object-fit: cover; /* Cover ensures image fills circle */
64
+ border: 2px solid #B3995D; /* Gold accent */
65
+ }
66
+ .card-content {
67
+ float: left;
68
+ width: calc(100% - 100px); /* Adjust width considering photo and margin */
69
+ }
70
+ .card-content h4 {
71
+ margin: 0 0 0.5rem 0;
72
+ font-size: 1.2em;
73
+ color: #FFFFFF; /* White name */
74
+ font-weight: bold;
75
+ }
76
+ .card-content ul {
77
+ margin: 0.25rem 0;
78
+ padding-left: 1.2rem;
79
+ list-style: none; /* Remove default bullets */
80
+ font-size: 0.9em;
81
+ color: #B0B0B0;
82
+ }
83
+ .card-content ul li {
84
+ margin-bottom: 4px; /* Space between list items */
85
+ }
86
+ .player-social-link {
87
+ margin-top: 10px;
88
+ clear: both; /* Ensure it appears below floated elements if needed */
89
+ }
90
+ .player-social-link a {
91
+ display: inline-block;
92
+ text-decoration: none;
93
+ color: #FFFFFF;
94
+ background-color: #AA0000; /* 49ers Red */
95
+ padding: 5px 10px;
96
+ border-radius: 4px;
97
+ font-size: 0.8em;
98
+ transition: background-color 0.2s ease;
99
+ }
100
+ .player-social-link a:hover {
101
+ background-color: #B3995D; /* Gold accent on hover */
102
+ }
103
+ </style>
104
+ """
105
+
106
+ # HTML structure based on test.ipynb
107
+ # Using an outer container for better layout control in Gradio
108
+ html_content = f"""
109
+ {css}
110
+ <div class="player-card-container">
111
+ <div class="player-card">
112
+ <img src="{headshot_url}" class="player-photo" alt="{name} Headshot" onerror="this.style.display='none'" />
113
+ <div class="card-content">
114
+ <h4>{name} {f'- #{number}' if number else ''} {f'({position})' if position else ''}</h4>
115
+ <ul>
116
+ <li>Ht: {height} | Wt: {weight} lbs</li>
117
+ <li>College: {college}</li>
118
+ <li>Experience: {exp} Years</li>
119
+ </ul>
120
+ """
121
+ # Add Instagram link conditionally
122
+ if instagram_url:
123
+ html_content += f"""
124
+ <div class="player-social-link">
125
+ <a href="{instagram_url}" target="_blank">Instagram Profile</a>
126
+ </div>
127
+ """
128
+
129
+ html_content += """
130
+ </div>
131
+ </div>
132
+ </div>
133
+ """
134
+
135
+ print(f"Component generated HTML (first 100 chars): {html_content[:100]}...") # DEBUG LOG
136
+ return gr.HTML(html_content)
137
+
138
+ except Exception as e:
139
+ print(f"Error creating player card component: {str(e)}")
140
+ # Return a simple error message component
141
+ return gr.HTML("<div style='padding: 1rem; color: red;'>⚠️ Error loading player card.</div>")
142
+
143
+ # Example Usage (for testing component independently if needed)
144
+ # if __name__ == '__main__':
145
+ # example_data = {
146
+ # 'Name': 'Brock Purdy',
147
+ # 'headshot_url': 'https://a.espncdn.com/i/headshots/nfl/players/full/4433216.png', # Example URL
148
+ # 'instagram_url': 'https://www.instagram.com/brock.purdy13/',
149
+ # 'Position': 'QB',
150
+ # 'Number': '13'
151
+ # }
152
+ # component = create_player_card_component(example_data)
153
+ #
154
+ # with gr.Blocks() as demo:
155
+ # gr.Markdown("## Player Card Example")
156
+ # demo.add(component)
157
+ #
158
+ # demo.launch()
components/team_story_component.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Gradio component for displaying Team Story/News search results.
3
+ """
4
+
5
+ import gradio as gr
6
+
7
+ def create_team_story_component(team_story_data):
8
+ """
9
+ Creates a Gradio HTML component to display formatted team news articles.
10
+
11
+ Args:
12
+ team_story_data (list): A list of dictionaries, where each dictionary
13
+ represents an article and contains keys like
14
+ 'summary', 'link_to_article', and 'topic'.
15
+
16
+ Returns:
17
+ gr.HTML: A Gradio HTML component containing the formatted news stories.
18
+ Returns None if the input data is empty or invalid.
19
+ """
20
+ if not team_story_data or not isinstance(team_story_data, list):
21
+ return None # Return None if no data or invalid data
22
+
23
+ html_content = """<div style='padding: 15px; border: 1px solid #e0e0e0; border-radius: 5px; margin-top: 10px;'>
24
+ <h3 style='margin-top: 0; margin-bottom: 10px;'>Recent Team News</h3>"""
25
+
26
+ for story in team_story_data:
27
+ if isinstance(story, dict):
28
+ summary = story.get('summary', 'No summary available.')
29
+ link = story.get('link_to_article', '#')
30
+ topic = story.get('topic', 'General')
31
+
32
+ # Sanitize link to prevent basic injection issues
33
+ safe_link = link if link.startswith(('http://', 'https://', '#')) else '#'
34
+
35
+ # Escape basic HTML characters in text fields
36
+ def escape_html(text):
37
+ return text.replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;")
38
+
39
+ safe_summary = escape_html(summary)
40
+ safe_topic = escape_html(topic)
41
+
42
+ html_content += f"""<div style='margin-bottom: 15px; padding-bottom: 10px; border-bottom: 1px solid #eee;'>
43
+ <p style='font-size: 0.9em; color: #555; margin-bottom: 5px;'><strong>Topic:</strong> {safe_topic}</p>
44
+ <p style='margin-bottom: 8px;'>{safe_summary}</p>
45
+ <a href='{safe_link}' target='_blank' style='font-size: 0.9em;'>Read Full Article</a>
46
+ </div>"""
47
+ else:
48
+ print(f"Warning: Skipping invalid item in team_story_data: {story}")
49
+
50
+ # Remove the last border-bottom if content was added
51
+ if len(team_story_data) > 0:
52
+ last_border_pos = html_content.rfind("border-bottom: 1px solid #eee;")
53
+ if last_border_pos != -1:
54
+ html_content = html_content[:last_border_pos] + html_content[last_border_pos:].replace("border-bottom: 1px solid #eee;", "")
55
+
56
+ html_content += "</div>"
57
+
58
+ # Return None if only the initial header was created (e.g., all items were invalid)
59
+ if html_content.strip() == """<div style='padding: 15px; border: 1px solid #e0e0e0; border-radius: 5px; margin-top: 10px;'>
60
+ <h3 style='margin-top: 0; margin-bottom: 10px;'>Recent Team News</h3></div>""".strip():
61
+ return None
62
+
63
+ return gr.HTML(html_content)
data/.env.example ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # OpenAI API credentials
2
+ OPENAI_API_KEY="your_openai_api_key_here"
3
+ OPENAI_MODEL="gpt-4o"
4
+
5
+ # Neo4j Aura database credentials
6
+ AURA_CONNECTION_URI="your_neo4j_uri_here"
7
+ AURA_USERNAME="your_neo4j_username_here"
8
+ AURA_PASSWORD="your_neo4j_password_here"
9
+
10
+ # Optional: Zep memory service (if using)
11
+ ZEP_API_KEY="your_zep_api_key_here"
data/49ers roster - Sheet1.csv ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Player,#,Pos,HT,WT,Age,Exp,College,status
2
+ Israel Abanikanda,20,RB,5-10,216,22,2,Pittsburgh,Active
3
+ Brandon Allen,17,QB,6-2,209,32,8,Arkansas,Active
4
+ Evan Anderson,69,DL,6-3,326,23,R,Florida Atlantic,Active
5
+ Tre Avery,36,CB,5-11,181,28,3,Rutgers,Active
6
+ Robert Beal Jr.,51,DL,6-4,250,25,2,Georgia,Active
7
+ Tatum Bethune,48,LB,6-0,299,24,R,Florida State,Active
8
+ Nick Bosa,97,DL,6-4,266,27,6,Ohio State,Active
9
+ Jake Brendel,64,OL,6-4,299,32,7,UCLA,Active
10
+ Ji'Ayir Brown,27,S,5-11,202,25,2,Penn State,Active
11
+ Chris Conley,18,WR,6-3,205,32,10,Georgia,Active
12
+ Jacob Cowing,19,WR,5-9,171,24,R,Arizona,Active
13
+ Kalia Davis,93,DL,6-2,310,26,3,Central Florida,Active
14
+ Khalil Davis,50,DL,6-2,315,28,4,Nebraska,Active
15
+ Joshua Dobbs,5,QB,6-3,220,30,8,Tennessee,Active
16
+ Jordan Elliott,92,DL,6-4,303,27,5,Missouri,Active
17
+ Luke Farrell,89,TE,6-5,250,27,4,Ohio State,Active
18
+ Tashaun Gipson Sr.,43,S,6-1,212,34,13,Wyoming,Active
19
+ Jalen Graham,41,LB,6-3,220,25,2,Purdue,Active
20
+ Richie Grant,27,S,6-0,200,27,4,UCF,Active
21
+ Renardo Green,0,CB,6-0,186,24,R,Florida State,Active
22
+ Yetur Gross-Matos,94,DL,6-5,265,27,5,Penn State,Active
23
+ Isaac Guerendo,31,RB,6-0,221,24,R,Louisville,Active
24
+ Charlie Heck,75,OL,6-8,311,28,5,North Carolina,Active
25
+ Matt Hennessy,61,OL,6-3,315,27,4,Temple,Active
26
+ Jauan Jennings,15,WR,6-3,212,27,4,Tennessee,Active
27
+ Mac Jones,10,QB,6-3,200,26,4,Alabama,Active
28
+ George Kittle,85,TE,6-4,250,31,8,Iowa,Active
29
+ Deommodore Lenoir,2,DB,5-10,200,25,4,Oregon,Active
30
+ Nick McCloud,35,CB,6-1,193,26,4,Notre Dame,Active
31
+ Colton McKivitz,68,OL,6-6,301,28,5,West Virginia,Active
32
+ Jake Moody,4,K,6-1,210,25,2,Michigan,Active
33
+ Malik Mustapha,6,S,5-10,206,22,R,Wake Forest,Active
34
+ Pat O'Donnell,40,P,6-4,220,34,10,Miami,Active
35
+ Sam Okuayinonu,91,DL,6-1,269,26,2,Maryland,Active
36
+ Ricky Pearsall,14,WR,6-3,192,24,R,Florida,Active
37
+ Jason Pinnock,41,CB,6-0,205,25,4,Pittsburgh,Active
38
+ Austen Pleasants,62,OT,6-7,328,27,1,Ohio,Active
39
+ Dominick Puni,77,OL,6-5,313,25,R,Kansas,Active
40
+ Brock Purdy,13,QB,6-1,220,25,3,Iowa State,Active
41
+ Demarcus Robinson,14,WR,6-1,203,30,9,Florida,Active
42
+ Eric Saubert,82,TE,6-5,248,30,7,Drake,Active
43
+ Patrick Taylor Jr.,32,RB,6-2,217,26,4,Memphis,Active
44
+ Tre Tomlinson,,CB,5-9,177,25,2,TCU,Active
45
+ Jake Tonges,88,TE,6-4,240,25,2,California,Active
46
+ Fred Warner,54,LB,6-3,230,28,7,Brigham Young,Active
47
+ Jon Weeks,46,LS,5-10,245,39,15,Baylor,Active
48
+ Brayden Willis,9,TE,6-4,240,25,2,Oklahoma,Active
49
+ Dee Winters,53,LB,5-11,227,24,2,TCU,Active
50
+ Rock Ya-Sin,33,CB,5-11,195,28,6,Temple,Active
51
+ Isaac Yiadom,22,CB,6-1,232,29,7,Boston College,Active
52
+ Nick Zakelj,63,OL,6-6,316,25,3,Fordham,Active
53
+ Player,#,Pos,HT,WT,Age,Exp,College,Reserve/Future
54
+ Isaac Alarcon,67,OL,6-7,320,26,1,Tecnológico de Monterrey,Reserve/Future
55
+ Russell Gage,84,WR,6-0,184,29,7,LSU,Reserve/Future
56
+ Isaiah Hodgins,87,WR,6-3,200,26,4,Oregon State,Reserve/Future
57
+ Quindell Johnson,,S,6-2,208,25,2,Memphis,Reserve/Future
58
+ Jalen McKenzie,76,OT,6-5,315,25,1,USC,Reserve/Future
59
+ Brandon Aiyuk,11,WR,6-0,200,27,5,Arizona State,Reserve/Injured
60
+ Aaron Banks,65,OL,6-5,325,27,4,Notre Dame,Reserve/Injured
61
+ Ben Bartch,78,OL,6-6,315,26,5,St. John's (MN),Reserve/Injured
62
+ Tre Brown,22,CB,5-10,185,27,4,Oklahoma,Reserve/Injured
63
+ Spencer Burford,74,OL,6-4,300,24,3,Texas-San Antonio,Reserve/Injured
64
+ Luke Gifford,57,LB,6-3,243,29,6,Nebraska,Reserve/Injured
65
+ Kevin Givens,90,DL,6-1,285,28,5,Penn State,Reserve/Injured
66
+ Darrell Luter Jr.,28,CB,6-0,190,24,2,South Alabama,Reserve/Injured
67
+ Jordan Mason,24,RB,5-11,223,25,3,Georgia Tech,Reserve/Injured
68
+ Christian McCaffrey,23,RB,5-11,210,28,8,Stanford,Reserve/Injured
69
+ Elijah Mitchell,25,RB,5-10,200,26,4,Louisiana,Reserve/Injured
70
+ Jaylon Moore,76,OL,6-4,311,27,4,Western Michigan,Reserve/Injured
71
+ George Odum,30,S,6-1,202,31,7,Central Arkansas,Reserve/Injured
72
+ Curtis Robinson,36,LB,6-3,235,26,3,Stanford,Reserve/Injured
73
+ Trent Williams,71,T,6-5,320,36,15,Oklahoma,Reserve/Injured
74
+ Mitch Wishnowsky,3,P,6-2,220,33,6,Utah,Reserve/Injured
data/49ers_fan_communities_clean_GOOD.csv ADDED
@@ -0,0 +1,384 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Name,Phone Number,Website,Meeting Location Address (Address),Meeting Location Address (Address2),Meeting Location Address (City),Meeting Location Address (State),Meeting Location Address (Zip),Meeting Location Address (Country),Fan Chapter Name,President First Name,President Last Name,Email Address,City,State,Country,Venue,Venue Location,Total Fans,Facebook,Instagram,X (Twitter),TikTok,WhatsApp,YouTube
2
+ ,52 4492612712,,,,,,,,49ers Aguascalientes,Cesar,Romo,[email protected],Aguascalientes,,Mexico,Vikingo Bar,"Av de la Convención de 1914 Sur 312-A, Las Américas, 20230 Aguascalientes, Ags., Mexico",174.0,https://www.facebook.com/share/1Wa7TPzBMX/,,,,,
3
+ ,52 (46) 1219 7801,,,,,,,,Bajio Faithful,Hector,Camarena,[email protected],"Celaya, GTO",,Mexico,California Prime Rib Restaurant,"Av. Constituyentes 1000 A, 3 Guerras, 38080 Celaya, Gto., Mexico",20.0,,,,,,
4
+ ,52 (96) 1654-1513,,,,,,,,Niner Empire Chiapas,Aroshi,Narvaez,[email protected],Chiapas,,Mexico,Alitas Tuxtla,"Blvd. Belisario Dominguez 1861 Loc K1 Tuxtl Fracc, Bugambilias, 29060 Tuxtla Gutiérrez, Chis., Mexico",250.0,Niner Empire Chiapas,https://www.instagram.com/49erschiapas/?hl=en,Niner Empire Chiapas,,,
5
+ ,52 (61) 4404-1411,,,,,,,,49ers Faithful Chihuahua Oficial,Jorge,Otamendi,[email protected],Chihuahua,,Mexico,El Coliseo Karaoke Sports Bar,"C. Jose Maria Morelos 111, Zona Centro, 31000 Chihuahua, Chih., Mexico",300.0,https://www.facebook.com/share/g/14tnsAwWFc/,https://www.instagram.com/49ersfaithfulchihuahua?igsh=bHE5ZWd6eTUxOWl3,,https://www.tiktok.com/@49ers.faithful.ch?_t=8rv1vcLFfBI&_r=1,,
6
+ ,52 (61) 41901197,,,,,,,,Gold Rush Chihuahua Spartans,Juan,García,[email protected],Chihuahua,,Mexico,34 Billiards & Drinks,"Av. Tecnológico 4903, Las Granjas 31100",976.0,https://www.facebook.com/groups/170430893136916/,,,,,
7
+ ,52 (55) 6477-1279,,,,,,,,Club 49ers Mexico,German,Rodriguez,[email protected],"Ciudad de Mexico, Mexico",,Mexico,Bar 49,16 Septiembre #27 Colonia Centro Historico Ciudad de Mexico,800.0,,club49ersmexico,club49ersmexico,Club49ersmexicooficial,,
8
+ ,52 (55) 6904-5174,,,,,,,,Club 49ers Durango Oficial,Victor,Arballo,[email protected],Durango,,Mexico,Restaurante Buffalucas Constitución,"C. Constitución 107B, Zona Centro, 34000 Durango, Dgo., Mexico",170.0,https://www.facebook.com/share/1TaDBVZmx2/?mibextid=LQQJ4d,https://www.instagram.com/49ers_dgo?igsh=ams1dHdibXZmN28w,,,,
9
+ ,52 (55) 707169,,,,,,,,Niner Empire Edo Mex,Alberto,Velasco,[email protected],Estado de Mexico,,Mexico,Beer Garden Satélite,"Cto. Circunvalación Ote. 10-L-4, Cd. Satélite, 53100 Naucalpan de Juárez, Méx., Mexico",250.0,,https://www.instagram.com/ninerempireedomex/,https://x.com/ninerempedomex,,,
10
+ ,52 (33) 2225-4392,,,,,,,,Club 49ers Jalisco,Marcela,Medina,[email protected],"Guadalajara, Jalisco",,Mexico,Restaurante Modo Avión Zapopan,"Calzada Nte 14, Granja, 45010 Zapopan, Jal., Mexico",40.0,,club49ersjalisco,Club 49ers Jalisco,,,
11
+ ,52 (33) 1046 3607,,,,,,,,Niner Empire Jalisco,Alonso,Partida,[email protected],"Guadalajara, Jalisco",,Mexico,SkyGames Sports Bar,"Av. Vallarta 874 entre Camarena y, C. Escorza, Centro, 44100 Guadalajara, Jal., Mexico",200.0,,niner_empire_jalisco,NinerEmpireJal,ninerempirejal,,
12
+ ,52 (65) 6228-3719,,,,,,,,Niner Empire Juarez Oficial,Hugo,Montero,[email protected],Juarez,,Mexico,Sport Bar Silver Fox,"Av. Paseo Triunfo de la República 430, Las Fuentes, 32530 Juárez, Chih., Mexico",300.0,,,,,,
13
+ ,52 (99) 9172-2810,,,,,,,,49ers Merida Oficial,Liliana,Vargas,[email protected],Merida,,Mexico,Taproom Mastache,"Av. Cámara de Comercio 263, San Ramón Nte, 97117 Mérida, Yuc., Mexico",290.0,,,,,,
14
+ ,52 (686) 243 7235,,,,,,,,Niner Empire Mexicali,Gabriel,Carbajal,[email protected],Mexicali,,Mexico,La Gambeta Terraza Sports Bar,"Calz. Cuauhtémoc 328, Aviación, 21230 Mexicali, B.C., Mexico",45.0,,,,,,
15
+ ,52 (81) 1500-4400,,,,,,,,49ers Monterrey Oficial,Luis,González,[email protected],Monterrey,,Mexico,Buffalo Wild Wings Insurgentes,"Av Insurgentes 3961, Sin Nombre de Col 31, 64620 Monterrey, N.L., Mexico",1200.0,,,,,,
16
+ ,52 (22) 21914254,,,,,,,,Club 49ers Puebla,Elias,Mendez,[email protected],Puebla,,Mexico,Bar John Barrigón,"Av. Juárez 2925, La Paz, 72160 Heroica Puebla de Zaragoza, Pue., Mexico",,,,,,,
17
+ ,52 (84) 4130-0064,,,,,,,,Niners Empire Saltillo,Carlos,Carrizales,[email protected],Saltillo,,Mexico,Cervecería La Huérfana,"Blvd. Venustiano Carranza 7046-Int 9, Los Rodríguez, 25200 Saltillo, Coah., Mexico",,,,,,,
18
+ ,52 (44) 4257-3609,,,,,,,,San Luis Potosi Oficial,Jose,Robledo,[email protected],San Luis Potosi,,Mexico,Bar VIC,"Av Nereo Rodríguez Barragán 1399, Fuentes del Bosque, 78220 San Luis Potosí, S.L.P., Mexico",,,,,,,
19
+ ,52 (66) 4220-6991,,,,,,,,49ers Tijuana Fans Oficial,Anthony,Daniel,[email protected],Tijuana,,Mexico,Titan Sports Bar,"J. Gorostiza 1209, Zona Urbana Rio Tijuana, 22320 Tijuana, B.C., Mexico",460.0,https://www.facebook.com/groups/49erstijuanafans/?ref=share&mibextid=NSMWBT,https://www.instagram.com/49erstijuanafansoficial/?igshid=OGQ5ZDc2ODk2ZA%3D%3D&fbclid=IwZXh0bgNhZW0CMTEAAR0SXTcgDss1aAUjjzK6Ge0Uhx9JkNszzeQgTRq94F_5Zzat-arK9kXEqWk_aem_sKUysPZe1NpmFRPlJppOYw&sfnsn=scwspwa,-,-,-,-
20
+ ,52 (72) 2498-5443,,,,,,,,49ers Club Toluca Oficial,Fernando,Salazar,[email protected],Toluca,,Mexico,Revel Wings Carranza,"Calle Gral. Venustiano Carranza 20 Pte. 905, Residencial Colón y Col Ciprés, 50120 Toluca de Lerdo, Méx., Mexico",,,,,,,
21
+ ,52 (228) 159-8578,,,,,,,,Cluib de Fans 49ers Veracruz,Luis,Mata,[email protected],Veracruz,,Mexico,Wings Army del Urban Center,"C. Lázaro Cárdenas 102, Rafael Lucio, 91110 Xalapa-Enríquez, Ver., Mexico",,,,,,,
22
+ ,6646124565,,,,,,,,49ersFanZone.net,Clemens,Kaposi,[email protected],Bad Vigaun,,Austria,,Neuwirtsweg 315,183.0,,,,,,
23
+ ,33 (0)6 365 269 84,,,,,,,,The Niner Empire France,Gilles,Schlienger,[email protected],Nousseviller Saint Nabor,,France,4 voie romaine,4 voie romaine,250.0,https://www.facebook.com/groups/295995597696338,,,,,
24
+ ,1704753958,,,,,,,,Niner Empire Germany-Bavaria Chapter,Mike,Beckmann,[email protected],Ismaning,,Germany,49er's Sports & Partybar,Muenchener Strasse 79,35.0,,,,,,
25
+ ,1735106462,,,,,,,,4T9 Mob Germany Family,Chris,Grawert,[email protected],Hamburg,,Germany,Jolly Roger,Budapester Str. 44,6.0,https://www.facebook.com/4T9MOBGermany,,,,,
26
+ ,49 15758229310,,,,,,,,49 Niner Empire,Andra,Theunert,[email protected],Cologne State: NRW,,Germany,Joe Camps Sports Bar,Joe Champs,104.0,,,,,,
27
+ ,1795908826,,,,,,,,The Niner Empire Germany Berlin Chapter,Jermaine,Benthin,[email protected],Berlin,,Germany,Sportsbar Tor133,Torstrasse 133,17.0,,,,,,
28
+ ,1607512643,,,,,,,,,Heltewig,Thorsten,[email protected],Bornhöved,,Germany,Comeback,Mühlenstraße 11,20.0,,,,,,
29
+ ,1738803983,,,,,,,,49ers Fans Bavaria,Thomas,Igerl,[email protected],Ampfing,,Germany,Holzheim 1a/Ampfing,Holzheim 1a,30.0,https://www.facebook.com/49ersfansbavaria,,,,,
30
+ ,1234567899,http://germany.theninerempire.com/,,,,,,,The Niner Empire Germany - North Rhine-Westphalia Chapter,Timo,Allhoff,[email protected],Duesseldorf,,Germany,Knoten,Kurze Strasse 1A,62.0,,,,,,
31
+ ,1708859408,,,,,,,,Niner Empire Germany-NRW Chapter,Hermann,van,[email protected],Cologne,,Germany,Joe Champs Sportsbar Cologne,Hohenzollernring 1 -3,27.0,,,,,,
32
+ ,3.53E+11,,,,,,,,The Irish Faithful,Colly,Mc,[email protected],Dublin 13,,Ireland,Busker On The Ball,13 - 17 Fleet Street,59.0,,,https://twitter.com/49ersIre,,,
33
+ ,0039 3282181898,,,,,,,,49ers Italian Fan Club,Enzo,Marrocchino,[email protected] + [email protected],Fiorano Modenese,,Italy,The Beer Corner,"Via Roma, 2/A",50.0,https://www.facebook.com/groups/49ersItalianFanClub,,,,,
34
+ ,649058694,https://laminapodcast.wixsite.com/lamina,,,,,,,Mineros Spanish Faithful,Luis,Miguel,[email protected] + [email protected],Madrid,,Spain,Penalti Lounge Bar,Avenida Reina 15,15.0,,,,,,
35
+ ,6507841235,http://www.sportssf.com.br,,,,,,,Equipe Sports SF,Alessandro,Marques,[email protected],Sao Paulo,,Brazil,"Website, Podcast, Facebook Page, Twitter","Rua Hitoshi Ishibashi, 11 B",14.0,,,,,,
36
+ ,1197444761,http://www.49ersbrasil.com.br,,,,,,,49ers Brasil,Fabio,Moraes,[email protected],"Campo Limpo, Sao Paulo",,Brazil,Bars and Restaurants in São Paulo - SP,,870.0,,,,,,
37
+ ,5511992650,,,,,,,,San Francisco 49ers Brasil,Otavio,Alban,[email protected],"Sao Bernardo do Campo, Sao Paulo",,Brazil,Multiple locations around south and southeast states of Brazil,,104.0,https://www.facebook.com/groups/49ninersbrasil/,,,,,
38
+ ,6046266697,http://www.theninerempire.com,,,,,,,"Niner Empire --Vanouver,BC Chapter",Hector,Alvarado/Neil,[email protected],"Vancouver, BC",,Canada,"The Sharks Club--Langley, BC",20169 88 Avenue,31.0,,,,,,
39
+ ,4167796921,,,,,,,,True North Niners,Shawn,Vromman,[email protected],"Bolton, Ontario",,Canada,Maguire's Pub,284 Queen st E,25.0,,,,,,
40
+ ,507 66737171,,,,,,,,Faithful Panama,Ricardo,Vallarino,[email protected],,,Panama,5inco Panama,8530 NW 72ND ST,249.0,,,,,,
41
+ ,6493015128,,,,,,,,Niner Empire New Zealand,Karam,Chand,[email protected],Auckland,,New Zealand,The Kingslander,470 New North Road,15.0,https://www.facebook.com/#!/groups/212472585456813/,,,,,
42
+ ,6768804977,,,,,,,,49er Fans-Tonga,Nusi,Taumoepeau,[email protected],Nuku'alofa,,Tonga,Tali'eva Bar,14 Taufa'ahau Rd,8.0,,,,,,
43
+ ,7857047023,,,,,,,,49ers Faithful UK,Mike,Palmer,[email protected],Greater Manchester,,United Kingdom,the green,Ducie street Manchester Greater Manchester Lancashire m1 United Kingdom,100.0,,,,,,
44
+ ,7506116581,www.49erfaithfuluk.co.uk,,,,,,,49er Faithful UK,Lee,Gowland,[email protected],Newcastle,,United Kingdom,Grosvenor Casino,100 St James' Blvd Newcastle Tyne & Wear CA 95054 United Kingdom,3000.0,,,,,,
45
+ ,8774734977,,,,,,,,49ers of United Kingdom,Nauman,Malik,[email protected],London,,United Kingdom,The Sports Cafe,80 Haymarket London SW1Y 4TE United Kingdom,8.0,,,,,,
46
+ ,1616553629,,,,,,,,Niner Empire UK,Mike,Palmer,[email protected],Manchester,,United Kingdom,The Green,"Bridge House 26 Ducie Street, Manchester, Manchester M1 2dq United Kingdom",30.0,,,,,,
47
+ ,6264841085,,,,,,,,"San Francisco 49er Fans of Charleston, SC",Kurtis,Johnson,[email protected],Charleston,SC,United States,Recovery Room Tavern,685 King St,12.0,https://www.facebook.com/profile.php?id=100095655455065,,,,,
48
+ ,5309536097,,,,,,,,530 Empire,Oscar,Mendoza,[email protected],Chico,Ca,United States,Nash's,1717 Esplanade,45.0,,https://www.instagram.com/530empire?igsh=OGQ5ZDc2ODk2ZA%3D%3D&utm_source=qr,,,,
49
+ ,(720) 345-2580,,,,,,,,303 Denver Chapter Niner Empire,Andy,Martinez,[email protected],Aurora,CO,United States,Moes Bbq,2727 s Parker rd,30.0,,,,,,
50
+ ,3238332262,,,,,,,,40NINERS L.A. CHAPTER,JOSE,DIAZ,[email protected],bell,ca,United States,KRAZY WINGS SPORTS & GRILL,7016 ATLANTIC AVE,25.0,,,,,,
51
+ ,(434) 441-1187,,,,,,,,434 Virginia Niner Empire,Thomas,Hunt,[email protected],Danville,VA,United States,Kickbacks Jacks,140 Crown Dr,20.0,,,,,,
52
+ ,(925) 457-6175,,,,,,,,480 Gilbert Niner Empire LLC,Betty,OLIVARES,[email protected],Gilbert,AZ,United States,The Brass Tap,313 n Gilbert rd,100.0,,,,,,
53
+ ,8126048419,,,,,,,,Midwest Empire,Travis,Bonnell,[email protected],Evansville,IN,United States,Hooters Evansville,2112 Bremmerton Dr,6.0,https://www.facebook.com/share/5KGRDSPtyHgFYRSP/?mibextid=K35XfP,,,,,
54
+ ,7075921442,,,,,,,,49er Booster Club of Vacaville,Josh,Ojeda,[email protected],Vacaville,CA,United States,Blondies Bar and Grill,555 Main Street,75.0,,,,,,
55
+ ,7602655202,,,,,,,,49er Empire High Desert,TJ,Hilliard,[email protected],Hesperia,California,United States,Whiskey Barrel,12055 Mariposa Rd.,89.0,https://www.facebook.com/groups/49erEmpireHighDesertChapter/,,,,,
56
+ ,5308239740,,,,,,,,Cool 49er Booster Club,Paul,Jones,[email protected],Cool,CA,United States,The Cool Beerworks,5020 Ellinghouse Dr Suite H,59.0,,,,,,
57
+ ,8183269651,,,,,,,,49ersBeachCitiesSoCal,Rick,Mitchell,[email protected],Hermosa Beach,CA,United States,American Junkie Sky Light Bar,American Junkie,100.0,,,,,,
58
+ ,7202278251,,,,,,,,49ers Denver Empire,Miguel,Alaniz,[email protected],Aurora,Co,United States,Moe's Original BBQ Aurora,2727 S Parker Rd,30.0,,,,,,
59
+ ,3605679487,,,,,,,,49ers Forever Faithfuls,Wayne,Yelloweyes-Ripoyla,[email protected],Vancouver,Wa,United States,Hooligan's sports bar and grill,"8220 NE Vancouver Plaza Dr, Vancouver, WA 98662",10.0,,,,,,
60
+ ,9566600391,,,,,,,,South Texas 49ers Chapter,Patty,Torres,[email protected],Harlingen,TX,United States,Wing barn,412 sunny side ln,350.0,https://www.facebook.com/groups/2815298045413319/?ref=share,,,,,
61
+ ,3109547822,,,,,,,,49ers Los Angeles,Jeff,Cheung,[email protected],Hollywood,CA,United States,Dave & Buster's Hollywood,6801 Hollywood Blvd.,27.0,,,,,,
62
+ ,3234765148,,,,,,,,49ers United Of Frisco TX,Frank,Murillo,[email protected],Frisco,TX,United States,The Frisco Bar and Grill,6750 Gaylord Pkwy,1020.0,https://www.facebook.com/groups/49ersunitedoffriscotx/?ref=share&mibextid=hubsqH,,,,,
63
+ ,6193151122,,,,,,,,619ers San Diego Niner Empire,Ana,Pino,[email protected],San Diego,California,United States,Bridges Bar & Grill,4800 Art Street,20.0,,,,,,
64
+ ,6266742121,,,,,,,,626 FAITHFUL'S,Isaac,C. De La Fuente,[email protected],City of Industry,California,United States,Hacienda Heights Pizza Co.,15239 E Gale Ave,40.0,,,,,,
65
+ ,6507438522,,,,,,,,Niner Empire 650 Chapter,Vanessa,Corea,[email protected],Redwood City,CA,United States,5th Quarter,976 Woodside Rd,35.0,,http://www.instagram.com/650ninerempire,,,,
66
+ ,6199949071,,,,,,,,714 Niner Empire,Daniel,Hernandez,[email protected],Oxnard,CA,United States,"Bottoms Up Tavern, 2162 West Lincoln Ave, Anaheim CA 92801",3206 Lisbon Lane,4.0,,,,,,
67
+ ,9513704443,,,,,,,,9er Elite Niner Empire,Penny,Mapes,[email protected],Lake Elsinore,California,United States,Pin 'n' Pockets,32250 Mission Trail,25.0,,,,,,
68
+ ,4806780578,,,,,,,,Az 49er Faithful,Kimberly,"""""Kimi"""" Daniel",[email protected],Gilbert,Az,United States,Fox and Hound!,1017 E Baseline Rd,58.0,,,,,,
69
+ ,7078896983,,,,,,,,Niners Winers,A.m.,Early,[email protected],Forestville,Ca,United States,Bars and wineries in sonoma and napa counties,River road,25.0,,,,,,
70
+ ,2144897300,,,,,,,,a_49er fan,Angel,Barba,[email protected],wylie,texas,United States,Wylie,922 cedar creek dr.,12.0,,,,,,
71
+ ,4153206471,,,,,,,,Niner Empire Marin,Aaron,Clark,[email protected],Novato,CA,United States,Moylan's Brewery & Restaurant,15 Rowland Way,13.0,,,,,,
72
+ ,2095344459,,,,,,,,4T9 Mob,Angel,Cruz,[email protected],Modesto,ca,United States,Jack's pizza cafe,2001 Mchenry ave,30.0,,,,,,
73
+ ,5708529383,,,,,,,,North Eastern Pennsyvania chapter,Benjamin,Simon,[email protected],Larksville,PA,United States,Zlo joes sports bar,234 Nesbitt St,25.0,,,,,,
74
+ ,5039150229,,,,,,,,PDX Frisco Fanatics,Adam,Hunter,[email protected],Portland,Or,United States,Suki's bar and Grill,2401 sw 4th ave,8.0,,,,,,
75
+ ,(408) 981-0615,,,,,,,,The 101 Niner Empire,ANDRONICO [Adrian],FERNANDEZ,[email protected],Morgan Hill,CA,United States,Huntington Station restaurant and sports pub,Huntington Station restaurant and sports pub,10.0,https://www.facebook.com/THE101NINEREMPIRE/,,,,,
76
+ ,8147901621,,,,,,,,Faithful Tri-State Empire,Armando,Holguin,[email protected],Erie,PA,United States,Buffalo Wild Wings,2099 Interchange Rd,10.0,https://www.facebook.com/groups/1145565166387786/,,,,,
77
+ ,9282100493,,,,,,,,YUMA Faithfuls,Steven,Navarro,[email protected],Yuma,AZ,United States,Hooters,1519 S Yuma Palms Pkwy,305.0,Yuma Faithfuls (FaceBook group page),,,,,
78
+ ,5103146643,,,,,,,,49ER EMPIRE SF Bay Area Core Chapter,AJ,Esperanza,[email protected],Fremont,california,United States,Jack's Brewery,39176 Argonaut Way,1500.0,,,,,,
79
+ ,8506982520,,,,,,,,Niner Empire Orlando Chapter,Aaron,Hill,[email protected],Orlando,FL,United States,Underground Public House,19 S Orange Ave,50.0,,,,,,
80
+ ,5805913565,,,,,,,,Niner Artillery Empire,Alicia/Airieus,DeLeon/Ervin,[email protected],517 E Gore Blvd,OK,United States,Sweet Play/ Mike's Sports Grill,2610 Sw Lee Blvd Suite 3 / 517 E Gore Blvd,25.0,,,,,,
81
+ ,5104993415,,,,,,,,510 Empire,Alex,Banks,[email protected],Alameda,CA,United States,McGee's Bar and Grill,1645 Park ST,10.0,,,,,,
82
+ ,5105082055,,,,,,,,Garlic City Faithful,Abdul,Momeni,[email protected],Gilroy,CA,United States,Straw Hat Pizza,1053 1st Street,3.0,,,,,,
83
+ ,2092918080,,,,,,,,Faithful to the Bay,Angel,Alvarez,[email protected],Merced,CA,United States,Home,Mountain mikes pizza,15.0,,,,,,
84
+ ,5627391639,,,,,,,,O.C. NINER EMPIRE FAITHFUL'S,Angel,Grijalva,[email protected],Buena park,CA,United States,Ciro's pizza,6969 la Palma Ave,10.0,,,,,,
85
+ ,408-209-1677,,,,,,,,408 Faithfuls,Angelina,Arevalo,[email protected],Milpitas,CA,United States,Big Al's Silicon Valley,27 Ranch Drive,50.0,IG- @408faithfuls,,,,,
86
+ ,6507841235,,,,,,,,415 chapter,Angelo,Hernandez,[email protected],san francisco,California,United States,49er Faithful house,2090 Bryant street,200.0,,,,,,
87
+ ,3038641585,,,,,,,,HairWorks,Annie,,[email protected],Denver,Co,United States,hairworks,2201 Lafayette at,1.0,,,,,,
88
+ ,(925) 481-0343,,,,,,,,49ers Room The Next Generation Of Faithfuls,Antonio,Caballero,[email protected],Tlalnepantla de Baz,CA,United States,Buffalo Wild Wings Mindo E,Blvd. Manuel Avila Camacho 1007,12.0,,,,,,
89
+ ,2098182020,,,,,,,,Niner Empire 209 Modesto Chapter,Paul,Marin,[email protected],Modesto,CA,United States,Rivets American Grill,2307 Oakdale Rd,50.0,https://www.facebook.com/niner.ninjas?ref=bookmarks,,,,,
90
+ ,2539616009,,,,,,,,Lady Niners of Washington,April,Costello,[email protected],Auburn,Wa,United States,Sports Page,2802 Auburn Way N,13.0,,,,,,
91
+ ,4803290483,,,,,,,,AZ 49ER EMPIRE,GARY,MARTINEZ,[email protected],Phoenix,AZ,United States,The Native New Yorker (Ahwatukee),5030 E Ray Rd.,130.0,,,,,,
92
+ ,9096214821,,,,,,,,The Bulls Eye Bar 49ers,Armando,M. Macias,[email protected],Montclair,California,United States,Black Angus Montclair California,9415 Monte Vista Ave.,20.0,,,,,,
93
+ ,5404245114,,,,,,,,NoVa Tru9er Empire,Jay,balthrop,[email protected],Woodbridge,va,United States,Morgan's sports bar & lounge,3081 galansky blvd,40.0,,,,,,
94
+ ,(951) 691-6631,,,,,,,,Niner Empire 951 Faithfuls,Samuel,Betancourt,[email protected],Hemet,CA,United States,"George's Pizza 2920 E. Florida Ave. Hemet, Ca.",2920 E. Florida Ave.,30.0,https://www.facebook.com/951Faithfuls/,,,,,
95
+ ,8174956499,,,,,,,,Spartan Niner Empire Texas,Adreana,Corralejo,[email protected],Arlington,TX,United States,Bombshells Restaurant & Bar,701 N. Watson Rd.,12.0,,,,,,
96
+ ,3234720160,,,,,,,,THEE EMPIRE FAITHFUL LOS ANGELES COUNTY,Dennis,Guerrero II,[email protected],Los Angeles,CA,United States,Home,1422 Saybrook Ave,25.0,,,,,,
97
+ ,5103756841,,,,,,,,Niner Empire Richmond 510 Chapter,David,Watkins,[email protected],San Pablo,Ca,United States,Noya Lounge,14350 Laurie Lane,50.0,,,,,,
98
+ ,9254810343,,,,,,,,Thee Empire Faithful The Bay Area,Ant,Caballero,[email protected],Oakley,Ca,United States,Sabrina's Pizzeria,2587 Main St,20.0,,,,,,
99
+ ,8049013890,,,,,,,,The Mid Atlantic Niner Empire Chapter,Jacob,Tyree,[email protected],Mechanicsville,Va,United States,The Ville,7526 Mechanicsville Turnpike,10.0,https://www.facebook.com/#!/groups/290644124347980/,,,,,
100
+ ,6058683729,,,,,,,,Big Sky SF 49ers,Jo,Poor Bear,[email protected],Billings,MT,United States,Old Chicago - Billings,920 S 24th Street W,10.0,,,,,,
101
+ ,808-387-7075,,,,,,,,Hawaii Niner Empire,Bryson,Kerston,[email protected],Waipahu,HI,United States,The Hale,94-983 kahuailani st,25.0,,,,,,
102
+ ,5597896991,,,,,,,,Niner Empire Porterville Cen Cal 559,Olivia,"""""bo"""" Ortiz or Patricia Sanchez",[email protected],Porterville,Ca,United States,Pizza Factory/ Local Bar & Grill,897 W. Henderson,34.0,,,,,,
103
+ ,4132734010,,,,,,,,W.MA CHAPTER NINER EMPIRE,BECKY,OSORIO,[email protected],CHICOPEE,MA,United States,MAXIMUM CAPACITY,116 SCHOOL ST,36.0,,,,,,
104
+ ,(757) 708-0662,,,,,,,,Hampton Roads Niner Empire (Southside Chapter),Braxton,Gaskins,[email protected],Norfolk,VA,United States,Azalea Inn / Timeout Sports Bar,Azalea Inn / Timeout Sports Bar,40.0,,,,,,
105
+ ,5598042288,,,,,,,,Central Valley Niners,Jesse,moreno,[email protected],Visalia,Ca,United States,Pizza factory,3121 w noble,35.0,,,,,,
106
+ ,6094038767,,,,,,,,Niner Knights,Bryan,Teel,[email protected],Ewing Twp,NJ,United States,Game Room of River Edge Apts,1009 Country Lane,35.0,,,,,,
107
+ ,3463344898,,,,,,,,Lone Star Niner Empire,Myrna,Martinez,[email protected],Houston,TX,United States,Post oak ice house,5610 Richmond Ave.,33.0,,,,,,
108
+ ,8082657452,,,,,,,,Hawaii Faithfuls,Rey,Buzon,[email protected],Honolulu,HI,United States,Champions Bar & Grill,1108 Keeaumoku Street,30.0,,,,,,
109
+ ,9099571468,,,,,,,,49er Faithful of Murrieta,Colleen,Hancock,[email protected],Murrieta,CA,United States,Sidelines Bar & Grill,24910 Washington Ave,30.0,,,,,,
110
+ ,9168221256,,,,,,,,Capitol City 49ers,Erica,Medina,[email protected],Sacramento,CA,United States,Tom's Watch Bar DOCO,Tom's Watch Bar 414 K St suite 180,1300.0,https://www.facebook.com/groups/1226671178132767/?ref=share,,,,,
111
+ ,3103496959,,,,,,,,Huntington Beach Faithfuls,Carlos,Pizarro,[email protected],Huntington Beach,CA,United States,BEACHFRONT 301,301 Main St. Suite 101,100.0,,,,,,
112
+ ,(210) 375-6746,,,,,,,,Niner Empire Saltillo,Carlos,Carrizales,[email protected],Saltillo,TX,United States,Cadillac Saltillo Bar,Cadillac Saltillo Bar,116.0,Club 49ers Saltillo @ Facebook,,,,,
113
+ ,9035527931,,,,,,,,Germantown 49er's Club,CM,Rosenthal,[email protected],Memphis,TN,United States,Mr. P's Sports Bar Hacks Cross Rd.,3284 Hacks Cross Road,103.0,,,,,,
114
+ ,12093462496,,,,,,,,49ers faithful,Ray,Castillo,[email protected],KEYES,CA,United States,Mt mikes ceres ca,4618 Blanca Ct,8.0,,,,,,
115
+ ,2094561796,,,,,,,,Ladies Of The Empire,Catherine,Tate,[email protected],Manteca,Ca,United States,Central Valley and Bay Area,1660 W. Yosemite Ave,247.0,,,,,,
116
+ ,7027735380,,,,,,,,Las Vegas Niner Empire 702,blu,villegas,[email protected],Las Vegas,NV,United States,Calico Jack's,8200 W. Charleston rd,300.0,,,,,,
117
+ ,3107487035,,,,,,,,49ers Faithfuls in DC,Catie,Bailard,[email protected],Washington,DC,United States,Town Tavern,2323 18th Street NW,150.0,,,,,,
118
+ ,6619722639,,,,,,,,49er Booster Club of Roseville,Cece,Moats,[email protected],Roseville,CA,United States,Bunz Sports Pub & Grub,311 Judah Street,32.0,,,,,,
119
+ ,6613033911,,,,,,,,Kern County Niner Empire,Sal,Luna,[email protected],Bakersfield,Ca,United States,Firehouse Restaurant,7701 White Lane,100.0,,,,,,
120
+ ,8315126139,,,,,,,,Central Coast Niner Empire 831,Rafael,Garcia,[email protected],Salinas,CA,United States,Buffalo Wild Wings,1988 North Main St,11.0,Facebook.com/CentralCoastNinerEmpire831,,,,,
121
+ ,8315126139,,,,,,,,Central Coast Niner Empire 831,Rafael,Garcia,[email protected],Salinas,CA,United States,Pizza Factory,1945 Natividad Rd,22.0,Facebook.com/CentralCoastNinerEmpire831,,,,,
122
+ ,2817509505,,,,,,,,Houston Niner Empire,Carlos,Duarte,[email protected],Houston,TX,United States,Home Plate Bar & Grill,1800 Texas Street,107.0,https://m.facebook.com/HoustonNinerEmpire/,,,,,
123
+ ,4068535155,,,,,,,,Train Whistle Faithful,Christopher,Gunnare,[email protected],Mountain View,CA,United States,Savvy Cellar,750 W. Evelyn Avenue,13.0,,,,,,
124
+ ,3104659461,,,,,,,,Corpus Christi Chapter Niner Empire,Arturo,Hernandez,[email protected],Corpus Christi,TX,United States,Cheers,419 Starr St.,37.0,,,,,,
125
+ ,3528070372,,,,,,,,Niner Empire Dade City,Fernando,Chavez,[email protected],Dade City,Florida,United States,Beef O Brady's Sports Bar,14136 7th Street,22.0,,,,,,
126
+ ,5309536097,,,,,,,,Chico Faithfuls,Oscar,Mendoza,[email protected],Chico,CA,United States,Mountain Mikes Pizza,1722 Mangrove Ave,32.0,http://facebook.com/chicofaithfuls,,,,,
127
+ ,8473099909,,,,,,,,Chicago Niners,Chris,Johnston,[email protected],Chicago,IL,United States,Cheesie's Pub & Grub 958 W Belmont Ave Chicago IL 60657,958 W Belmont Ave,75.0,,,,,,
128
+ ,7076556423,,,,,,,,Niner Empire 916 Sac Town,Lehi,Amado/Anthony Moreno,[email protected],Sacramento,CA,United States,El Toritos,1598 Arden blvd,40.0,http://www.Facebook.com,,,,,
129
+ ,7193377546,,,,,,,,49ER EMPIRE COLORADO CHAPTER,CHARLES,M. DUNCAN,[email protected],Colorado Springs,Co.,United States,FOX & HOUND COLORADO SPRINGS,3101 New Center Pt.,25.0,,,,,,
130
+ ,3364512567,,,,,,,,49ers NC Triad Chapter,Christopher,Miller,[email protected],Greensboro,NC,United States,Kickback Jack's,1600 Battleground Ave.,10.0,,,,,,
131
+ ,4588992022,,,,,,,,Central Oregon 49ers Faithful,George,Bravo,[email protected],Redmond,OR,United States,Redmond Oregon,495 NW 28th St,1.0,,,,,,
132
+ ,3108979404,,,,,,,,Westside 9ers,Naimah,Shamsiddeen,[email protected],Carson,CA,United States,Los Angeles,1462 E Gladwick St,20.0,,,,,,
133
+ ,2173173725,,,,,,,,Niner Empire Illinois Chapter,Max,Tuttle,[email protected],Mattoon,Illinois,United States,"residence, for now",6 Apple Drive,6.0,,,,,,
134
+ ,2089642981,,,,,,,,Treasure Valley 49er Faithful,Curt,Starz,[email protected],Star,ID,United States,The Beer Guys Saloon,10937 W State St,50.0,https://www.facebook.com/TV49erFaithful/,,,,,
135
+ ,2039484616,,,,,,,,Ct faithful chapter,Tim,Maroney,[email protected],stamford,ct,United States,buffalo wild wings,208 summer st,33.0,,,,,,
136
+ ,3057780667,,,,,,,,305 FAITHFUL EMPIRE,Damien,Lizano,[email protected],Miami,FL,United States,Walk-On's,9065 SW 162nd Ave,18.0,,,,,,
137
+ ,1415902100,,,,,,,,Fillmoe SF Niners Nation Chapter,Daniel,Landry,[email protected],San Francisco,CA,United States,Honey Arts Kitchen by Pinot's,1861 Sutter Street,16.0,,,,,,
138
+ ,6199949071,,,,,,,,49ers So Cal Faithfuls,Daniel,Hernandez,[email protected],Oxnard,CA,United States,So Cal (Various locations with friends and family),3206 Lisbon Lane,4.0,,,,,,
139
+ ,(817) 675-7644,,,,,,,,Niner Empire DFW,Danny,Ramirez,[email protected],Arlington,TX,United States,Walk-Ons Bistreaux,Walk-Ons Bistreaux,75.0,www.facebook.com/ninerempiredfw,,,,,
140
+ ,(505) 480-6101,,,,,,,,Duke City Faithful Niner Empire,Danny,Roybal,[email protected],Albuquerque,NM,United States,Duke City Bar And Grill,6900 Montgomery Blvd NE,93.0,www.facebook.com/@dukecityfaithful505,,,,,
141
+ ,8089545569,,,,,,,,49ers @ Champions,Davis,Price,[email protected],Honolulu,Hawaii,United States,Champions Bar and Grill,1108 Keeaumoku St,12.0,,,,,,
142
+ ,870-519-9373,,,,,,,,Natural State Niners Club,Denishio,Blanchett,[email protected],Jonesboro,AR,United States,"Buffalo Wild Wings, Jonesboro, AR",Buffalo Wild Wings,18.0,,,,,,
143
+ ,7706664527,,,,,,,,49er Empire - Georgia Chapter,Brian,Register,[email protected],Marietta,ga,United States,Dave & Busters of Marietta Georgia,2215 D and B Dr SE,23.0,https://www.facebook.com/49erEmpireGeorgiaChapter,,,,,
144
+ ,(928) 302-6266,,,,,,,,San Francisco 49ers of San Diego,Denise,Hines,[email protected],San Diego,CA,United States,Moonshine Beach,Moonshine Beach Bar,80.0,,,,,,
145
+ ,5204147239,,,,,,,,Sonoran Desert Niner Empire,Derek,Yubeta,[email protected],Maricopa,AZ,United States,Cold beers and Cheeseburgers,20350 N John Wayne pkwy,50.0,Facebook Sonoran Desert Niner Empire,,,,,
146
+ ,315-313-8105,,,,,,,,49ers Empire Syracuse 315 Chapter,Dexter,Grady,[email protected],Syracuse,NY,United States,Change of pace sports bar,1809 Grant Blvd,233.0,Facebook 49ers Empire Syracuse 315 Chapter,,,,,
147
+ ,8058901997,,,,,,,,Niner Empire Ventura Chapter,Diego,Rodriguez,[email protected],Ventura,CA,United States,El Rey Cantina,El Rey Cantina,20.0,,,,,,
148
+ ,(717) 406-4494,,,,,,,,540 Faithfuls of the Niner Empire,Derrick,Lackey Sr,[email protected],Fredericksburg,VA,United States,Home Team Grill,1109 Jefferson Davis Highway,8.0,,,,,,
149
+ ,8134588746,,,,,,,,Ninerempire Tampafl Chapter,john,downer,[email protected],tampa,fl,United States,Ducky's,1719 eest Kennedy blvd,25.0,,,,,,
150
+ ,5857393739,,,,,,,,Gold Diggers,Drew,Nye,[email protected],Rochester,New York,United States,The Blossom Road Pub,196 N. Winton Rd,12.0,,,,,,
151
+ ,2545482581,,,,,,,,Niner Empire Waco Chapter,Dustin,Weins,[email protected],Waco,TX,United States,Salty Dog,2004 N. Valley Mills,36.0,https://www.facebook.com/groups/Waco49ersFans/,,,,,
152
+ ,9253823429,,,,,,,,Niner Empire of Brentwood,Elvin,Geronimo,[email protected],Brentwood,CA,United States,Buffalo Wild Wings,6051 Lone Tree Way,30.0,,,,,,
153
+ ,7173301611,,,,,,,,"NinerEmpire of Lancaster, PA",Eli,Jiminez,[email protected],Lancaster,PA,United States,PA Lancaster Niners Den,2917 Marietta Avenue,50.0,https://www.facebook.com/NinerEmpireLancasterPA,,,,,
154
+ ,9156671234,,,,,,,,Empire Tejas 915- El Paso TX,Jr,& Yanet Esparza,[email protected],El Paso,Tx,United States,EL Luchador Taqueria/Bar,1613 n Zaragoza,28.0,,,,,,
155
+ ,9168221256,,,,,,,,Capitol City 49ers fan club,Erica,medina,[email protected],West Sacramento,CA,United States,Burgers and Brew restaurant,317 3rd St,80.0,,,,,,
156
+ ,6269276427,,,,,,,,Golden Empire Hollywood,Ernie,Todd Jr,[email protected],Los Angeles,CA,United States,Nova Nightclub,7046 Hollywood Blvd,10.0,,https://www.instagram.com/goldenempire49ers/,,,,
157
+ ,7202714410,,,,,,,,Spartan Niner Empire Denver,Esley,Sullivan,[email protected],Denver,CO,United States,Downtown Denver,In transition,9.0,Facebook: Spartans of Denver,,,,,
158
+ ,3244765148,,,,,,,,49er empire of Frisco Texas,Frank,Murillo,[email protected],Frisco,TX,United States,The Irish Rover Pub & Restaurant,8250 Gaylord Pkwy,150.0,,,,,,
159
+ ,7079804862,,,,,,,,FAIRFIELD CHAPTER,CHARLES,MCCARVER JR,[email protected],Fairfield,CA,United States,Legends Sports Bar & Grill,3990 Paradise Valley Rd,24.0,https://www.facebook.com/pages/NINER-Empire-Fairfield-Chapter/124164624589973,,,,,
160
+ ,5302434949,,,,,,,,Shasta Niners,Ruth,Rhodes,[email protected],Redding,CA,United States,Shasta Niners Clubhouse,4830 Cedars Rd,80.0,,,,,,
161
+ ,4156021439,,,,,,,,NINER EMPIRE FREMONT CHAPTER,Elmer,Urias,[email protected],Fremont,CA,United States,Buffalo Wild Wings,43821 Pacific Commons Blvd,22.0,,,,,,
162
+ ,701-200-2001,,,,,,,,Fargo 49ers Faithful,Sara,Wald,[email protected],Fargo,ND,United States,Herd & Horns,1414 12th Ave N,25.0,,,,,,
163
+ ,5309022915,,,,,,,,49ER ORIGINALS,Noah,Abbott,[email protected],Redding,CA,United States,BLEACHERS Sports Bar & Grill,2167 Hilltop Drive,50.0,http://www.facebook.com/49ERORIGINALS,,,,,
164
+ ,8439910310,,,,,,,,"49er Flowertown Empire of Summerville, SC",Michele,A. McGauvran,[email protected],Summerville,South Carolina,United States,Buffalo Wild Wings,109 Grandview Drive #1,20.0,,,,,,
165
+ ,(321) 684-1543,,,,,,,,49ers of Brevard County,Anthony,Lambert,[email protected],Port St Johns,FL,United States,Beef O'Bradys in Port St. Johns,3745 Curtis Blvd,5.0,,,,,,
166
+ ,9092227020,,,,,,,,Forever Faithful Clique,Rosalinda,Arvizu,[email protected],San Bernardino,CA,United States,The Study Pub and Grill,5244 University Pkwy Suite L,10.0,,,,,,
167
+ ,9098090868,,,,,,,,49ERS FOREVER,BOBBY,MENDEZ,[email protected],REDLANDS,CALIFORNIA,United States,UPPER DECK,1101 N. CALIFORNIA ST.,80.0,,,,,,
168
+ ,6612050411,,,,,,,,Thee Empire Faithful Bakersfield,Faustino,Gonzales,[email protected],Bakersfield,Ca,United States,Senor Pepe's Mexican Restaurant,8450 Granite Falls Dr,20.0,https://www.facebook.com/Thee-Empire-Faithful-Bakersfield-385021485035078/,,,,,
169
+ ,3109022071,,,,,,,,Saloon Suad,Gary,Fowler,[email protected],Los Angeles,ca,United States,San Francisco Saloon Bar,11501,20.0,,,,,,
170
+ ,7028602312,,,,,,,,Troy'a chapter,Gerardo,Villanueva,[email protected],Troy,OH,United States,Viva la fiesta restaurant,836 w main st,12.0,,,,,,
171
+ ,9099130140,,,,,,,,Niner Empire IE Chapter,Gabriel,Arroyo,[email protected],San Bernardino,California,United States,Don Martins Mexican Grill,1970 Ostrems Way,50.0,http://www.facebook.com/#!/ninerempire.iechapter/info,,,,,
172
+ ,2095701072,,,,,,,,20916 Faithful,Joe,Trujillo,[email protected],Elk Grove,CA,United States,Sky River Casino,1 Sky River Parkway,25.0,,,,,,
173
+ ,6265396855,,,,,,,,SO. CAL GOLD BLOODED NINER'S,Louie,Gutierrez,[email protected],Hacienda heights,CA,United States,SUNSET ROOM,2029 hacinenda blvd,20.0,Facebook group page/instagram,,,,,
174
+ ,3053603672,,,,,,,,"South Florida's Faithful, Niner Empire",Dawn,Renae Desborough,[email protected],Homestead,Fl,United States,Chili's in Homestead,2220 NE 8TH St.,10.0,https://www.facebook.com/southfloridafaithfuls,,,,,
175
+ ,4804527403,,,,,,,,Cesty's 49ers Faithful,Pablo,Machiche,[email protected],Chandler,AZ,United States,Nando's Mexican Cafe,1890 W Germann Rd,25.0,,,,,,
176
+ ,(956) 342-2285,,,,,,,,Niner Gang Empire,Marquez,Gonzalez,[email protected],EDINBURG,TX,United States,Danny Bar & Grill,4409 Adriana,2.0,,,,,,
177
+ ,7852700872,,,,,,,,The Bell Ringers,Gretchen,Gier,[email protected],Manhattan,KS,United States,Jeff and Josie Schafer's House,1517 Leavenworth St.,10.0,,,,,,
178
+ ,5627391639,,,,,,,,O.C. NINER EMPIRE FAITHFUL'S,Angel,Grijalva,[email protected],Buena park,CA,United States,Ciro's pizza,6969 la Palma Ave,10.0,,,,,,
179
+ ,8176757644,,,,,,,,Niner Empire DFW,Danny,Ramirez,[email protected],Bedford,TX,United States,Papa G's,2900 HIGHWAY 121,50.0,,,,,,
180
+ ,2092624468,,,,,,,,Hilmar Empire,Brian,Lopes,[email protected],Hilmar,Ca,United States,Faithful House,7836 Klint dr,10.0,,,,,,
181
+ ,3045082378,,,,,,,,49ers of West Virginia,Herbert,Moore IV,[email protected],Bridgeport,WV,United States,Buffalo WIld Wings,45 Betten Ct,2.0,,,,,,
182
+ ,6185593569,,,,,,,,618 Niner Empire,Jared,Holmes,[email protected],Carbondale,IL,United States,"Home Basement aka """"The Local Tavern""""",401 N Allyn st,3.0,,,,,,
183
+ ,808-989-0030,,,,,,,,NINER EMPIRE HAWAII 808,KEVIN,MEWS,[email protected],HONOLULU,HI,United States,DAVE AND BUSTERS,1030 AUAHI ST,40.0,,,,,,
184
+ ,(808) 989-0030,,,,,,,,NINER EMPIRE HAWAII 808,KEVIN,MEWS,[email protected],Honolulu,HI,United States,Buffalo Wild Wings -Pearl City,1644 Young St # E,25.0,,,,,,
185
+ ,8323734372,,,,,,,,H-Town Empire,Cedric,Robinson,[email protected],Houston,Tx,United States,Skybox Bar and Grill,11312 Westheimer,30.0,,,,,,
186
+ ,6015691741,,,,,,,,Hub City Faithful,Alan,Thomas,[email protected],Hattiesburg,Mississippi,United States,Mugshots,204 N 40th Ave,12.0,,,,,,
187
+ ,4043191365,,,,,,,,Spartan Niner Empire Georgia,Idris,Finch,[email protected],Duluth,GA,United States,Bermuda Bar,3473 Old Norcross Rd,100.0,,,,,,
188
+ ,6462357661,,,,,,,,Westchester County New York 49ers Fans,Victor,Delgado aka 49ers Matador,[email protected],Yonkers,New York,United States,"We meet at 3 locations, Burkes Bar in Yonkers, Matador's Fan Cave and Finnerty's",14 Troy Lane,46.0,https://www.facebook.com/groups/250571711629937/,,,,,
189
+ ,8319702480,,,,,,,,Niner Empire 831,Luis,Pavon,[email protected],Salinas,Ca,United States,Straw Hat Pizza,156 E. Laurel Drive,30.0,,,,,,
190
+ ,5033080127,,,,,,,,Niner Empire Portland,Joshua,F Billups,[email protected],Clackamas,Oregon,United States,Various,14682 SE Sunnyside Rd,25.0,,,,,,
191
+ ,2815464828,,,,,,,,49ers Empire Galveston County Chapter,Terrance,Bell,[email protected],Nassau Bay,TX,United States,Office,1322 Space Park Dr.,9.0,,,,,,
192
+ ,4153707725,,,,,,,,NINER EMPIRE,Joe,Leonor,[email protected],Brisbane,Ca,United States,7 Mile House,2800 Bayshore Blvd,8000.0,,,,,,
193
+ ,6173350380,,,,,,,,Boston San Francisco Bay Area Crew,Isabel,Bourelle,[email protected],Boston,MA,United States,The Point Boston,147 Hanover Street,50.0,https://www.facebook.com/groups/392222837571990/,,,,,
194
+ ,6173350380,,,,,,,,49ers Faithful of Boston,Isabel,Bourelle,[email protected],Boston,MA,United States,"The Point, Boston, MA",147 Hanover Street,100.0,https://www.facebook.com/49ersfanBoston,,,,,
195
+ ,9098153880,,,,,,,,Riverside 49ers Booster Club,Gus,Esmerio,[email protected],Riverside,California,United States,Lake Alice Trading Co Saloon &Eatery,3616 University Ave,20.0,,,,,,
196
+ ,3187893452,,,,,,,,318 Niner Empire,Dwane,Johnson (Jayrock),[email protected],Monroe,La.,United States,318 Niner Empire HQ,400 Stone Ave.,35.0,,,,,,
197
+ ,5127872407,,,,,,,,The Austin Faithful,Jeffrey,Cerda,[email protected],Austin,TX,United States,8 Track,2805 Manor Rd,100.0,,,,,,
198
+ ,5599677071,,,,,,,,Niner Empire San Antonio,Jesus,Archuleta,[email protected],San Antonio,TX,United States,Sir Winston's Pub,2522 Nacogdoches Rd.,150.0,,,,,,
199
+ ,5097684738,,,,,,,,NINER EMPIRE OF THE 509,JESUS,MACIAS,[email protected],Spokane,WA,United States,Mac daddy's,"808 W Main Ave #106, Spokane, WA 99201",25.0,,,,,,
200
+ ,19496329301,,,,,,,,SOCAL OC 49ERS,James,Di Cesare Jr,[email protected],Newport Beach,CA,United States,The Blue Beet,107 21st Place,25.0,,,,,,
201
+ ,7027692152,,,,,,,,Sin City Niner Empire,Jay,Patrick Bryant-Chavez,[email protected],Henderson,NV,United States,Hi Scores Bar-Arcade,65 S Stephanie St.,10.0,,,,,,
202
+ ,2093862570,,,,,,,,Central Valley 9er Faithful,Jenn,Palacio,[email protected],Turlock,CA,United States,Mountain Mike's,409 S Orange St.,12.0,,,,,,
203
+ ,4089104105,,,,,,,,Niner Squad,Joseph,Perez,[email protected],San Jose,CA,United States,"4171 Gion Ave San Jose,Ca",4171 Gion Ave,25.0,,,,,,
204
+ ,2094897540,,,,,,,,merced niner empire,john,candelaria sr,[email protected],merced,ca,United States,round table pizza,1728 w olive ave,12.0,,,,,,
205
+ ,7604120919,,,,,,,,NINERS ROLLIN HARD IMPERIAL VALLEY CHAPTER,Juan,Vallejo,[email protected],Brawley,CA,United States,SPOT 805,550 main Street,45.0,,,,,,
206
+ ,3856257232,,,,,,,,Tooele County 49ers,Jon,Proctor,[email protected],TOOELE,UT,United States,"Pins and Ales - 1111 N 200 W, Tooele, UT 84074",1111 N 200 W,30.0,https://www.facebook.com/groups/173040274865599,,,,,
207
+ ,3165194699,,,,,,,,49ers united of wichita ks,Josh,Henke,[email protected],Wichita,KS,United States,Hurricane sports grill,8641 w 13th st suite 111,206.0,Facebook 49ers united of wichita ks,,,,,
208
+ ,8282919599,,,,,,,,828 NCNINERS,Jovan,Hoover,[email protected],Hickory,NC,United States,Coaches Neighborhood Bar and Grill,2049 Catawba Valley Blvd SE,10.0,,,,,,
209
+ ,3207749300,,,,,,,,Chicago 49ers Club,Jonathan,West,[email protected],Chicago,IL,United States,The Globe Pub,1934 West Irving Park Road,12.0,,,,,,
210
+ ,5033174024,,,,,,,,Niner Empire Vancouver,Justin,Downs,[email protected],Vancouver,WA,United States,Heathen feral public house,1109 Washington St,567.0,,,,,,
211
+ ,7572565334,,,,,,,,Hampton Roads Niners Fanatics,Steve,Mead,[email protected],Hampton,VA,United States,Nascar Grille,1996 Power Plant Parkway,65.0,,,,,,
212
+ ,(859) 991-8185,,,,,,,,Cincy Faithful,Joshua,Karcher,[email protected],Newport,KY,United States,Buffalo Wild Wings,83 Carothers Rd,4.0,,,,,,
213
+ ,4058028979,,,,,,,,Southside OKC Faithful Niners,Gary,Calton,[email protected],Oklahoma City,Oklahoma,United States,CrosseEyed Moose,10601 Sout Western Ave,6.0,,,,,,
214
+ ,7078899236,,,,,,,,707 FAITHFULS,Enrique,Licea,[email protected],Wine country,CA,United States,Wine country,"Breweries, restaurant's, wineries, private locations",1000.0,,707 faithfuls ( INSTAGRAM),,,,
215
+ ,6623134320,,,,,,,,NINER EMPIRE MEMPHIS CHAPTER,Kenita,Miller,[email protected],Memphis,Tennessee,United States,360 Sports Bar & Grill,3896 Lamar Avenue,40.0,,,,,,
216
+ ,(843) 437-3101,,,,,,,,Chucktown Empire 49ers of Charleston,Kentaroe,Jenkins,[email protected],North Charleston,SC,United States,Chill n' Grill Sports bar,"2810 Ashley Phosphate Rd A1, North Charleston, SC 29418",20.0,https://m.facebook.com/groups/1546441202286398?ref=bookmarks,,,,,
217
+ ,7278359840,,,,,,,,Spartans Niner Empire Florida,Ram,Keomek,[email protected],Tampa,FL,United States,Ducky's Sports Bar,1719 Kennedy Blvd,12.0,Spartans Empire Florida (Facebook),,,,,
218
+ ,4159871795,,,,,,,,Palm Springs Area 49er Club,Kevin,Casey,[email protected],Palm Springs,CA,United States,The Draughtsmen,1501 N Palm Canyon,15.0,,,,,,
219
+ ,907351-8367,,,,,,,,49th State Faithful,James,Knudson,[email protected],Anchorage,AK,United States,Al's Alaskan Inn,7830 Old Seward Hwy,202.0,Facebook 49th State Faithful,,,,,
220
+ ,6232241316,,,,,,,,49er faithful of Arizona ( of the West Valley ),Koni,Raes,[email protected],Surprise,Az,United States,"Booty's Wings, Burgers and Beer Bar and Grill",15557 W. Bell Rd. Suite 405,10.0,,,,,,
221
+ ,19096849033,,,,,,,,NINER CORE,Mike,Fortunato,[email protected],Bloomington,CA,United States,Traveling chapter,18972 Grove pl,30.0,,,,,,
222
+ ,9168380550,,,,,,,,Forever Faithful RGV (Rio Grande Valley),Karen,Schmidt,[email protected],McAllen,TX,United States,My Place,410 N 17th St,1.0,,,,,,
223
+ ,9166065299,,,,,,,,49ers Sacramento Faithfuls,Leo,Placencia lll,[email protected],West Sacramento,CA,United States,Kick N Mule Restaurant and Sports Bar,2901 W Capitol Ave,250.0,,Instagram page 49erssacramentofaithfuls,,,,
224
+ ,9098964162,,,,,,,,SO. CAL GOLDBLOOED NINERS,Louie,Gutierrez,[email protected],Industry,CA,United States,Hacienda nights pizza co.,15239 Gale ave,20.0,,,,,,
225
+ ,5105867089,,,,,,,,Niner Empire Hayward chapter,Raul,Sosa,[email protected],Hayward,Ca,United States,Strawhat pizza,1163 industrial pkwy W,30.0,,,,,,
226
+ ,6412033285,,,,,,,,49ers Empire Iowa Chapter,Lisa,Wertz,[email protected],Chariton,Iowa,United States,Shoemakers Steak House,2130 Court Ave,194.0,https://www.facebook.com/groups/247559578738411/,,,,,
227
+ ,5598923919,,,,,,,,Niner Empire of Fresno,Luis,Lozano,[email protected],Fresno,CA,United States,Round Table Pizza,5702 N. First st,215.0,Http://facebook.com/theninerempireoffresno,,,,,
228
+ ,8602057937,,,,,,,,Connecticut Spartan Niner Empire,Maria,Ortiz,[email protected],East Hartford,Connecticut,United States,Silver Lanes Lounge,748 Silverlane,13.0,,,,,,
229
+ ,2814602274,,,,,,,,"Niner Empire Houston, TX Chapter",Lorenzo,Puentes,[email protected],Houston,Texas,United States,Little J's Bar,5306 Washington Ave,175.0,https://www.facebook.com/NinerEmpireHTX,,,,,
230
+ ,2814085420,,,,,,,,"Niner Empire Houston, TX",lorenzo,puentes,[email protected],Houston,Texas,United States,coaches I-10,17754 Katy Fwy #1,150.0,https://m.facebook.com/NinersFaithfulHTX,,,,,
231
+ ,6265396855,,,,,,,,SO. CAL GOLD BLOODED NINER'S,Louie,Gutierrez,[email protected],Industry,CA,United States,Hacienda heights Pizza Co,15239 Gale Ave,25.0,Facebook group page/instagram,,,,,
232
+ ,5593597047,,,,,,,,the 559 ers,jose,Ascencio,[email protected],porterville,CA,United States,landing 13,landing 13,10.0,,,,,,
233
+ ,3105705415,,,,,,,,Billings Niners Faithful,Lukas,Seely,[email protected],Billings,MT,United States,Craft B&B,2658 Grand ave,42.0,https://www.facebook.com/groups/402680873209435,,,,,
234
+ ,9016909484,,,,,,,,901 9ers,Darrick,Pate,[email protected],Memphis,Tn,United States,Prohibition,4855 American Way,50.0,,,,,,
235
+ ,5127738511,,,,,,,,Tulsa 49ers Faithful,Marcus,Bell,[email protected],Tulsa,OK,United States,Buffalo Wild Wings,6222 E 41st St,140.0,https://www.facebook.com/groups/313885131283800/,,,,,
236
+ ,4086853231,,,,,,,,The Niner Empire - 405 Faithfuls - Oklahoma City,Maria,Ward,[email protected],Oklahoma City,OK,United States,The Side Chick 115 E. California Ave,5911 Yale Drive,50.0,https://www.facebook.com/share/FZGC9mVjz3BrHGxf/?mibextid=K35XfP,,,,,
237
+ ,7605404093,,,,,,,,Niner Empire Imperial Valley,Mario,A Garcia Jr,[email protected],Brawley,Ca,United States,Waves Restaurant & Saloon,621 S Brawley Ave,7.0,,,,,,
238
+ ,6234519863,,,,,,,,East Valley Faithful,Mark,Arellano,[email protected],Gilbert,AZ,United States,TBD,5106 South Almond CT,20.0,,,,,,
239
+ ,(360) 970-4784,,,,,,,,360 Niner Empire,Marcus,Dela Cruz,[email protected],Lacey,WA,United States,Dela Cruz Residence,1118 Villanova St NE,20.0,,,,,,
240
+ ,8042106332,,,,,,,,49ers Booster Club of Virginia,Chris,Marshall,[email protected],Mechanicsville,Virginia,United States,Sports Page Bar & Grill,8319 Bell Creek Rd,10.0,,,,,,
241
+ ,3605931626,,,,,,,,Niner Empire Tampa,Matthew,Pascual,[email protected],Tampa,FL,United States,The Bad Monkey,1717 East 7th Avenue,18.0,https://www.facebook.com/NinerEmpireTampa,,,,,
242
+ ,4062441820,,,,,,,,49ers Faithful Montana State,Melissa,Kirkham,[email protected],Missoula,MT,United States,Not yet determined,415 Coloma Way,40.0,https://www.facebook.com/groups/2370742863189848/,,,,,
243
+ ,3615632198,,,,,,,,49ers Fan club,Jess,Mendez,[email protected],Corpus Christi,Texas,United States,Click Paradise Billiards,5141 Oakhurst Dr.,25.0,,,,,,
244
+ ,6613438275,,,,,,,,Niner Empire Delano,mike,uranday,[email protected],Delano,ca,United States,Aviator casino,1225 Airport dr,20.0,,,,,,
245
+ ,6159537124,,,,,,,,Mid South Niner Empire,Tyrone,J Taylor,[email protected],Nashville,TN,United States,Winners Bar and Grill,1913 Division St,12.0,,,,,,
246
+ ,6465429352,,,,,,,,49ers Empire New York City,Miguel,Ramirez,[email protected],New York,New York,United States,Off The Wagon,109 MacDougal Street,15.0,,,,,,
247
+ ,7605879798,,,,,,,,49er Empire High Desert,Mike,Kidwell (president),[email protected],hesperia,California,United States,Thorny's,1330 Ranchero rd.,100.0,,,,,,
248
+ ,3038425017,,,,,,,,Mile High 49ers,Howard,Gibian,[email protected],Denver,Colorado,United States,IceHouse Tavern,1801 Wynkoop St,15.0,,,,,,
249
+ ,(323) 440-3129,,,,,,,,NOCO 49ers,Ryan,Fregosi,[email protected],Windsor,CO,United States,The Summit Windsor,4455 N Fairgrounds Ave,677.0,,,,,,
250
+ ,4142429903,,,,,,,,Milwaukee Spartans of the Niner Empire,Brandon,Rayls,[email protected],Wauwatosa,WI,United States,jacksons blue ribbon pub,11302 w bluemound rd,5.0,,,,,,
251
+ ,3257165662,,,,,,,,SAN ANGELO NINER EMPIRE,pablo,barrientod,[email protected],san angelo,tx,United States,buffalo wild wings,4251 sherwoodway,15.0,,,,,,
252
+ ,5802848928,,,,,,,,580 FAITHFUL,Lowell,Mitchusson,[email protected],Devol,OK,United States,APACHE LONE STAR CASUNO,"Devol, Oklahoma",10.0,,,,,,
253
+ ,9373974225,,,,,,,,49ers of Ohio,Monica,Leslie,[email protected],Xenia,Ohio,United States,Cafe Ole',131 North Allison Ave,15.0,,,,,,
254
+ ,3073653179,,,,,,,,307 FAITHFUL,Michael,Mason,[email protected],Cheyenne,WY,United States,"4013 Golden Ct, Cheyenne, Wyoming",4013 Golden Ct,2.0,,,,,,
255
+ ,7609277246,,,,,,,,Mojave Desert 49er Faithfuls,Nicole,Ortega,[email protected],Apple Valley,CA,United States,Gator's Sports Bar and Grill - Apple Valley,21041 Bear Valley Rd,40.0,,,,,,
256
+ ,9153463686,,,,,,,,The Dusty Faithful,Alejandro,Montero,[email protected],Socorro,TX,United States,The Dusty Tap Bar,10297 Socorro Rd,45.0,,,,,,
257
+ ,5055451180,,,,,,,,The Duke City Faithful,David,Young,[email protected],Albuquerque,N.M.,United States,Buffalo wild wings,6001 iliff rd.,20.0,,,,,,
258
+ ,5203719925,,,,,,,,Emilio,Bustos,,[email protected],Casa grande,Arizona(AZ),United States,Liquor factory bar and deli,930 E Florence,30.0,,,,,,
259
+ ,5054894879,,,,,,,,New Mexico Niner Empire,Charles,Montano,[email protected],Albuquerque,New Mexico,United States,Ojos Locos Sports Cantina,"Park Square,2105 Louisiana Blvd N.E",250.0,,,,,,
260
+ ,5626593944,,,,,,,,So Cal Niner Empire,Ras,Curtis Shepperd,[email protected],Long Beach,Ca,United States,Gallaghers Irish Pub and Grill,2751 E. Broadway,30.0,,,,,,
261
+ ,9802000224,,,,,,,,49er Faithful of Charlotte,Ryan,Lutz,[email protected],Charlotte,North Carolina,United States,Strike City Charlotte,210 E. Trade St.,353.0,,,,,,
262
+ ,6126365232,,,,,,,,MSP Niner Faithful,Xp,Lee,[email protected],Saint Paul,MN,United States,Firebox BBQ,1585 Marshall Ave,5.0,Www.fb.me/mspniners,,,,,
263
+ ,6019187982,,,,,,,,Mississippi Niner Empire Chapter-Jackson,Nicholas,Jones,[email protected],Jackson,Ms.,United States,M-Bar Sports Grill,6340 Ridgewood Ct.,69.0,,,,,,
264
+ ,9256982330,,,,,,,,BayArea Faithfuls,Jon,Punla,[email protected],Pleasant Hill,California,United States,Damo Sushi,508 Contra Costa Blvd,100.0,,,,,,
265
+ ,4803525459,,,,,,,,AZ49erFaithful,Ignacio,Cordova,[email protected],mesa,az,United States,Boulders on Southern,1010 w Southern ave suite 1,120.0,,,,,,
266
+ ,2103164674,,,,,,,,Pluckers Alamo Ranch,Naomi,Robles,[email protected],San Antonio,TX,United States,Pluckers Wong Bar,202 Meadow Bend Dr,45.0,,,,,,
267
+ ,870-519-9373,,,,,,,,Natural State Niners,Denishio,Blanchett,[email protected],Jonesboro,AR,United States,Buffalo Wild Wings,1503 Red Wolf Blvd,105.0,www.facebook.com/NSNiners,,,,,
268
+ ,5614050582,,,,,,,,North Carolina Gold Blooded Empire,[email protected],,[email protected],Raleigh,North Carolina,United States,Tobacco Road - Raleigh,222 Glenwood Avenue,40.0,,,,,,
269
+ ,3365588525,,,,,,,,Spartan Empire of North Carolina,Karlton,Green,[email protected],Greensboro,NC,United States,World of Beer,1310 westover terr,8.0,,,,,,
270
+ ,(559) 380-5061,,,,,,,,Niner Empire Kings County,Javier,Cuevas,[email protected],Hanford,CA,United States,Fatte Albert's pizza co,110 E 7th St,10.0,,,,,,
271
+ ,5053216498,,,,,,,,New Mexico Gold Rush,Larry,Urbina,[email protected],Rio Rancho,NM,United States,Applebee's,4100 Ridge Rock Rd,25.0,,,,,,
272
+ ,650-333-6117,,,,,,,,Niner 408 Squad,Tracey,Anthony,[email protected],San Jose,CA,United States,Personal home,3189 Apperson Ridge Court,25.0,,,,,,
273
+ ,9518670172,,,,,,,,NINER ALLEY,junior,ambriz,[email protected],moreno valley,ca,United States,home,13944 grant st,15.0,,,,,,
274
+ ,5599677071,,,,,,,,Niner Empire San Antonio,Jesus,Archuleta,[email protected],San Antonio,Texas,United States,Fatso's,1704 Bandera Road,25.0,https://www.facebook.com/ninerempire.antonio,,,,,
275
+ ,5209711614,,,,,,,,NinerEmpire520,Joseph,(Bubba) Avalos,[email protected],Tucson,AZ,United States,Maloney's,213 North 4th Ave,100.0,,,,,,
276
+ ,6024594333,,,,,,,,49er Empire Desert West,Daniel,Enriquez,[email protected],Glendale,Arizona,United States,McFadden's Glendale,9425 West Coyotes Blvd,60.0,,,,,,
277
+ ,9155026670,,,,,,,,Niner Empire EPT,Pete,Chavez,[email protected],el paso,tx,United States,knockout pizza,10110 mccombs,12.0,http://www.facebook.com/groups/ninerempireept,,,,,
278
+ ,7027692152,,,,,,,,"Niner Empire Henderson, NV",Jay,Bryant-Chavez,[email protected],Henderson,Nevada,United States,Hi Scores Bar-Arcade,65 S Stephanie St,11.0,http://www.facebook.com/ninerempirehenderson,,,,,
279
+ ,9712184734,,,,,,,,Niner Empire Salem,Timothy,Stevens,[email protected],Salem,OR,United States,IWingz,IWingz,200.0,,,,,,
280
+ ,5599677071,,,,,,,,Niner Empire San Antonio,Jesus,Archuleta,[email protected],San Antonio,Texas,United States,Fatsos,1704 Bandera Rd,30.0,,,,,,
281
+ ,5419440558,,,,,,,,Niner Empire Southern Oregon,Patricia,Alvarez,[email protected],Medford,OR,United States,The Zone Sports Bar & Grill,1250 Biddle Rd.,12.0,,,,,,
282
+ ,4199171537,,,,,,,,niner empire faithfuls of toledo,Darren,Sims,[email protected],Toledo,Ohio,United States,Legendz sports pub and grill,519 S. Reynolds RD,27.0,,,,,,
283
+ ,7023033434,,,,,,,,Las Vegas Niner EmpireNorth,Susan,Larsen,[email protected],Las Vegas,NV,United States,Timbers Bar & Grill,7240 West Azure Drive,50.0,,,,,,
284
+ ,7023715898,,,,,,,,NINER FRONTIER,Tyson,white,[email protected],las vegas,NV,United States,Luckys Lounge,7345 S Jones Blvd,8.0,,,,,,
285
+ ,7604120919,,,,,,,,NINERS ROLLIN HARD IMPERIAL VALLEY,Juan,Vallejo,[email protected],Brawley,CA,United States,SPOT 805 Bar and Grill,550 Main St,40.0,,,,,,
286
+ ,8282228545,,,,,,,,Niners Rollin Hard EL Valle C.V. Chapter,Joshua,Garcia,[email protected],La Quinta,CA,United States,The Beer Hunters,78483 Highway 111,40.0,,,,,,
287
+ ,4088576983,,,,,,,,Niners United,Eli,Soque,[email protected],Santa Clara,CA,United States,"Levi's Stadium Section 201, Section 110, Section 235 (8 of the 18 members are Season Ticket Holders)",4900 Marie P DeBartolo Way,18.0,,,,,,
288
+ ,3125904783,,,,,,,,San Francisco 49ers Fans of Chicago,Nathan,Israileff,[email protected],Chicago,IL,United States,"Gracie O'Malley's (Wicker Park location), 1635 N Milwaukee Ave, Chicago, IL 60647",Gracie O'Malley's,1990.0,https://www.facebook.com/Chicago49ersFans,,,,,
289
+ ,2017022055,,,,,,,,NJ Niner Empire Faithful Warriors,Joe,Aguiluz,[email protected],Jersey City,New Jersey,United States,O'Haras Downtown,172 1st Street,20.0,https://m.facebook.com/njninerempire,,,,,
290
+ ,2017057762,,,,,,,,NJ9ers,Arron,Rodriguez,[email protected],Bayonne,NJ,United States,Mr. Cee's Bar & Grill,17 E 21st Street,35.0,,,,,,
291
+ ,2088183104,,,,,,,,North Idaho 49ers Faithful,Josh,Foshee,[email protected],Coeur d'Alene,ID,United States,Iron Horse Bar and Grille,407 Sherman Ave,700.0,,,,,,
292
+ ,5093069273,,,,,,,,Northwest Niner Empire,David,Hartless,[email protected],Ellensburg,WA,United States,Armies Horseshoe Sports Bar,106 W 3rd,145.0,https://www.facebook.com/groups/northwestninerempire/,,,,,
293
+ ,7039691435,,,,,,,,NOVA Niners,Matt,Gaffey,[email protected],Herndon,VA,United States,Finnegan's Sports Bar & Grill,2310 Woodland Crossing Dr,80.0,http://www.facebook.com/nova.niners1,,,,,
294
+ ,8303870501,,,,,,,,Austin Niner Empire,Amber,Williams,[email protected],Austin,Texas,United States,Mister Tramps Pub & Sports Bar,8565 Research Blvd,13.0,http://www.Facebook.com/AustinNinerEmpire,,,,,
295
+ ,6462677844,,,,,,,,New York 49ers Club,Joey,Greener,[email protected],new york,ny,United States,Finnerty's Sports Bar,221 2nd Avenue,300.0,,,,,,
296
+ ,559-664-2446,,,,,,,,Mad-town chapter,Francisco,Velasquez,[email protected],Madera,CA,United States,Madera ranch,28423 Oregon Ave,15.0,,,,,,
297
+ ,5129491183,,,,,,,,Gold Rush Army of Austin,Emmanuel,Salgado,[email protected],Austin,TX,United States,Midway Field House,2015 E Riverside Dr,180.0,https://www.facebook.com/GoldRushArmyofAustin,,,,,
298
+ ,(951) 867-0172,,,,,,,,niner alley,pedro,ambriz,[email protected],MORENO VALLEY,CA,United States,papa joes sports bar,12220 frederick ave,25.0,,,,,,
299
+ ,(413)361-9818,,,,,,,,413 Spartans,Ricky Pnut,Ruiz,[email protected],Chicopee,MA,United States,Bullseye,Bullseye,17.0,,,,,,
300
+ ,503-550-9738,,,,,,,,Clementine's Faithful,Paula,Hylland,[email protected],Portland,OR,United States,The Mule Bar,4915 NE Fremont Street,10.0,,,,,,
301
+ ,5852592796,,,,,,,,585faithful,patterson,,[email protected],dansville,NY,United States,dansville ny,108 main st,1.0,,,,,,
302
+ ,5599203535,,,,,,,,Niner Empire Cen Cal 559,Pauline,Castro,[email protected],PORTERVILLE,CA,United States,BRICKHOUSE BAR AND GRILL,152 North Hockett Street,30.0,,,,,,
303
+ ,9254514477,,,,,,,,Booze & Niner Football,Mike,Parker,[email protected],Solana Beach,CA,United States,Saddle Bar,123 W Plaza St,10.0,,,,,,
304
+ ,6262024448,,,,,,,,Westside Niners Nation,Leo,Gonzalez,[email protected],Culver City,CA,United States,Buffalo Wings and Pizza,5571 Sepulveda Blvd.,16.0,,,,,,
305
+ ,5203719925,,,,,,,,Pinal county niner empire,Emilio,Bustos,[email protected],Casa grande,Arizona(AZ),United States,Liquor factory bar and deli,930 E Florence,30.0,,,,,,
306
+ ,4252561925,,,,,,,,"Prescott, AZ 49ers faithful",Pam,Marquardt,[email protected],Prescott,AZ,United States,Prescott Office Resturant,128 N. Cortez St.,28.0,,,,,,
307
+ ,8082585120,,,,,,,,San Francisco 49'ers Hawaii Fan Club,Randy,Miyamoto,[email protected],Honolulu,Hawaii,United States,To be determined,To be determined,50.0,,,,,,
308
+ ,(503) 544-3640,,,,,,,,Niner Empire Portland,Pedro,Urzua,[email protected],Portland,OR,United States,KingPins Portland,3550 SE 92nd ave,100.0,,,,,,
309
+ ,9253054704,,,,,,,,QueensandKings Bay Area Empire Chapter,Queen,,[email protected],Antioch,Ca,United States,Tailgaters,4605 Golf Course Rd,15.0,,,,,,
310
+ ,4086671847,,,,,,,,Club 49 Tailgate Crew,Alex,Chavez,[email protected],Pleasanton,California,United States,Sunshine Saloon Sports Bar,1807 Santa Rita Rd #K,15.0,,,,,,
311
+ ,6465429352,,,,,,,,49ers Nyc Chapter,Miguel,Ramirez,[email protected],New York,New York,United States,Off the Wagon,"109 Macdougal St,",35.0,https://www.facebook.com/niner.nychapter,,,,,
312
+ ,5093076839,,,,,,,,"49er faithfuls Yakima,Wa",Olivia,Salazar,[email protected],Yakima,Wa,United States,TheEndzone,1023 N 1st,35.0,,,,,,
313
+ ,7209080304,,,,,,,,49er's Faithful Aurora Co Chapter,Fito,Cantu',[email protected],Aurora,CO,United States,17307 E Flora Place,17307 E Flora Place,10.0,,,,,,
314
+ ,5626404112,,,,,,,,49er F8thfuls,Ray,Casper,[email protected],Gardena,Ca,United States,Paradise,889 w 190th,50.0,,,,,,
315
+ ,562-322-8833,,,,,,,,westside9ers,Ray,Casper,[email protected],Downey,CA,United States,Bar Louie,8860 Apollo Way,75.0,,,,,,
316
+ ,8609951926,,,,,,,,Spartan 9er Empire Connecticut,Raymond,Dogans,[email protected],EastHartford,CO,United States,Red Room,1543 Main St,20.0,,,,,,
317
+ ,6786322673,,,,,,,,Red & Gold Empire,Stephen,Box,[email protected],Sandy Springs,GA,United States,Hudson Grille Sandy Springs,6317 Roswell Rd NE,25.0,https://www.facebook.com/RGEmpire,,,,,
318
+ ,7755606361,,,,,,,,RENO NINEREMPIRE,Walter,Gudiel,[email protected],Reno,Nv,United States,Semenza's Pizzeria,4380 Neil rd.,35.0,,,,,,
319
+ ,6502711535,,,,,,,,650 Niner Empire peninsula chapter,Jose,Reyes Raquel Ortiz,[email protected],South San Francisco,Ca,United States,7mile house or standby,1201 bayshore blvd,27.0,,,,,,
320
+ ,6508346624,,,,,,,,Spartan Niner Empire California,Jose,Reyes,[email protected],Colma,CA,United States,Molloys Tavern,Molloys tavern,19.0,,,,,,
321
+ ,(951) 390-6832,,,,,,,,Riverside county TEF (Thee Empire Faithful),Sean,Flynn,[email protected],Winchester,CA,United States,Pizza factory,30676 Bentod Rd,20.0,,,,,,
322
+ ,9098153880,,,,,,,,Riverside 49ers Booster Club,Gus,Esmerio,[email protected],Riverside,California,United States,Lake Alice Trading Co Saloon &Eatery,3616 University Ave,20.0,,,,,,
323
+ ,5156643526,,,,,,,,49ers Strong Iowa - Des Moines Chapter,Rob,Boehringer,[email protected],Ankeny,IA,United States,Benchwarmers,705 S Ankeny Blvd,8.0,,,,,,
324
+ ,6159537124,,,,,,,,Mid South Niner Nation,Tyrone,Taylor,[email protected],Nashville,TN,United States,Kay Bob's,1602 21st Ave S,12.0,,,,,,
325
+ ,8165898717,,,,,,,,Kansas City 49ers Faithful,Ronnie,Tilman,[email protected],Leavenworth,KS,United States,"Fox and hound. 10428 metcalf Ave. Overland Park, ks",22425,245.0,,,,,,
326
+ ,9169965326,,,,,,,,49er Booster Club Carmichael Ca,Ramona,Hall,[email protected],Fair Oaks,Ca,United States,Fair Oaks,7587 Pineridge Lane,38.0,,,,,,
327
+ ,2252419900,,,,,,,,Rouge & Gold Niner Empire,Derek,Wells,[email protected],Baton Rouge,LA,United States,Sporting News Grill,4848 Constitution Avenue,32.0,,,,,,
328
+ ,5592029388,,,,,,,,Niner Empire Tulare County,Rita,Murillo,[email protected],Visalia,Ca,United States,5th Quarter,3360 S. Fairway,25.0,,,,,,
329
+ ,3234403129,,,,,,,,Mile High 49ers NOCO Booster Club,Ryan,Fregosi,[email protected],Greeley,co,United States,Old Chicago Greeley,2349 W. 29th St,176.0,http://www.facebook.com/milehigh49ersnocoboosterclub,,,,,
330
+ ,4086220996,,,,,,,,NINERFANS.COM,Ryan,Sakamoto,[email protected],Cupertino,California,United States,Islands Bar And Grill (Cupertino),20750 Stevens Creek Blvd.,22.0,,,,,,
331
+ ,6198203631,,,,,,,,San Diego Gold Rush,Robert,Zubiate,[email protected],San Diego,CA,United States,Bootleggers,804 market st.,20.0,,,,,,
332
+ ,6026264006,,,,,,,,East Valley Niner Empire,Selvin,Cardona,[email protected],Apache Junction,AZ,United States,Tumbleweed Bar & Grill,725 W Apache Trail,30.0,,,,,,
333
+ ,7076949476,,,,,,,,Santa Rosa Niner Empire,Joaquin,Kingo Saucedo,[email protected],Windsor,CA,United States,Santa Rosa,140 3rd St,15.0,,,,,,
334
+ ,3305180874,,,,,,,,Youngstown Faithful,Scott,West,[email protected],Canfield,OH,United States,The Cave,369 Timber Run Drive,10.0,,,,,,
335
+ ,6502469641,,,,,,,,Seattle Niners Faithful,Brittany,Carpenter,[email protected],Everett,WA,United States,Great American Casino,12715 4th Ave W,300.0,,,,,,
336
+ ,9194511624,,,,,,,,"San Francisco 49ers Faithful - Greater Triangle Area, NC",Lora,Edgar,[email protected],Durham,North Carolina,United States,Tobacco Road Sports Cafe,280 S. Mangum St. #100,24.0,https://www.facebook.com/groups/474297662683684/,,,,,
337
+ ,5103948854,,,,,,,,South Florida Gold Blooded Empire,Michelle,"""""Meme"""" Jackson",[email protected],Boynton Beach,Florida,United States,Miller's Ale House,2212 N. Congress Avenue,23.0,,,,,,
338
+ ,5305264764,,,,,,,,Red Rock's Local 49 Club,Shane,Keffer,[email protected],Red Bluff,CA,United States,Tips Bar,501 walnut St.,40.0,,,,,,
339
+ ,5098451845,,,,,,,,Columbia Basin Niners Faithful,Christina,Feldman,[email protected],Finley,Washington,United States,Shooters,214711 e SR 397 314711 wa397,30.0,,,,,,
340
+ ,(951) 816-8801,,,,,,,,9er Elite,Harmony,Shaw,[email protected],Lake Elsinore,CA,United States,Pins N Pockets,32250 Mission Trail,20.0,,,,,,
341
+ ,6093396596,,,,,,,,Shore Faithful,Edward,Griffin Jr,[email protected],Barnegat,NJ,United States,603 East Bay Ave Barnegat NJ 08005 - Due to covid 19 we no longer have a meeting location besides my residence. I truly hope this is acceptable - Thank you,603 East Bay Ave,6.0,,,,,,
342
+ ,5054708144,,,,,,,,Santa Fe Faithfuls,Anthony,Apodaca,[email protected],Santa Fe,New Mexico,United States,Blue Corn Brewery,4056 Cerrilos Rd.,10.0,,,,,,
343
+ ,5204147239,,,,,,,,Sonoran Desert Niner Empire,Derek,Yubeta,[email protected],Maricopa,AZ,United States,Cold beers and cheeseburgers,20350 N John Wayne Pkwy,48.0,,,,,,
344
+ ,3054953136,,,,,,,,9549ERS faithful,Nelson,Tobar,[email protected],Davie,FL,United States,Twin peaks,Twin peaks,30.0,,,,,,
345
+ ,8062929172,,,,,,,,806 Niner Empire West Texas Chapter,Joe,Frank Rodriquez,[email protected],Lubbock,Texas,United States,Buffalo Wild Wings,6320 19th st,20.0,,,,,,
346
+ ,8082283453,,,,,,,,Ohana Niner Empire,Nathan,Sterling,[email protected],Honolulu,HI,United States,TBD,1234 TBD,20.0,,,,,,
347
+ ,9167470720,,,,,,,,Westside Portland 49er Fan Club,Steven,Englund,[email protected],Portland,OR,United States,The Cheerful Tortoise,1939 SW 6th Ave,20.0,,,,,,
348
+ ,7542235678,,,,,,,,49ersGold,Tim,OCONNELL,[email protected],Oakland Park,FL,United States,stout bar and grill,Stout Bar and Grill,12.0,,,,,,
349
+ ,2096409543,,,,,,,,4T9 MOB TRACY FAMILY,Jenese,Borges Soto,[email protected],Tracy,Ca,United States,Buffalo wild wings,2796 Naglee road,20.0,,,,,,
350
+ ,5413015005,,,,,,,,Niner Empire Southern Oregon Chapter,Susana,Perez,[email protected],medford,or,United States,imperial event center,41 north Front Street,15.0,,,,,,
351
+ ,(530) 315-9467,,,,,,,,SacFaithful,Gregory,Mcconkey,[email protected],Cameron park,CA,United States,Presidents home,3266 Cimmarron rd,20.0,,,,,,
352
+ ,9374189628,,,,,,,,Niner Faithful Of Southern Ohio,Tara,Farrell,[email protected],piqua,OH,United States,My House,410 Camp St,10.0,,,,,,
353
+ ,7609783736,,,,,,,,NinerGangFaithfuls,Andrew,Siliga,[email protected],Oceanside,ca,United States,my house,4020 Thomas st,20.0,,,,,,
354
+ ,6099544424,,,,,,,,Jersey 49ers riders,terry,jackson,[email protected],Trenton,New Jersey,United States,sticky wecket,2465 S.broad st,30.0,,,,,,
355
+ ,(703) 401-0212,,,,,,,,Life Free or Die Faithfuls,Thang,Vo,[email protected],Concord,NH,United States,Buffalo Wild Wings,8 Loudon Rd,3.0,https://www.facebook.com/groups/876812822713709/,,,,,
356
+ ,3105929214,,,,,,,,The 909 Niner Faithfuls,Joe,Del Rio,[email protected],Fontana,Ca,United States,Boston's Sports Bar and Grill,16927 Sierra Lakes Pkwy.,30.0,http://www.facebook.com/The909NinerFaithfuls,,,,,
357
+ ,6264459623,,,,,,,,Arcadia Chapter,Allyson,Martin,[email protected],Arcadia,CA,United States,4167 e live oak Ave,4167 e live oak Ave,25.0,,,,,,
358
+ ,5592897293,,,,,,,,Thee Empire Faithful,Joe,Rocha,[email protected],Fresno,California,United States,Buffalo Wild Wings,3065 E Shaw Ave,50.0,,,,,,
359
+ ,5412063142,,,,,,,,The Oregon Faithful,Jeff,Sutton,[email protected],Eugene,OR,United States,The Side Bar,Side Bar,12.0,,,oregonfaithful on Twitter,,,
360
+ ,9082475788,,,,,,,,The ORIGINAL Niner Empire-New Jersey Chapter,Charlie,Murphy,[email protected],Linden,NJ,United States,Nuno's Pavilion,300 Roselle ave,35.0,,,,,,
361
+ ,5852788246,,,,,,,,What a Rush (gold),Paul,Smith,[email protected],Rochester,NY,United States,The Scotch House Pub,373 south Goodman street,15.0,,,,,,
362
+ ,9519029955,,,,,,,,Moreno Valley 49er Empire,Tibor,Belt,[email protected],Moreno Vallay,CA,United States,S Bar and Grill,23579 Sunnymead Ranch Pkwy,15.0,https://www.facebook.com/pages/Moreno-Valley-49er-Empire/220528134738022,,,,,
363
+ ,14054370161,,,,,,,,"The Niner Empire, 405 Faithfuls, Oklahoma City",Maria,Ward,[email protected],Oklahoma city,OK,United States,Hooters NW Expressway OKC,3025 NW EXPRESSWAY,25.0,https://www.facebook.com/share/g/4RVmqumg1MQNtMSi/?mibextid=K35XfP,,,,,
364
+ ,7072971945,,,,,,,,707 EMPIRE VALLEY,Tony,Ruiz,[email protected],napa,California,United States,Ruiz Home,696a stonehouse drive,10.0,,,,,,
365
+ ,208-964-2981,,,,,,,,Treasure Valley 49er Faithful,Curt,Starz,[email protected],Star,ID,United States,The Beer Guys Saloon,10937 W. State Street,100.0,https://www.facebook.com/TV49erFaithful,,,,,
366
+ ,(804) 313-1137,,,,,,,,Hampton Roads Niner Empire,Nick,Farmer,[email protected],Newport news,VA,United States,Boathouse Live,11800 Merchants Walk #100,300.0,https://m.facebook.com/groups/441340355910833?ref=bookmarks,,,,,
367
+ ,(971) 218-4734,,,,,,,,Niner Empire Salem,Timothy,Stevens,[email protected],Salem,OR,United States,AMF Firebird Lanes,4303 Center St NE,218.0,,,,,,
368
+ ,3234590567,,,,,,,,Forty Niners LA chapter,Tony,,[email protected],Bell,Ca,United States,Krazy Wings,7016 Atlantic Blvd,15.0,,,,,,
369
+ ,(318) 268-9657,,,,,,,,Red River Niner Empire,Tyra,Kinsey,[email protected],Bossier City,LA,United States,Walk On's Bossier City,3010 Airline Dr,15.0,www.facebook.com/RedRiverNinerEmpire,,,,,
370
+ ,3058965471,,,,,,,,Ultimate 49er Empire,Nadieshda,Nadie Lizabe,[email protected],Pembroke pines,Florida,United States,Pines alehouse,11795 pine island blvd,14.0,,,,,,
371
+ ,8014140109,,,,,,,,Utah Niner Empire,Travis,Vallejo,[email protected],Salt Lake City,UT,United States,Legends Sports Pub,677 South 200 West,25.0,https://www.facebook.com/UtahNinerEmpire,,,,,
372
+ ,(480) 493-9526,,,,,,,,Phoenix602Faithful,Vincent,Price,[email protected],Phoenix,AZ,United States,Galaghers,3220 E Baseline Rd,20.0,,,,,,
373
+ ,3108979404,,,,,,,,WESTSIDE 9ERS,Naimah,Williams,[email protected],Carson,CA,United States,Buffalo Wild Wings,736 E Del Amo Blvd,20.0,,,,,,
374
+ ,4696009701,,,,,,,,Addison Point 49ner's Fans,William,Kuhn,[email protected],Addison,Texas,United States,Addison Point Sports Grill,4578 Beltline Road,288.0,,,,,,
375
+ ,3605679487,,,,,,,,49er Forever Faithfuls,Wayne,Yelloweyes-Ripoyla,[email protected],Vancouver,Wa,United States,Hooligans bar and grill,"8220 NE Vancouver Plaza Dr, Vancouver, WA 98662",11.0,,,,,,
376
+ ,5309086004,,,,,,,,Woodland Faithful,Oscar,Ruiz,[email protected],Woodland,CA,United States,Mountain Mikes Pizza,171 W. Main St,30.0,,,,,,
377
+ ,3159448662,,,,,,,,Niner Empire Central New York,Michal,,[email protected],Cicero,New York,United States,Tully's Good Times,7838 Brewerton Rd,6.0,,,,,,
378
+ ,(970) 442-1932,,,,,,,,4 Corners Faithful,Anthony,Green,[email protected],Durango,CO,United States,Sporting News Grill,21636 Highway 160,10.0,https://www.facebook.com/groups/363488474141493/,,,,,
379
+ ,(480) 708-0838,,,,,,,,480 Gilbert Niner Empire,Elle,Lopez,[email protected],Gilbert,AZ,United States,Panda Libre,748 N Gilbert Rd,30.0,,,,,,
380
+ ,(331) 387-0752,,,,,,,,Niner Empire Jalisco 49ers Guadalajara,Sergio,Hernandez,[email protected],Guadalajara,TX,United States,Bar Cheleros,Bar CHELEROS,190.0,https://www.facebook.com/NinerEmpireJalisco49ersGuadalajara/?modal=admin_todo_tour,,,,,
381
+ ,3045457327,,,,,,,,49ERS Faithful of West Virginia,Zachary,Meadows,[email protected],Charleston,WV,United States,The Pitch,5711 MacCorkle Ave SE,12.0,,,,,,
382
+ ,2016971994,,,,,,,,49 Migos Chapter,Manny,Duarte,[email protected],Saddle Brook,NJ,United States,Midland Brewhouse,374 N Midland Ave,10.0,,,,,,
383
+ ,408-892-5315,,,,,,,,49ers Bay Area Faithful Social Club,Sarah,Wallace,[email protected],Sunnyvale,CA,United States,Giovanni's New York Pizzeria,1127 Lawrence Expy,65.0,,,,,,
384
+ ,5404245114,,,,,,,,Niner Empire Of Indy,Jay,Balthrop,[email protected],Indianapolis,IN,United States,The Bulldog Bar and Lounge,5380 N College Ave,30.0,,,,,,
data/april_11_multimedia_data_collect/49ers_2024_column_definitions.csv ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ column_name,definition
2
+ game_id,Unique identifier for each game (format: YYYY_WK_HOME_AWAY)
3
+ player_id,Unique identifier for each player
4
+ player_name,Player name (Last.First format)
5
+ posteam,Team the player was on for this play
6
+ position,"Player position (QB, RB, WR, TE, OL, DL, LB, DB, etc.)"
7
+ team,Team the player was on for the season
8
+ passing_yards,Total passing yards
9
+ passing_tds,Total passing touchdowns
10
+ air_yards,Total air yards (distance ball traveled in the air)
11
+ yards_after_catch,Total yards after catch (YAC)
12
+ cpoe,Completion Percentage Over Expected (average)
13
+ qb_epa,Expected Points Added by quarterback
14
+ pass_attempts,Number of pass attempts
15
+ complete_passes,Number of completed passes
16
+ avg_air_yards,Average air yards per pass attempt
17
+ avg_yac,Average yards after catch per reception
18
+ pass_location_left,Number of passes thrown to the left side of the field
19
+ pass_location_middle,Number of passes thrown to the middle of the field
20
+ pass_location_right,Number of passes thrown to the right side of the field
21
+ pass_length_short,Number of short passes (0-9 yards)
22
+ pass_length_medium,Number of medium passes (10-19 yards)
23
+ pass_length_deep,Number of deep passes (20+ yards)
24
+ rushing_yards,Total rushing yards
25
+ rushing_tds,Total rushing touchdowns
26
+ rush_attempts,Number of rush attempts
27
+ first_downs_rush,Number of first downs achieved by rushing
28
+ xyac_mean,Expected Yards After Contact (mean)
29
+ xyac_median,Expected Yards After Contact (median)
30
+ xyac_success_rate,Expected Yards After Contact success rate
31
+ rush_epa,Expected Points Added by rushing plays
32
+ run_location_left,Number of rushes to the left side of the field
33
+ run_location_middle,Number of rushes to the middle of the field
34
+ run_location_right,Number of rushes to the right side of the field
35
+ run_gap_guard,Number of rushes through the guard gap
36
+ run_gap_tackle,Number of rushes through the tackle gap
37
+ run_gap_end,Number of rushes through the end gap
38
+ receiving_yards,Total receiving yards
39
+ receiving_tds,Total receiving touchdowns
40
+ receiving_attempts,Number of pass attempts targeting this player
41
+ first_downs_receiving,Number of first downs achieved by receiving
42
+ receiving_epa,Expected Points Added by receiving plays
43
+ avg_yac_y,Average yards after catch per reception
44
+ avg_air_yards_y,Average air yards per target
45
+ solo_tackles,Number of solo tackles
46
+ assisted_tackles,Number of assisted tackles
47
+ tackles_for_loss,Number of tackles for loss
48
+ qb_hits,Number of quarterback hits
49
+ sacks,Number of sacks (including half sacks)
50
+ interceptions,Number of interceptions
51
+ forced_fumbles,Number of forced fumbles
52
+ fumble_recoveries,Number of fumble recoveries
53
+ pass_defenses,Number of pass defenses (passes defended)
54
+ total_plays,Total number of plays
55
+ third_down_attempts,Number of third down attempts
56
+ third_down_conversions,Number of third down conversions
57
+ fourth_down_attempts,Number of fourth down attempts
58
+ fourth_down_conversions,Number of fourth down conversions
59
+ red_zone_attempts,Number of plays in the red zone (inside 20-yard line)
60
+ red_zone_touchdowns,Number of touchdowns scored in the red zone
61
+ avg_field_position,Average field position (yard line)
62
+ total_epa,Total Expected Points Added
data/april_11_multimedia_data_collect/49ers_2024_enhanced_stats.csv ADDED
The diff for this file is too large to render. See raw diff
 
data/april_11_multimedia_data_collect/component actual example v2.png ADDED
data/april_11_multimedia_data_collect/custom component attempt 1.png ADDED
data/april_11_multimedia_data_collect/game recap layout example.png ADDED
data/april_11_multimedia_data_collect/game_stats.py ADDED
@@ -0,0 +1,392 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import nfl_data_py as nfl
3
+ import warnings
4
+ warnings.filterwarnings("ignore")
5
+
6
+ # =============================================
7
+ # SECTION 1: BASIC STATS (ORIGINAL CODE)
8
+ # =============================================
9
+
10
+ # 1. Setup
11
+ season = 2024
12
+ team_abbr = "SF"
13
+
14
+ # 2. Load play-by-play data for the 2024 season
15
+ print("Loading play-by-play data...")
16
+ pbp_df = nfl.import_pbp_data(years=[season], downcast=True)
17
+
18
+ # 3. Filter for games involving the San Francisco 49ers
19
+ sf_games = pbp_df[(pbp_df['home_team'] == team_abbr) | (pbp_df['away_team'] == team_abbr)]
20
+
21
+ # 4. Get unique game IDs
22
+ game_ids = sf_games['game_id'].unique()
23
+
24
+ # 5. Create separate dataframes for passing, rushing, and receiving stats
25
+ # Passing stats
26
+ passing_stats = sf_games[sf_games['passer_player_id'].notna()].groupby(['game_id', 'passer_player_id', 'passer_player_name', 'posteam']).agg(
27
+ passing_yards=('passing_yards', 'sum'),
28
+ passing_tds=('pass_touchdown', 'sum'),
29
+ interceptions=('interception', 'sum')
30
+ ).reset_index()
31
+
32
+ # Rushing stats
33
+ rushing_stats = sf_games[sf_games['rusher_player_id'].notna()].groupby(['game_id', 'rusher_player_id', 'rusher_player_name', 'posteam']).agg(
34
+ rushing_yards=('rushing_yards', 'sum'),
35
+ rushing_tds=('rush_touchdown', 'sum')
36
+ ).reset_index()
37
+
38
+ # Receiving stats - we need to identify receiving touchdowns from the touchdown column
39
+ # First, create a flag for receiving touchdowns
40
+ sf_games['receiving_td'] = (sf_games['touchdown'] == 1) & (sf_games['play_type'] == 'pass') & (sf_games['receiver_player_id'].notna())
41
+
42
+ # Then group by receiver
43
+ receiving_stats = sf_games[sf_games['receiver_player_id'].notna()].groupby(['game_id', 'receiver_player_id', 'receiver_player_name', 'posteam']).agg(
44
+ receiving_yards=('receiving_yards', 'sum'),
45
+ receiving_tds=('receiving_td', 'sum')
46
+ ).reset_index()
47
+
48
+ # 6. Rename columns for consistency
49
+ passing_stats = passing_stats.rename(columns={'passer_player_id': 'player_id', 'passer_player_name': 'player_name'})
50
+ rushing_stats = rushing_stats.rename(columns={'rusher_player_id': 'player_id', 'rusher_player_name': 'player_name'})
51
+ receiving_stats = receiving_stats.rename(columns={'receiver_player_id': 'player_id', 'receiver_player_name': 'player_name'})
52
+
53
+ # 7. Merge all stats together
54
+ player_stats = pd.merge(passing_stats, rushing_stats, on=['game_id', 'player_id', 'player_name', 'posteam'], how='outer')
55
+ player_stats = pd.merge(player_stats, receiving_stats, on=['game_id', 'player_id', 'player_name', 'posteam'], how='outer')
56
+
57
+ # 8. Fill NaN values with 0
58
+ player_stats = player_stats.fillna(0)
59
+
60
+ # 9. Filter to only San Francisco 49ers players (on offense)
61
+ player_stats = player_stats[player_stats['posteam'] == team_abbr]
62
+
63
+ # 10. Load roster info to enrich with player position
64
+ roster_df = nfl.import_seasonal_rosters(years=[season])
65
+ player_stats = player_stats.merge(
66
+ roster_df[['player_id', 'position', 'team']],
67
+ on='player_id',
68
+ how='left'
69
+ )
70
+
71
+ # 11. Export to CSV
72
+ output_path = "49ers_2024_player_box_scores.csv"
73
+ player_stats.to_csv(output_path, index=False)
74
+ print(f"Saved basic player box scores to {output_path}")
75
+
76
+ # 12. Preview results
77
+ print("\nBasic Stats Preview:")
78
+ print(player_stats.head())
79
+
80
+ # =============================================
81
+ # SECTION 2: ENHANCED STATS
82
+ # =============================================
83
+
84
+ print("\nGenerating enhanced statistics...")
85
+
86
+ # 1. Advanced Passing Stats
87
+ advanced_passing = sf_games[sf_games['passer_player_id'].notna()].groupby(['game_id', 'passer_player_id', 'passer_player_name', 'posteam']).agg(
88
+ air_yards=('air_yards', 'sum'),
89
+ yards_after_catch=('yards_after_catch', 'sum'),
90
+ cpoe=('cpoe', 'mean'), # Completion Percentage Over Expected
91
+ qb_epa=('qb_epa', 'sum'), # QB-specific EPA
92
+ pass_attempts=('pass_attempt', 'sum'),
93
+ complete_passes=('complete_pass', 'sum'),
94
+ avg_air_yards=('air_yards', 'mean'),
95
+ avg_yac=('yards_after_catch', 'mean'),
96
+ pass_location_left=('pass_location', lambda x: (x == 'left').sum()),
97
+ pass_location_middle=('pass_location', lambda x: (x == 'middle').sum()),
98
+ pass_location_right=('pass_location', lambda x: (x == 'right').sum()),
99
+ pass_length_short=('pass_length', lambda x: (x == 'short').sum()),
100
+ pass_length_medium=('pass_length', lambda x: (x == 'medium').sum()),
101
+ pass_length_deep=('pass_length', lambda x: (x == 'deep').sum())
102
+ ).reset_index()
103
+
104
+ # 2. Advanced Rushing/Receiving Stats
105
+ advanced_rushing = sf_games[sf_games['rusher_player_id'].notna()].groupby(['game_id', 'rusher_player_id', 'rusher_player_name', 'posteam']).agg(
106
+ rush_attempts=('rush_attempt', 'sum'),
107
+ first_downs_rush=('first_down_rush', 'sum'),
108
+ xyac_mean=('xyac_mean_yardage', 'mean'),
109
+ xyac_median=('xyac_median_yardage', 'mean'),
110
+ xyac_success_rate=('xyac_success', 'mean'),
111
+ rush_epa=('epa', 'sum'),
112
+ run_location_left=('run_location', lambda x: (x == 'left').sum()),
113
+ run_location_middle=('run_location', lambda x: (x == 'middle').sum()),
114
+ run_location_right=('run_location', lambda x: (x == 'right').sum()),
115
+ run_gap_guard=('run_gap', lambda x: (x == 'guard').sum()),
116
+ run_gap_tackle=('run_gap', lambda x: (x == 'tackle').sum()),
117
+ run_gap_end=('run_gap', lambda x: (x == 'end').sum())
118
+ ).reset_index()
119
+
120
+ advanced_receiving = sf_games[sf_games['receiver_player_id'].notna()].groupby(['game_id', 'receiver_player_id', 'receiver_player_name', 'posteam']).agg(
121
+ receiving_attempts=('pass_attempt', 'sum'),
122
+ first_downs_receiving=('first_down_pass', 'sum'),
123
+ receiving_epa=('epa', 'sum'),
124
+ avg_yac=('yards_after_catch', 'mean'),
125
+ avg_air_yards=('air_yards', 'mean')
126
+ ).reset_index()
127
+
128
+ # 3. Defensive Player Stats
129
+ # Create a list of all defensive player IDs from various defensive play columns
130
+ defensive_player_ids = []
131
+ defensive_player_names = []
132
+
133
+ # Solo tackles
134
+ solo_tackle_players = sf_games[sf_games['solo_tackle_1_player_id'].notna()][['game_id', 'solo_tackle_1_player_id', 'solo_tackle_1_player_name', 'defteam']]
135
+ solo_tackle_players = solo_tackle_players.rename(columns={'solo_tackle_1_player_id': 'player_id', 'solo_tackle_1_player_name': 'player_name'})
136
+ defensive_player_ids.append(solo_tackle_players)
137
+
138
+ # Assisted tackles
139
+ assist_tackle_players = sf_games[sf_games['assist_tackle_1_player_id'].notna()][['game_id', 'assist_tackle_1_player_id', 'assist_tackle_1_player_name', 'defteam']]
140
+ assist_tackle_players = assist_tackle_players.rename(columns={'assist_tackle_1_player_id': 'player_id', 'assist_tackle_1_player_name': 'player_name'})
141
+ defensive_player_ids.append(assist_tackle_players)
142
+
143
+ # Sacks
144
+ sack_players = sf_games[sf_games['sack_player_id'].notna()][['game_id', 'sack_player_id', 'sack_player_name', 'defteam']]
145
+ sack_players = sack_players.rename(columns={'sack_player_id': 'player_id', 'sack_player_name': 'player_name'})
146
+ defensive_player_ids.append(sack_players)
147
+
148
+ # Interceptions
149
+ int_players = sf_games[sf_games['interception_player_id'].notna()][['game_id', 'interception_player_id', 'interception_player_name', 'defteam']]
150
+ int_players = int_players.rename(columns={'interception_player_id': 'player_id', 'interception_player_name': 'player_name'})
151
+ defensive_player_ids.append(int_players)
152
+
153
+ # Forced fumbles
154
+ ff_players = sf_games[sf_games['forced_fumble_player_1_player_id'].notna()][['game_id', 'forced_fumble_player_1_player_id', 'forced_fumble_player_1_player_name', 'forced_fumble_player_1_team']]
155
+ ff_players = ff_players.rename(columns={'forced_fumble_player_1_player_id': 'player_id', 'forced_fumble_player_1_player_name': 'player_name', 'forced_fumble_player_1_team': 'defteam'})
156
+ defensive_player_ids.append(ff_players)
157
+
158
+ # Fumble recoveries
159
+ fr_players = sf_games[sf_games['fumble_recovery_1_player_id'].notna()][['game_id', 'fumble_recovery_1_player_id', 'fumble_recovery_1_player_name', 'fumble_recovery_1_team']]
160
+ fr_players = fr_players.rename(columns={'fumble_recovery_1_player_id': 'player_id', 'fumble_recovery_1_player_name': 'player_name', 'fumble_recovery_1_team': 'defteam'})
161
+ defensive_player_ids.append(fr_players)
162
+
163
+ # Pass defenses
164
+ pd_players = sf_games[sf_games['pass_defense_1_player_id'].notna()][['game_id', 'pass_defense_1_player_id', 'pass_defense_1_player_name', 'defteam']]
165
+ pd_players = pd_players.rename(columns={'pass_defense_1_player_id': 'player_id', 'pass_defense_1_player_name': 'player_name'})
166
+ defensive_player_ids.append(pd_players)
167
+
168
+ # Combine all defensive player dataframes
169
+ defensive_players = pd.concat(defensive_player_ids, ignore_index=True)
170
+ defensive_players = defensive_players.drop_duplicates()
171
+
172
+ # Now calculate defensive stats for each player
173
+ defensive_stats = sf_games.groupby(['game_id', 'defteam']).agg(
174
+ solo_tackles=('solo_tackle', 'sum'),
175
+ assisted_tackles=('assist_tackle', 'sum'),
176
+ tackles_for_loss=('tackled_for_loss', 'sum'),
177
+ qb_hits=('qb_hit', 'sum'),
178
+ sacks=('sack', 'sum'),
179
+ interceptions=('interception', 'sum'),
180
+ forced_fumbles=('fumble_forced', 'sum'),
181
+ fumble_recoveries=('fumble_recovery_1_yards', lambda x: (x > 0).sum()),
182
+ pass_defenses=('pass_defense_1_player_id', lambda x: x.notna().sum())
183
+ ).reset_index()
184
+
185
+ # Create a function to calculate individual defensive player stats
186
+ def calculate_defensive_player_stats(player_id, player_name, game_id, team):
187
+ player_games = sf_games[sf_games['game_id'] == game_id]
188
+
189
+ # Solo tackles
190
+ solo_tackles = player_games[player_games['solo_tackle_1_player_id'] == player_id].shape[0]
191
+ solo_tackles += player_games[player_games['solo_tackle_2_player_id'] == player_id].shape[0]
192
+
193
+ # Assisted tackles
194
+ assist_tackles = player_games[player_games['assist_tackle_1_player_id'] == player_id].shape[0]
195
+ assist_tackles += player_games[player_games['assist_tackle_2_player_id'] == player_id].shape[0]
196
+ assist_tackles += player_games[player_games['assist_tackle_3_player_id'] == player_id].shape[0]
197
+ assist_tackles += player_games[player_games['assist_tackle_4_player_id'] == player_id].shape[0]
198
+
199
+ # Sacks
200
+ sacks = player_games[player_games['sack_player_id'] == player_id].shape[0]
201
+ sacks += player_games[player_games['half_sack_1_player_id'] == player_id].shape[0] * 0.5
202
+ sacks += player_games[player_games['half_sack_2_player_id'] == player_id].shape[0] * 0.5
203
+
204
+ # Interceptions
205
+ interceptions = player_games[player_games['interception_player_id'] == player_id].shape[0]
206
+
207
+ # Forced fumbles
208
+ forced_fumbles = player_games[player_games['forced_fumble_player_1_player_id'] == player_id].shape[0]
209
+ forced_fumbles += player_games[player_games['forced_fumble_player_2_player_id'] == player_id].shape[0]
210
+
211
+ # Fumble recoveries
212
+ fumble_recoveries = player_games[player_games['fumble_recovery_1_player_id'] == player_id].shape[0]
213
+ fumble_recoveries += player_games[player_games['fumble_recovery_2_player_id'] == player_id].shape[0]
214
+
215
+ # Pass defenses
216
+ pass_defenses = player_games[player_games['pass_defense_1_player_id'] == player_id].shape[0]
217
+ pass_defenses += player_games[player_games['pass_defense_2_player_id'] == player_id].shape[0]
218
+
219
+ # Tackles for loss
220
+ tackles_for_loss = player_games[player_games['tackle_for_loss_1_player_id'] == player_id].shape[0]
221
+ tackles_for_loss += player_games[player_games['tackle_for_loss_2_player_id'] == player_id].shape[0]
222
+
223
+ # QB hits
224
+ qb_hits = player_games[player_games['qb_hit_1_player_id'] == player_id].shape[0]
225
+ qb_hits += player_games[player_games['qb_hit_2_player_id'] == player_id].shape[0]
226
+
227
+ return pd.Series({
228
+ 'solo_tackles': solo_tackles,
229
+ 'assisted_tackles': assist_tackles,
230
+ 'tackles_for_loss': tackles_for_loss,
231
+ 'qb_hits': qb_hits,
232
+ 'sacks': sacks,
233
+ 'interceptions': interceptions,
234
+ 'forced_fumbles': forced_fumbles,
235
+ 'fumble_recoveries': fumble_recoveries,
236
+ 'pass_defenses': pass_defenses
237
+ })
238
+
239
+ # Apply the function to each defensive player
240
+ defensive_player_stats = []
241
+ for _, row in defensive_players.iterrows():
242
+ stats = calculate_defensive_player_stats(row['player_id'], row['player_name'], row['game_id'], row['defteam'])
243
+ stats['game_id'] = row['game_id']
244
+ stats['player_id'] = row['player_id']
245
+ stats['player_name'] = row['player_name']
246
+ stats['posteam'] = row['defteam'] # Use defteam as posteam for consistency
247
+ defensive_player_stats.append(stats)
248
+
249
+ # Convert to DataFrame
250
+ defensive_player_stats_df = pd.DataFrame(defensive_player_stats)
251
+
252
+ # 4. Additional Context Stats
253
+ context_stats = sf_games.groupby(['game_id', 'posteam']).agg(
254
+ total_plays=('play_id', 'count'),
255
+ third_down_attempts=('down', lambda x: (x == 3).sum()),
256
+ third_down_conversions=('third_down_converted', 'sum'),
257
+ fourth_down_attempts=('down', lambda x: (x == 4).sum()),
258
+ fourth_down_conversions=('fourth_down_converted', 'sum'),
259
+ red_zone_attempts=('yardline_100', lambda x: (x <= 20).sum()),
260
+ red_zone_touchdowns=('touchdown', lambda x: ((x == 1) & (sf_games['yardline_100'] <= 20)).sum()),
261
+ avg_field_position=('yardline_100', 'mean'),
262
+ total_epa=('epa', 'sum')
263
+ ).reset_index()
264
+
265
+ # Rename columns for consistency
266
+ advanced_passing = advanced_passing.rename(columns={'passer_player_id': 'player_id', 'passer_player_name': 'player_name'})
267
+ advanced_rushing = advanced_rushing.rename(columns={'rusher_player_id': 'player_id', 'rusher_player_name': 'player_name'})
268
+ advanced_receiving = advanced_receiving.rename(columns={'receiver_player_id': 'player_id', 'receiver_player_name': 'player_name'})
269
+
270
+ # Merge all enhanced stats
271
+ enhanced_stats = pd.merge(advanced_passing, advanced_rushing, on=['game_id', 'player_id', 'player_name', 'posteam'], how='outer')
272
+ enhanced_stats = pd.merge(enhanced_stats, advanced_receiving, on=['game_id', 'player_id', 'player_name', 'posteam'], how='outer')
273
+
274
+ # Add defensive player stats
275
+ enhanced_stats = pd.merge(enhanced_stats, defensive_player_stats_df, on=['game_id', 'player_id', 'player_name', 'posteam'], how='outer')
276
+
277
+ # Add roster information
278
+ enhanced_stats = enhanced_stats.merge(
279
+ roster_df[['player_id', 'position', 'team']],
280
+ on='player_id',
281
+ how='left'
282
+ )
283
+
284
+ # Fill NaN values with 0
285
+ enhanced_stats = enhanced_stats.fillna(0)
286
+
287
+ # Filter to only San Francisco 49ers players
288
+ enhanced_stats = enhanced_stats[enhanced_stats['posteam'] == team_abbr]
289
+
290
+ # Export enhanced stats
291
+ enhanced_output_path = "49ers_2024_enhanced_stats.csv"
292
+ enhanced_stats.to_csv(enhanced_output_path, index=False)
293
+ print(f"Saved enhanced player statistics to {enhanced_output_path}")
294
+
295
+ # Preview enhanced stats
296
+ print("\nEnhanced Stats Preview:")
297
+ print(enhanced_stats.head())
298
+
299
+ # =============================================
300
+ # SECTION 3: COLUMN DEFINITIONS
301
+ # =============================================
302
+
303
+ print("\nGenerating column definitions...")
304
+
305
+ # Create a dictionary of column definitions
306
+ column_definitions = {
307
+ # Basic identifiers
308
+ 'game_id': 'Unique identifier for each game (format: YYYY_WK_HOME_AWAY)',
309
+ 'player_id': 'Unique identifier for each player',
310
+ 'player_name': 'Player name (Last.First format)',
311
+ 'posteam': 'Team the player was on for this play',
312
+ 'position': 'Player position (QB, RB, WR, TE, OL, DL, LB, DB, etc.)',
313
+ 'team': 'Team the player was on for the season',
314
+
315
+ # Passing stats
316
+ 'passing_yards': 'Total passing yards',
317
+ 'passing_tds': 'Total passing touchdowns',
318
+ 'air_yards': 'Total air yards (distance ball traveled in the air)',
319
+ 'yards_after_catch': 'Total yards after catch (YAC)',
320
+ 'cpoe': 'Completion Percentage Over Expected (average)',
321
+ 'qb_epa': 'Expected Points Added by quarterback',
322
+ 'pass_attempts': 'Number of pass attempts',
323
+ 'complete_passes': 'Number of completed passes',
324
+ 'avg_air_yards': 'Average air yards per pass attempt',
325
+ 'avg_yac': 'Average yards after catch per reception',
326
+ 'pass_location_left': 'Number of passes thrown to the left side of the field',
327
+ 'pass_location_middle': 'Number of passes thrown to the middle of the field',
328
+ 'pass_location_right': 'Number of passes thrown to the right side of the field',
329
+ 'pass_length_short': 'Number of short passes (0-9 yards)',
330
+ 'pass_length_medium': 'Number of medium passes (10-19 yards)',
331
+ 'pass_length_deep': 'Number of deep passes (20+ yards)',
332
+
333
+ # Rushing stats
334
+ 'rushing_yards': 'Total rushing yards',
335
+ 'rushing_tds': 'Total rushing touchdowns',
336
+ 'rush_attempts': 'Number of rush attempts',
337
+ 'first_downs_rush': 'Number of first downs achieved by rushing',
338
+ 'xyac_mean': 'Expected Yards After Contact (mean)',
339
+ 'xyac_median': 'Expected Yards After Contact (median)',
340
+ 'xyac_success_rate': 'Expected Yards After Contact success rate',
341
+ 'rush_epa': 'Expected Points Added by rushing plays',
342
+ 'run_location_left': 'Number of rushes to the left side of the field',
343
+ 'run_location_middle': 'Number of rushes to the middle of the field',
344
+ 'run_location_right': 'Number of rushes to the right side of the field',
345
+ 'run_gap_guard': 'Number of rushes through the guard gap',
346
+ 'run_gap_tackle': 'Number of rushes through the tackle gap',
347
+ 'run_gap_end': 'Number of rushes through the end gap',
348
+
349
+ # Receiving stats
350
+ 'receiving_yards': 'Total receiving yards',
351
+ 'receiving_tds': 'Total receiving touchdowns',
352
+ 'receiving_attempts': 'Number of pass attempts targeting this player',
353
+ 'first_downs_receiving': 'Number of first downs achieved by receiving',
354
+ 'receiving_epa': 'Expected Points Added by receiving plays',
355
+ 'avg_yac_y': 'Average yards after catch per reception',
356
+ 'avg_air_yards_y': 'Average air yards per target',
357
+
358
+ # Defensive stats
359
+ 'solo_tackles': 'Number of solo tackles',
360
+ 'assisted_tackles': 'Number of assisted tackles',
361
+ 'tackles_for_loss': 'Number of tackles for loss',
362
+ 'qb_hits': 'Number of quarterback hits',
363
+ 'sacks': 'Number of sacks (including half sacks)',
364
+ 'interceptions': 'Number of interceptions',
365
+ 'forced_fumbles': 'Number of forced fumbles',
366
+ 'fumble_recoveries': 'Number of fumble recoveries',
367
+ 'pass_defenses': 'Number of pass defenses (passes defended)',
368
+
369
+ # Context stats
370
+ 'total_plays': 'Total number of plays',
371
+ 'third_down_attempts': 'Number of third down attempts',
372
+ 'third_down_conversions': 'Number of third down conversions',
373
+ 'fourth_down_attempts': 'Number of fourth down attempts',
374
+ 'fourth_down_conversions': 'Number of fourth down conversions',
375
+ 'red_zone_attempts': 'Number of plays in the red zone (inside 20-yard line)',
376
+ 'red_zone_touchdowns': 'Number of touchdowns scored in the red zone',
377
+ 'avg_field_position': 'Average field position (yard line)',
378
+ 'total_epa': 'Total Expected Points Added'
379
+ }
380
+
381
+ # Create a DataFrame from the dictionary
382
+ column_definitions_df = pd.DataFrame({
383
+ 'column_name': list(column_definitions.keys()),
384
+ 'definition': list(column_definitions.values())
385
+ })
386
+
387
+ # Export column definitions
388
+ column_definitions_path = "49ers_2024_column_definitions.csv"
389
+ column_definitions_df.to_csv(column_definitions_path, index=False)
390
+ print(f"Saved column definitions to {column_definitions_path}")
391
+
392
+ print("\nScript completed successfully!")
data/april_11_multimedia_data_collect/get_player_socials.py ADDED
@@ -0,0 +1,239 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ import csv
3
+ import os
4
+ import time
5
+ import sys
6
+ from dotenv import load_dotenv
7
+ from pathlib import Path
8
+
9
+ # Load environment variables from .env file (for API key)
10
+ load_dotenv()
11
+
12
+ # Get the directory where this script is located
13
+ SCRIPT_DIR = Path(os.path.dirname(os.path.abspath(__file__)))
14
+
15
+ SERP_API_KEY = os.getenv("SERP_API_KEY") # Or just hardcode for testing, not recommended
16
+
17
+ def get_instagram_handle(query, timeout=10, retries=3, delay_between_retries=2):
18
+ """
19
+ Uses SerpAPI to search for query: e.g. 'Brock Purdy Instagram'
20
+ Returns the best guess at Instagram handle/page URL if found, else empty string.
21
+
22
+ Args:
23
+ query: Search query string
24
+ timeout: Request timeout in seconds
25
+ retries: Number of retries if request fails
26
+ delay_between_retries: Seconds to wait between retries
27
+ """
28
+ if not SERP_API_KEY:
29
+ raise ValueError("SERP_API_KEY environment variable not set or provided!")
30
+
31
+ url = "https://serpapi.com/search"
32
+ params = {
33
+ "engine": "google",
34
+ "q": query,
35
+ "api_key": SERP_API_KEY,
36
+ }
37
+
38
+ for attempt in range(retries):
39
+ try:
40
+ print(f"[DEBUG] Sending API request for: {query}")
41
+ response = requests.get(url, params=params, timeout=timeout)
42
+ response.raise_for_status()
43
+ data = response.json()
44
+
45
+ # Check if we have organic results
46
+ if "organic_results" not in data:
47
+ print(f"[WARNING] No organic_results found in API response for {query}")
48
+ print(f"[DEBUG] Response keys: {list(data.keys())}")
49
+ return ""
50
+
51
+ # Typical structure: data['organic_results'] - parse each for relevant domain
52
+ results = data.get("organic_results", [])
53
+ print(f"[DEBUG] Found {len(results)} organic results")
54
+
55
+ for r in results:
56
+ link = r.get("link", "")
57
+ # If it has 'instagram.com', let's assume it's correct
58
+ if "instagram.com" in link.lower():
59
+ print(f"[DEBUG] Found Instagram link: {link}")
60
+ return link
61
+
62
+ print(f"[WARNING] No Instagram links found for {query}")
63
+ return ""
64
+
65
+ except requests.exceptions.Timeout:
66
+ print(f"[ERROR] Request timed out for {query} (attempt {attempt+1}/{retries})")
67
+ if attempt < retries - 1:
68
+ print(f"[INFO] Retrying in {delay_between_retries} seconds...")
69
+ time.sleep(delay_between_retries)
70
+ else:
71
+ print(f"[ERROR] All retries failed for {query}")
72
+ return ""
73
+
74
+ except requests.exceptions.RequestException as e:
75
+ print(f"[ERROR] Request failed for {query}: {str(e)} (attempt {attempt+1}/{retries})")
76
+ if attempt < retries - 1:
77
+ print(f"[INFO] Retrying in {delay_between_retries} seconds...")
78
+ time.sleep(delay_between_retries)
79
+ else:
80
+ print(f"[ERROR] All retries failed for {query}")
81
+ return ""
82
+
83
+ except Exception as e:
84
+ print(f"[ERROR] Unexpected error for {query}: {str(e)}")
85
+ return ""
86
+
87
+ def enrich_niners_socials(input_csv='niners_players_headshots.csv',
88
+ output_csv='niners_players_headshots_with_socials.csv',
89
+ delay_between_requests=1,
90
+ start_player=None,
91
+ max_players=None):
92
+ """
93
+ Reads the roster CSV, queries Instagram for each player's best match,
94
+ then writes the results to a new CSV.
95
+
96
+ Args:
97
+ input_csv: Path to input CSV file
98
+ output_csv: Path to output CSV file
99
+ delay_between_requests: Seconds to wait between API requests to avoid rate limiting
100
+ start_player: Player number to start processing from (1-indexed)
101
+ max_players: Maximum number of players to process (None for all)
102
+ """
103
+ # Convert relative paths to absolute paths based on script directory
104
+ if not os.path.isabs(input_csv):
105
+ input_csv = os.path.join(SCRIPT_DIR, input_csv)
106
+ if not os.path.isabs(output_csv):
107
+ output_csv = os.path.join(SCRIPT_DIR, output_csv)
108
+
109
+ print(f"[INFO] Input CSV path: {input_csv}")
110
+ print(f"[INFO] Output CSV path: {output_csv}")
111
+ if not SERP_API_KEY:
112
+ print("[ERROR] SERP_API_KEY not set. Please set your environment variable or update the script.")
113
+ return
114
+
115
+ # Check if input file exists
116
+ if not os.path.exists(input_csv):
117
+ print(f"[ERROR] Input file not found: {input_csv}")
118
+ return
119
+
120
+ try:
121
+ # Read existing output CSV if it exists to continue from where we left off
122
+ existing_data = []
123
+ if os.path.exists(output_csv):
124
+ with open(output_csv, 'r', encoding='utf-8') as f_existing:
125
+ existing_reader = csv.DictReader(f_existing)
126
+ existing_data = list(existing_reader)
127
+ print(f"[INFO] Loaded {len(existing_data)} existing entries")
128
+
129
+ # Count total players for progress reporting
130
+ with open(input_csv, 'r', encoding='utf-8') as f:
131
+ total_players = sum(1 for _ in csv.DictReader(f))
132
+
133
+ print(f"[INFO] Total players: {total_players}")
134
+
135
+ # Determine start and end points
136
+ start_index = start_player - 1 if start_player is not None else len(existing_data)
137
+ end_index = min(total_players, start_index + (max_players or total_players))
138
+
139
+ print(f"[INFO] Will process players from {start_index + 1} to {end_index}")
140
+
141
+ # Reopen input CSV to start processing
142
+ with open(input_csv, 'r', encoding='utf-8') as f:
143
+ reader = csv.DictReader(f)
144
+ input_fieldnames = reader.fieldnames
145
+
146
+ # Skip to the start player
147
+ for _ in range(start_index):
148
+ next(reader)
149
+
150
+ # Process remaining players
151
+ for i, row in enumerate(reader, start_index + 1):
152
+ if i > end_index:
153
+ print(f"[INFO] Reached maximum number of players. Stopping.")
154
+ break
155
+
156
+ player_name = row['name']
157
+ print(f"[INFO] Processing player {i}/{end_index}: {player_name}")
158
+
159
+ # Skip if already processed
160
+ if any(existing_row['name'] == player_name for existing_row in existing_data):
161
+ print(f"[INFO] {player_name} already processed. Skipping.")
162
+ continue
163
+
164
+ # Construct a query like 'PLAYER NAME instagram'
165
+ query = f"{player_name} NFL 49ers instagram"
166
+
167
+ try:
168
+ insta_url = get_instagram_handle(query)
169
+ row['instagram_url'] = insta_url
170
+
171
+ # Print result
172
+ if insta_url:
173
+ print(f"[SUCCESS] Found Instagram for {player_name}: {insta_url}")
174
+ else:
175
+ print(f"[WARNING] No Instagram found for {player_name}")
176
+
177
+ # Append new data
178
+ existing_data.append(row)
179
+
180
+ # Save progress after each player
181
+ with open(output_csv, 'w', newline='', encoding='utf-8') as f_out:
182
+ output_fieldnames = input_fieldnames + ['instagram_url']
183
+ writer = csv.DictWriter(f_out, fieldnames=output_fieldnames)
184
+ writer.writeheader()
185
+ writer.writerows(existing_data)
186
+
187
+ # Add delay between requests to avoid rate limiting
188
+ if i < end_index:
189
+ print(f"[INFO] Waiting {delay_between_requests} seconds before next request...")
190
+ time.sleep(delay_between_requests)
191
+
192
+ except KeyboardInterrupt:
193
+ print("\n[INFO] Process interrupted by user. Saving progress...")
194
+ break
195
+
196
+ print(f"[INFO] Social data saved to {output_csv}")
197
+ print(f"[INFO] Processed {len(existing_data)}/{total_players} players")
198
+
199
+ except Exception as e:
200
+ print(f"[ERROR] An unexpected error occurred: {str(e)}")
201
+ # Try to save any data collected so far
202
+ if existing_data:
203
+ try:
204
+ with open(output_csv, 'w', newline='', encoding='utf-8') as f_out:
205
+ output_fieldnames = input_fieldnames + ['instagram_url']
206
+ writer = csv.DictWriter(f_out, fieldnames=output_fieldnames)
207
+ writer.writeheader()
208
+ writer.writerows(existing_data)
209
+ print(f"[INFO] Partial data saved to {output_csv}")
210
+ except Exception:
211
+ print("[ERROR] Failed to save partial data")
212
+
213
+ if __name__ == "__main__":
214
+ print("[INFO] Starting player social media enrichment script")
215
+
216
+ # Parse command line arguments
217
+ delay = 1 # Default delay
218
+ start_player = 51 # Default to start from 51st player
219
+ max_players = None # Process all remaining players
220
+
221
+ if len(sys.argv) > 1:
222
+ try:
223
+ delay = float(sys.argv[1])
224
+ print(f"[INFO] Using custom delay between requests: {delay} seconds")
225
+ except ValueError:
226
+ print(f"[WARNING] Invalid delay value: {sys.argv[1]}. Using default: 1 second")
227
+
228
+ if len(sys.argv) > 2:
229
+ try:
230
+ start_player = int(sys.argv[2])
231
+ print(f"[INFO] Will start processing from player {start_player}")
232
+ except ValueError:
233
+ print(f"[WARNING] Invalid start_player value: {sys.argv[2]}. Using default: 51")
234
+
235
+ enrich_niners_socials(
236
+ delay_between_requests=delay,
237
+ start_player=start_player,
238
+ max_players=max_players
239
+ )
data/april_11_multimedia_data_collect/get_youtube_playlist_videos.py ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import csv
3
+ from googleapiclient.discovery import build
4
+ from dotenv import load_dotenv
5
+ from pathlib import Path
6
+
7
+ # Load environment variables from .env file (for API key)
8
+ load_dotenv()
9
+
10
+ API_KEY = os.getenv("YOUTUBE_API_KEY") # Or replace with your key in code
11
+ # Example 49ers highlights playlist:
12
+ PLAYLIST_ID = "PLBB205pkCsyvZ6tjCh_m5s21D0eeYJ8Ly"
13
+
14
+ def get_youtube_videos(playlist_id=PLAYLIST_ID, output_csv='youtube_highlights.csv'):
15
+ """
16
+ Fetches videos from a YouTube playlist (title, video ID, published date, etc.)
17
+ Writes output to CSV.
18
+ """
19
+ if not API_KEY:
20
+ raise ValueError("YOUTUBE_API_KEY environment variable not set or provided!")
21
+
22
+ youtube = build('youtube', 'v3', developerKey=API_KEY)
23
+
24
+ video_data = []
25
+ page_token = None
26
+
27
+ while True:
28
+ playlist_req = youtube.playlistItems().list(
29
+ part="snippet",
30
+ playlistId=playlist_id,
31
+ maxResults=50,
32
+ pageToken=page_token
33
+ )
34
+ playlist_res = playlist_req.execute()
35
+
36
+ for item in playlist_res['items']:
37
+ snippet = item['snippet']
38
+ title = snippet['title']
39
+ description = snippet['description']
40
+ video_id = snippet['resourceId']['videoId']
41
+ published_at = snippet['publishedAt']
42
+
43
+ video_data.append({
44
+ "video_id": video_id,
45
+ "title": title,
46
+ "description": description,
47
+ "published_at": published_at,
48
+ "video_url": f"https://www.youtube.com/watch?v={video_id}"
49
+ })
50
+
51
+ page_token = playlist_res.get('nextPageToken')
52
+ if not page_token:
53
+ break
54
+
55
+ # Write to CSV
56
+ with open(output_csv, 'w', newline='', encoding='utf-8') as f:
57
+ fieldnames = ["video_id", "title", "description", "published_at", "video_url"]
58
+ writer = csv.DictWriter(f, fieldnames=fieldnames)
59
+ writer.writeheader()
60
+ writer.writerows(video_data)
61
+
62
+ print(f"[INFO] YouTube playlist data saved to {output_csv}")
63
+
64
+ if __name__ == "__main__":
65
+ get_youtube_videos()
data/april_11_multimedia_data_collect/match_highlights.py ADDED
@@ -0,0 +1,196 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import csv
2
+ import re
3
+ import os
4
+ from pathlib import Path
5
+ from collections import defaultdict
6
+
7
+
8
+ # Define file paths
9
+ YOUTUBE_HIGHLIGHTS_PATH = "youtube_highlights.csv"
10
+ PLAYERS_ROSTER_PATH = "niners_players_headshots_with_socials_merged.csv"
11
+ GAMES_SCHEDULE_PATH = "nfl-2024-san-francisco-49ers-with-results.csv"
12
+ OUTPUT_PLAYERS_PATH = "new_niners_players_with_highlights.csv"
13
+ OUTPUT_GAMES_PATH = "new_games_with_highlights.csv"
14
+ OUTPUT_TEAM_VIDEOS_PATH = "new_team_highlights.csv"
15
+
16
+ def load_youtube_highlights():
17
+ """Load YouTube highlights data from CSV file."""
18
+ highlights = []
19
+ with open(YOUTUBE_HIGHLIGHTS_PATH, 'r', encoding='utf-8') as file:
20
+ reader = csv.DictReader(file)
21
+ for row in reader:
22
+ highlights.append({
23
+ 'video_id': row['video_id'],
24
+ 'title': row['title'],
25
+ 'description': row['description'],
26
+ 'published_at': row['published_at'],
27
+ 'video_url': row['video_url']
28
+ })
29
+ return highlights
30
+
31
+ def load_players():
32
+ """Load player roster data from CSV file."""
33
+ players = []
34
+ with open(PLAYERS_ROSTER_PATH, 'r', encoding='utf-8') as file:
35
+ reader = csv.DictReader(file)
36
+ for row in reader:
37
+ players.append({
38
+ 'name': row['name'],
39
+ 'headshot_url': row['headshot_url'],
40
+ 'instagram_url': row['instagram_url'],
41
+ 'highlight_video_url': '' # Initialize with empty string
42
+ })
43
+ return players
44
+
45
+ def load_games():
46
+ """Load game schedule data from CSV file."""
47
+ games = []
48
+ with open(GAMES_SCHEDULE_PATH, 'r', encoding='utf-8') as file:
49
+ reader = csv.DictReader(file)
50
+ for row in reader:
51
+ opponent = row['Away Team'] if row['Home Team'] == 'San Francisco 49ers' else row['Home Team']
52
+ opponent = opponent.replace('San Francisco 49ers', '').strip()
53
+
54
+ games.append({
55
+ 'match_number': row['Match Number'],
56
+ 'round_number': row['Round Number'],
57
+ 'date': row['Date'],
58
+ 'location': row['Location'],
59
+ 'home_team': row['Home Team'],
60
+ 'away_team': row['Away Team'],
61
+ 'result': row['Result'],
62
+ 'game_result': row['game_result'],
63
+ 'opponent': opponent,
64
+ 'highlight_video_url': '' # Initialize with empty string
65
+ })
66
+ return games
67
+
68
+ def match_highlights_to_players_and_games(highlights, players, games):
69
+ """Match YouTube highlights to players and games."""
70
+ # Create a copy of highlights to track which ones are assigned
71
+ unassigned_highlights = highlights.copy()
72
+
73
+ # Track assigned videos
74
+ assigned_video_ids = set()
75
+
76
+ # Match players first
77
+ for player in players:
78
+ player_name = player['name']
79
+ first_name = player_name.split()[0]
80
+ last_name = player_name.split()[-1]
81
+
82
+ # Create patterns to match player names
83
+ full_name_pattern = re.compile(r'\b' + re.escape(player_name) + r'\b', re.IGNORECASE)
84
+ last_name_pattern = re.compile(r'\b' + re.escape(last_name) + r'\b', re.IGNORECASE)
85
+
86
+ # Try to find a match in the unassigned highlights
87
+ for highlight in unassigned_highlights:
88
+ if highlight['video_id'] in assigned_video_ids:
89
+ continue
90
+
91
+ title = highlight['title']
92
+ description = highlight['description']
93
+
94
+ # Check for full name match in title first (most specific)
95
+ if full_name_pattern.search(title):
96
+ player['highlight_video_url'] = highlight['video_url']
97
+ assigned_video_ids.add(highlight['video_id'])
98
+ break
99
+
100
+ # Then check for last name match in title
101
+ elif last_name_pattern.search(title):
102
+ player['highlight_video_url'] = highlight['video_url']
103
+ assigned_video_ids.add(highlight['video_id'])
104
+ break
105
+
106
+ # Match games next
107
+ for game in games:
108
+ opponent = game['opponent']
109
+ week_pattern = re.compile(r'\bWeek\s+' + re.escape(game['round_number']) + r'\b', re.IGNORECASE)
110
+ opponent_pattern = re.compile(r'\b' + re.escape(opponent) + r'\b', re.IGNORECASE)
111
+
112
+ # Try to find a match in the unassigned highlights
113
+ for highlight in unassigned_highlights:
114
+ if highlight['video_id'] in assigned_video_ids:
115
+ continue
116
+
117
+ title = highlight['title']
118
+ description = highlight['description']
119
+
120
+ # Check for both week and opponent match in title (most specific)
121
+ if week_pattern.search(title) and opponent_pattern.search(title):
122
+ game['highlight_video_url'] = highlight['video_url']
123
+ assigned_video_ids.add(highlight['video_id'])
124
+ break
125
+
126
+ # Then check for opponent match in title
127
+ elif opponent_pattern.search(title):
128
+ game['highlight_video_url'] = highlight['video_url']
129
+ assigned_video_ids.add(highlight['video_id'])
130
+ break
131
+
132
+ # Collect team videos (unassigned highlights)
133
+ team_videos = []
134
+ for highlight in highlights:
135
+ if highlight['video_id'] not in assigned_video_ids:
136
+ team_videos.append(highlight)
137
+
138
+ return team_videos
139
+
140
+ def save_players_with_highlights(players):
141
+ """Save players with highlight videos to CSV file."""
142
+ with open(OUTPUT_PLAYERS_PATH, 'w', newline='', encoding='utf-8') as file:
143
+ fieldnames = ['name', 'headshot_url', 'instagram_url', 'highlight_video_url']
144
+ writer = csv.DictWriter(file, fieldnames=fieldnames)
145
+ writer.writeheader()
146
+ for player in players:
147
+ writer.writerow(player)
148
+
149
+ def save_games_with_highlights(games):
150
+ """Save games with highlight videos to CSV file."""
151
+ with open(OUTPUT_GAMES_PATH, 'w', newline='', encoding='utf-8') as file:
152
+ fieldnames = ['match_number', 'round_number', 'date', 'location', 'home_team', 'away_team',
153
+ 'result', 'game_result', 'opponent', 'highlight_video_url']
154
+ writer = csv.DictWriter(file, fieldnames=fieldnames)
155
+ writer.writeheader()
156
+ for game in games:
157
+ writer.writerow(game)
158
+
159
+ def save_team_videos(team_videos):
160
+ """Save team videos to CSV file."""
161
+ with open(OUTPUT_TEAM_VIDEOS_PATH, 'w', newline='', encoding='utf-8') as file:
162
+ fieldnames = ['video_id', 'title', 'description', 'published_at', 'video_url']
163
+ writer = csv.DictWriter(file, fieldnames=fieldnames)
164
+ writer.writeheader()
165
+ for video in team_videos:
166
+ writer.writerow(video)
167
+
168
+ def main():
169
+ # Load data
170
+ highlights = load_youtube_highlights()
171
+ players = load_players()
172
+ games = load_games()
173
+
174
+ # Match highlights to players and games
175
+ team_videos = match_highlights_to_players_and_games(highlights, players, games)
176
+
177
+ # Save results
178
+ save_players_with_highlights(players)
179
+ save_games_with_highlights(games)
180
+ save_team_videos(team_videos)
181
+
182
+ # Print summary
183
+ player_matches = sum(1 for player in players if player['highlight_video_url'])
184
+ game_matches = sum(1 for game in games if game['highlight_video_url'])
185
+
186
+ print(f"Total YouTube highlights: {len(highlights)}")
187
+ print(f"Players with highlight videos: {player_matches}/{len(players)}")
188
+ print(f"Games with highlight videos: {game_matches}/{len(games)}")
189
+ print(f"Team videos (unassigned): {len(team_videos)}")
190
+ print(f"\nOutput files created:")
191
+ print(f"- {OUTPUT_PLAYERS_PATH}")
192
+ print(f"- {OUTPUT_GAMES_PATH}")
193
+ print(f"- {OUTPUT_TEAM_VIDEOS_PATH}")
194
+
195
+ if __name__ == "__main__":
196
+ main()
data/april_11_multimedia_data_collect/merge_schedule_logos.py ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import os
3
+
4
+ # Read the CSV files
5
+ schedule_df = pd.read_csv('data/april_11_multimedia_data_collect/nfl-2024-san-francisco-49ers-with-results.csv')
6
+ logos_df = pd.read_csv('data/april_11_multimedia_data_collect/nfl_team_logos_revised.csv')
7
+
8
+ # Create dictionaries to map team names to logo URLs
9
+ home_logos = {}
10
+ away_logos = {}
11
+
12
+ for _, row in logos_df.iterrows():
13
+ home_logos[row['team_name']] = row['logo_url']
14
+ away_logos[row['team_name']] = row['logo_url']
15
+
16
+ # Add logo URL columns to the schedule dataframe
17
+ schedule_df['home_team_logo_url'] = schedule_df['Home Team'].map(home_logos)
18
+ schedule_df['away_team_logo_url'] = schedule_df['Away Team'].map(away_logos)
19
+
20
+ # Save the merged dataframe to a new CSV file
21
+ output_path = 'data/april_11_multimedia_data_collect/schedule_with_result_and_logo_urls.csv'
22
+ schedule_df.to_csv(output_path, index=False)
23
+
24
+ print(f'CSV file created successfully at {output_path}!')
data/april_11_multimedia_data_collect/neo4j_article_uploader.py ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python
2
+ """
3
+ Script to upload structured and summarized team news articles from a CSV file to Neo4j.
4
+ """
5
+
6
+ import os
7
+ import sys
8
+ import csv
9
+ from datetime import datetime
10
+ from dotenv import load_dotenv
11
+
12
+ # Adjust path to import graph object from the parent directory
13
+ parent_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
14
+ if parent_dir not in sys.path:
15
+ sys.path.append(parent_dir)
16
+
17
+ try:
18
+ from gradio_graph import graph # Import the configured graph instance
19
+ except ImportError as e:
20
+ print(f"Error importing gradio_graph: {e}")
21
+ print("Please ensure gradio_graph.py exists and is configured correctly.")
22
+ sys.exit(1)
23
+
24
+ # Load environment variables (though graph should already be configured)
25
+ load_dotenv()
26
+
27
+ # Configuration
28
+ # Update path to reflect moved CSV file location
29
+ # CSV_FILEPATH = os.path.join(os.path.dirname(__file__), "team_news_articles.csv") # Old path
30
+ CSV_FILEPATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "april_11_multimedia_data_collect", "team_news_articles.csv") # New path
31
+ TEAM_NAME = "San Francisco 49ers"
32
+
33
+ def upload_articles_to_neo4j(csv_filepath):
34
+ """Reads the CSV and uploads article data to Neo4j."""
35
+ print(f"Starting Neo4j upload process for {csv_filepath}...")
36
+
37
+ if not os.path.exists(csv_filepath):
38
+ print(f"Error: CSV file not found at {csv_filepath}")
39
+ return
40
+
41
+ # 1. Ensure the :Team node exists with correct properties
42
+ print(f"Ensuring :Team node exists for '{TEAM_NAME}'...")
43
+ team_merge_query = """
44
+ MERGE (t:Team {name: $team_name})
45
+ SET t.season_record_2024 = $record,
46
+ t.city = $city,
47
+ t.conference = $conference,
48
+ t.division = $division
49
+ RETURN t.name
50
+ """
51
+ team_params = {
52
+ "team_name": TEAM_NAME,
53
+ "record": "6-11", # As specified in instructions
54
+ "city": "San Francisco",
55
+ "conference": "NFC",
56
+ "division": "West"
57
+ }
58
+ try:
59
+ result = graph.query(team_merge_query, params=team_params)
60
+ if result and result[0]['t.name'] == TEAM_NAME:
61
+ print(f":Team node '{TEAM_NAME}' ensured/updated successfully.")
62
+ else:
63
+ print(f"Warning: Problem ensuring :Team node '{TEAM_NAME}'. Result: {result}")
64
+ # Decide whether to proceed or stop
65
+ # return
66
+ except Exception as e:
67
+ print(f"Error executing team merge query: {e}")
68
+ return # Stop if we can't ensure the team node
69
+
70
+ # 2. Read CSV and upload articles
71
+ print("Reading CSV and uploading :Team_Story nodes...")
72
+ article_merge_query = """
73
+ MERGE (s:Team_Story {link_to_article: $link_to_article})
74
+ SET s.teamName = $Team_name,
75
+ s.season = toInteger($season), // Ensure season is integer
76
+ s.summary = $summary,
77
+ s.topic = $topic,
78
+ s.city = $city,
79
+ s.conference = $conference,
80
+ s.division = $division
81
+ // Add other properties from CSV if needed, like raw_title, raw_date?
82
+ WITH s
83
+ MATCH (t:Team {name: $Team_name})
84
+ MERGE (s)-[:STORY_ABOUT]->(t)
85
+ RETURN s.link_to_article AS article_link, t.name AS team_name
86
+ """
87
+
88
+ upload_count = 0
89
+ error_count = 0
90
+ try:
91
+ with open(csv_filepath, 'r', encoding='utf-8') as csvfile:
92
+ reader = csv.DictReader(csvfile)
93
+ for row in reader:
94
+ try:
95
+ # Prepare parameters for the query
96
+ # Ensure all expected keys from the query are present in the row or provide defaults
97
+ params = {
98
+ "link_to_article": row.get("link_to_article", ""),
99
+ "Team_name": row.get("Team_name", TEAM_NAME), # Use team name from row or default
100
+ "season": row.get("season", datetime.now().year), # Default season if missing
101
+ "summary": row.get("summary", ""),
102
+ "topic": row.get("topic", ""),
103
+ "city": row.get("city", "San Francisco"), # Use city from row or default
104
+ "conference": row.get("conference", "NFC"),
105
+ "division": row.get("division", "West"),
106
+ }
107
+
108
+ # Basic validation before sending to Neo4j
109
+ if not params["link_to_article"]:
110
+ print(f"Skipping row due to missing link_to_article: {row}")
111
+ error_count += 1
112
+ continue
113
+ if not params["Team_name"]:
114
+ print(f"Skipping row due to missing Team_name: {row}")
115
+ error_count += 1
116
+ continue
117
+
118
+ # Execute the query for the current article
119
+ graph.query(article_merge_query, params=params)
120
+ upload_count += 1
121
+ if upload_count % 20 == 0: # Print progress every 20 articles
122
+ print(f"Uploaded {upload_count} articles...")
123
+
124
+ except Exception as e:
125
+ print(f"Error processing/uploading row: {row}")
126
+ print(f"Error details: {e}")
127
+ error_count += 1
128
+ # Continue to next row even if one fails?
129
+ # Or break? For now, let's continue.
130
+
131
+ except FileNotFoundError:
132
+ print(f"Error: CSV file not found at {csv_filepath}")
133
+ return
134
+ except Exception as e:
135
+ print(f"An unexpected error occurred while reading CSV or uploading: {e}")
136
+ return
137
+
138
+ print(f"\nNeo4j upload process finished.")
139
+ print(f"Successfully uploaded/merged: {upload_count} articles.")
140
+ print(f"Rows skipped due to errors/missing data: {error_count}.")
141
+
142
+
143
+ if __name__ == "__main__":
144
+ print("Running Neo4j Article Uploader script...")
145
+ upload_articles_to_neo4j(CSV_FILEPATH)
146
+ print("Script execution complete.")
data/april_11_multimedia_data_collect/new_final_april 11/neo4j_game_update/SCHEMA.md ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Updated Neo4j Game Node Schema
2
+
3
+ ## Game Node
4
+
5
+ After running the `update_game_nodes.py` script, Game nodes in the Neo4j database will have the following attributes:
6
+
7
+ | Attribute | Type | Description |
8
+ |---------------------|--------|-----------------------------------------------|
9
+ | game_id | String | Primary key for the game |
10
+ | date | String | Game date |
11
+ | location | String | Game location |
12
+ | home_team | String | Home team name |
13
+ | away_team | String | Away team name |
14
+ | result | String | Game result (score) |
15
+ | summary | String | Brief game summary |
16
+ | home_team_logo_url | String | URL to the home team's logo image |
17
+ | away_team_logo_url | String | URL to the away team's logo image |
18
+ | highlight_video_url | String | URL to the game's highlight video |
19
+ | embedding | Vector | Vector embedding of the game summary (if any) |
20
+
21
+ ## Assumptions and Implementation Notes
22
+
23
+ 1. The update script uses `game_id` as the primary key to match existing Game nodes.
24
+ 2. The script only updates the following attributes:
25
+ - home_team_logo_url
26
+ - away_team_logo_url
27
+ - highlight_video_url
28
+ 3. The script does not modify existing attributes or create new Game nodes.
29
+ 4. The data source for updates is the `schedule_with_result_april_11.csv` file.
30
+
31
+ ## Usage
32
+
33
+ To update the Game nodes, run the following command from the project root:
34
+
35
+ ```bash
36
+ python ifx-sandbox/data/april_11_multimedia_data_collect/new_final_april\ 11/neo4j_update/update_game_nodes.py
37
+ ```
38
+
39
+ The script will:
40
+ 1. Prompt for confirmation before making any changes
41
+ 2. Connect to Neo4j using credentials from the .env file
42
+ 3. Update Game nodes with the new attributes
43
+ 4. Report on the success/failure of the updates
44
+ 5. Verify that the updates were applied correctly
data/april_11_multimedia_data_collect/new_final_april 11/neo4j_game_update/update_game_nodes.py ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ update_game_nodes.py - Updates existing Game nodes in Neo4j with additional attributes
4
+
5
+ This script reads game data from the schedule_with_result_april_11.csv file and updates
6
+ existing Game nodes in Neo4j with the following attributes:
7
+ - home_team_logo_url
8
+ - away_team_logo_url
9
+ - game_id
10
+ - highlight_video_url
11
+
12
+ The script uses game_id as the primary key for matching and updating nodes.
13
+ """
14
+
15
+ import os
16
+ import sys
17
+ import pandas as pd
18
+ from neo4j import GraphDatabase
19
+ from dotenv import load_dotenv
20
+
21
+ # Add parent directory to path to access neo4j_ingestion.py
22
+ parent_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "../../../../.."))
23
+ sys.path.append(parent_dir)
24
+
25
+ # Set up paths
26
+ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
27
+ PROJECT_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "../../../../.."))
28
+ DATA_DIR = os.path.join(PROJECT_DIR, "ifx-sandbox/data")
29
+ SCHEDULE_DIR = os.path.join(DATA_DIR, "april_11_multimedia_data_collect", "new_final_april 11")
30
+ SCHEDULE_FILE = os.path.join(SCHEDULE_DIR, "schedule_with_result_april_11.csv")
31
+
32
+ # Load environment variables from ifx-sandbox/.env
33
+ ENV_FILE = os.path.join(PROJECT_DIR, "ifx-sandbox/.env")
34
+ load_dotenv(ENV_FILE)
35
+ print(f"Loading environment variables from: {ENV_FILE}")
36
+
37
+ # Neo4j connection credentials
38
+ NEO4J_URI = os.getenv('AURA_CONNECTION_URI')
39
+ NEO4J_USER = os.getenv('AURA_USERNAME')
40
+ NEO4J_PASS = os.getenv('AURA_PASSWORD')
41
+
42
+ if not all([NEO4J_URI, NEO4J_USER, NEO4J_PASS]):
43
+ print(f"Error: Missing required Neo4j credentials in {ENV_FILE}")
44
+ print(f"Required variables: AURA_CONNECTION_URI, AURA_USERNAME, AURA_PASSWORD")
45
+ raise ValueError("Missing required Neo4j credentials in .env file")
46
+
47
+ def clean_row_dict(row):
48
+ """Convert pandas row to dict and replace NaN with None"""
49
+ return {k: None if pd.isna(v) else v for k, v in row.items()}
50
+
51
+ def update_game_nodes():
52
+ """
53
+ Updates existing Game nodes with additional attributes from the schedule CSV.
54
+ Uses game_id as the primary key for matching.
55
+ """
56
+ print(f"Loading schedule data from: {SCHEDULE_FILE}")
57
+
58
+ # Check if the file exists
59
+ if not os.path.exists(SCHEDULE_FILE):
60
+ print(f"Error: Schedule file not found at {SCHEDULE_FILE}")
61
+ return False
62
+
63
+ # Load the schedule data
64
+ try:
65
+ schedule_df = pd.read_csv(SCHEDULE_FILE)
66
+ print(f"Loaded {len(schedule_df)} games from CSV")
67
+ except Exception as e:
68
+ print(f"Error loading schedule CSV: {str(e)}")
69
+ return False
70
+
71
+ # Verify required columns exist
72
+ required_columns = ['game_id', 'home_team_logo_url', 'away_team_logo_url', 'highlight_video_url']
73
+ missing_columns = [col for col in required_columns if col not in schedule_df.columns]
74
+
75
+ if missing_columns:
76
+ print(f"Error: Missing required columns in CSV: {', '.join(missing_columns)}")
77
+ return False
78
+
79
+ # Connect to Neo4j
80
+ print(f"Connecting to Neo4j at {NEO4J_URI}")
81
+ driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASS))
82
+
83
+ # Check connection
84
+ try:
85
+ with driver.session() as session:
86
+ result = session.run("MATCH (g:Game) RETURN count(g) as count")
87
+ game_count = result.single()["count"]
88
+ print(f"Found {game_count} Game nodes in Neo4j")
89
+ except Exception as e:
90
+ print(f"Error connecting to Neo4j: {str(e)}")
91
+ driver.close()
92
+ return False
93
+
94
+ # Update game nodes
95
+ success_count = 0
96
+ error_count = 0
97
+
98
+ with driver.session() as session:
99
+ for _, row in schedule_df.iterrows():
100
+ params = clean_row_dict(row)
101
+
102
+ # Skip if game_id is missing
103
+ if not params.get('game_id'):
104
+ error_count += 1
105
+ print(f"Skipping row {_ + 1}: Missing game_id")
106
+ continue
107
+
108
+ # Update query
109
+ query = """
110
+ MATCH (g:Game {game_id: $game_id})
111
+ SET g.home_team_logo_url = $home_team_logo_url,
112
+ g.away_team_logo_url = $away_team_logo_url,
113
+ g.highlight_video_url = $highlight_video_url
114
+ RETURN g.game_id as game_id
115
+ """
116
+
117
+ try:
118
+ result = session.run(query, params)
119
+ updated_game = result.single()
120
+
121
+ if updated_game:
122
+ success_count += 1
123
+ if success_count % 5 == 0 or success_count == 1:
124
+ print(f"Updated {success_count} games...")
125
+ else:
126
+ error_count += 1
127
+ print(f"Warning: Game with ID {params['game_id']} not found in Neo4j")
128
+ except Exception as e:
129
+ error_count += 1
130
+ print(f"Error updating game {params.get('game_id')}: {str(e)}")
131
+
132
+ # Close the driver
133
+ driver.close()
134
+
135
+ # Print summary
136
+ print("\nUpdate Summary:")
137
+ print(f"Total games in CSV: {len(schedule_df)}")
138
+ print(f"Successfully updated: {success_count}")
139
+ print(f"Errors/not found: {error_count}")
140
+
141
+ # Verify updates
142
+ if success_count > 0:
143
+ print("\nVerifying updates...")
144
+ verify_updates()
145
+
146
+ return success_count > 0
147
+
148
+ def verify_updates():
149
+ """Verify that game nodes were updated with the new attributes"""
150
+ driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASS))
151
+
152
+ with driver.session() as session:
153
+ # Check for games with logo URLs
154
+ logo_query = """
155
+ MATCH (g:Game)
156
+ WHERE g.home_team_logo_url IS NOT NULL AND g.away_team_logo_url IS NOT NULL
157
+ RETURN count(g) as count
158
+ """
159
+
160
+ logo_result = session.run(logo_query)
161
+ logo_count = logo_result.single()["count"]
162
+
163
+ # Check for games with highlight URLs
164
+ highlight_query = """
165
+ MATCH (g:Game)
166
+ WHERE g.highlight_video_url IS NOT NULL
167
+ RETURN count(g) as count
168
+ """
169
+
170
+ highlight_result = session.run(highlight_query)
171
+ highlight_count = highlight_result.single()["count"]
172
+
173
+ print(f"Games with logo URLs: {logo_count}")
174
+ print(f"Games with highlight URLs: {highlight_count}")
175
+
176
+ driver.close()
177
+
178
+ def main():
179
+ print("=== Game Node Update Tool ===")
180
+ print("This script will update existing Game nodes in Neo4j with additional attributes")
181
+ print("from the schedule_with_result_april_11.csv file.")
182
+
183
+ # Check for --yes flag
184
+ if len(sys.argv) > 1 and sys.argv[1] == '--yes':
185
+ print("Automatic confirmation enabled. Proceeding with update...")
186
+ confirmed = True
187
+ else:
188
+ # Confirm with user
189
+ user_input = input("\nDo you want to proceed with the update? (y/n): ")
190
+ confirmed = user_input.lower() == 'y'
191
+
192
+ if not confirmed:
193
+ print("Update cancelled.")
194
+ return
195
+
196
+ # Run the update
197
+ success = update_game_nodes()
198
+
199
+ if success:
200
+ print("\n✅ Game nodes updated successfully!")
201
+ else:
202
+ print("\n❌ Game node update failed. Please check the errors above.")
203
+
204
+ if __name__ == "__main__":
205
+ main()
data/april_11_multimedia_data_collect/new_final_april 11/neo4j_player_update/update_player_nodes.py ADDED
@@ -0,0 +1,230 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ update_player_nodes.py - Updates existing Player nodes in Neo4j with additional attributes
4
+
5
+ This script reads player data from the roster_april_11.csv file and updates
6
+ existing Player nodes in Neo4j with the following attributes:
7
+ - headshot_url
8
+ - instagram_url
9
+ - highlight_video_url
10
+
11
+ The script uses Player_id as the primary key for matching and updating nodes.
12
+ """
13
+
14
+ import os
15
+ import sys
16
+ import pandas as pd
17
+ from neo4j import GraphDatabase
18
+ from dotenv import load_dotenv
19
+
20
+ # Define base project directory relative to script location
21
+ SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
22
+ # Construct absolute path to project root (ifx-sandbox) based on known workspace structure
23
+ # This assumes the script is always located at the same relative depth
24
+ WORKSPACE_ROOT = os.path.abspath(os.path.join(SCRIPT_DIR, "../../../../..")) # Goes up 5 levels to workspace root
25
+ PROJECT_DIR = os.path.join(WORKSPACE_ROOT, "ifx-sandbox") # Specify ifx-sandbox within workspace
26
+
27
+ # Add parent directory (ifx-sandbox) to path if needed for imports, though unlikely needed here
28
+ # sys.path.append(PROJECT_DIR)
29
+
30
+ # Set up paths using PROJECT_DIR
31
+ DATA_DIR = os.path.join(PROJECT_DIR, "data")
32
+ ROSTER_DATA_DIR = os.path.join(DATA_DIR, "april_11_multimedia_data_collect", "new_final_april 11")
33
+ ROSTER_FILE = os.path.join(ROSTER_DATA_DIR, "roster_april_11.csv")
34
+
35
+ # Load environment variables from ifx-sandbox/.env
36
+ ENV_FILE = os.path.join(PROJECT_DIR, ".env")
37
+
38
+ if not os.path.exists(ENV_FILE):
39
+ print(f"Error: .env file not found at {ENV_FILE}")
40
+ # Attempt fallback if PROJECT_DIR might be wrong
41
+ alt_project_dir = os.path.join(os.path.abspath(os.path.join(SCRIPT_DIR, "../../../../../")), "ifx-sandbox") # Go up 6 and specify
42
+ alt_env_file = os.path.join(alt_project_dir, ".env")
43
+ if os.path.exists(alt_env_file):
44
+ print("Fallback: Found .env using alternative path calculation.")
45
+ ENV_FILE = alt_env_file
46
+ else:
47
+ sys.exit(1)
48
+
49
+ # Explicitly pass the path to load_dotenv
50
+ load_dotenv(dotenv_path=ENV_FILE)
51
+ print(f"Loading environment variables from: {ENV_FILE}")
52
+
53
+ # Neo4j connection credentials
54
+ NEO4J_URI = os.getenv('AURA_CONNECTION_URI')
55
+ NEO4J_USER = os.getenv('AURA_USERNAME')
56
+ NEO4J_PASS = os.getenv('AURA_PASSWORD')
57
+
58
+ if not all([NEO4J_URI, NEO4J_USER, NEO4J_PASS]):
59
+ print(f"Error: Missing required Neo4j credentials in {ENV_FILE}")
60
+ print(f"Required variables: AURA_CONNECTION_URI, AURA_USERNAME, AURA_PASSWORD")
61
+ sys.exit(1)
62
+
63
+ def clean_row_dict(row):
64
+ """Convert pandas row to dict and replace NaN or empty strings with None"""
65
+ return {k: None if pd.isna(v) or v == '' else v for k, v in row.items()}
66
+
67
+ def update_player_nodes():
68
+ """
69
+ Updates existing Player nodes with additional attributes from the roster CSV.
70
+ Uses Player_id as the primary key for matching.
71
+ """
72
+ print(f"Loading player roster data from: {ROSTER_FILE}")
73
+
74
+ # Check if the file exists
75
+ if not os.path.exists(ROSTER_FILE):
76
+ print(f"Error: Roster file not found at {ROSTER_FILE}")
77
+ return False
78
+
79
+ # Load the roster data
80
+ try:
81
+ roster_df = pd.read_csv(ROSTER_FILE)
82
+ print(f"Loaded {len(roster_df)} players from CSV")
83
+ except Exception as e:
84
+ print(f"Error loading roster CSV: {str(e)}")
85
+ return False
86
+
87
+ # Verify required columns exist
88
+ required_columns = ['player_id', 'headshot_url', 'instagram_url', 'highlight_video_url']
89
+ missing_columns = [col for col in required_columns if col not in roster_df.columns]
90
+
91
+ if missing_columns:
92
+ print(f"Error: Missing required columns in CSV: {', '.join(missing_columns)}")
93
+ return False
94
+
95
+ # Connect to Neo4j
96
+ print(f"Connecting to Neo4j at {NEO4J_URI}")
97
+ driver = None # Initialize driver to None
98
+ try:
99
+ driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASS))
100
+ driver.verify_connectivity()
101
+ print("Neo4j connection successful.")
102
+ with driver.session() as session:
103
+ result = session.run("MATCH (p:Player) RETURN count(p) as count")
104
+ player_count = result.single()["count"]
105
+ print(f"Found {player_count} Player nodes in Neo4j")
106
+ except Exception as e:
107
+ print(f"Error connecting to or querying Neo4j: {str(e)}")
108
+ if driver:
109
+ driver.close()
110
+ return False
111
+
112
+ # Update player nodes
113
+ success_count = 0
114
+ error_count = 0
115
+
116
+ with driver.session() as session:
117
+ for index, row in roster_df.iterrows():
118
+ # Use player_id (lowercase) which is the correct column name
119
+ player_id_val = row.get('player_id')
120
+
121
+ if not player_id_val:
122
+ error_count += 1
123
+ print(f"Skipping row {index + 1}: Missing player_id")
124
+ continue
125
+
126
+ params = clean_row_dict(row)
127
+ # Ensure the key used for matching exists in params for the query
128
+ params['match_player_id'] = player_id_val
129
+
130
+ # Update query - Use correct case for property key and parameter name
131
+ query = """
132
+ MATCH (p:Player {player_id: $match_player_id})
133
+ SET p.headshot_url = $headshot_url,
134
+ p.instagram_url = $instagram_url,
135
+ p.highlight_video_url = $highlight_video_url
136
+ RETURN p.player_id as player_id
137
+ """
138
+
139
+ try:
140
+ result = session.run(query, params)
141
+ updated_player = result.single()
142
+
143
+ if updated_player:
144
+ success_count += 1
145
+ if success_count % 10 == 0 or success_count == 1:
146
+ print(f"Updated {success_count} players...")
147
+ else:
148
+ error_count += 1
149
+ print(f"Warning: Player with ID {player_id_val} not found in Neo4j")
150
+ except Exception as e:
151
+ error_count += 1
152
+ print(f"Error updating player {player_id_val}: {str(e)}")
153
+
154
+ # Close the driver
155
+ driver.close()
156
+
157
+ # Print summary
158
+ print("\nUpdate Summary:")
159
+ print(f"Total players in CSV: {len(roster_df)}")
160
+ print(f"Successfully updated: {success_count}")
161
+ print(f"Errors/not found: {error_count}")
162
+
163
+ # Verify updates
164
+ if success_count > 0:
165
+ print("\nVerifying updates...")
166
+ verify_updates()
167
+
168
+ return success_count > 0
169
+
170
+ def verify_updates():
171
+ """Verify that Player nodes were updated with the new attributes"""
172
+ driver = None
173
+ try:
174
+ driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USER, NEO4J_PASS))
175
+ driver.verify_connectivity()
176
+ with driver.session() as session:
177
+ # Check for players with headshot & instagram URLs
178
+ query1 = """
179
+ MATCH (p:Player)
180
+ WHERE p.headshot_url IS NOT NULL AND p.instagram_url IS NOT NULL
181
+ RETURN count(p) as count
182
+ """
183
+ result1 = session.run(query1)
184
+ count1 = result1.single()["count"]
185
+
186
+ # Check for players with highlight URLs
187
+ query2 = """
188
+ MATCH (p:Player)
189
+ WHERE p.highlight_video_url IS NOT NULL
190
+ RETURN count(p) as count
191
+ """
192
+ result2 = session.run(query2)
193
+ count2 = result2.single()["count"]
194
+
195
+ print(f"Players with headshot & Instagram URLs: {count1}")
196
+ print(f"Players with highlight URLs: {count2}")
197
+ except Exception as e:
198
+ print(f"Error during verification: {str(e)}")
199
+ finally:
200
+ if driver:
201
+ driver.close()
202
+
203
+ def main():
204
+ print("=== Player Node Update Tool ===")
205
+ print("This script will update existing Player nodes in Neo4j with additional attributes")
206
+ print(f"from the {ROSTER_FILE} file.")
207
+
208
+ # Check for --yes flag
209
+ if len(sys.argv) > 1 and sys.argv[1] == '--yes':
210
+ print("Automatic confirmation enabled. Proceeding with update...")
211
+ confirmed = True
212
+ else:
213
+ # Confirm with user
214
+ user_input = input("\nDo you want to proceed with the update? (y/n): ")
215
+ confirmed = user_input.lower() == 'y'
216
+
217
+ if not confirmed:
218
+ print("Update cancelled.")
219
+ return
220
+
221
+ # Run the update
222
+ success = update_player_nodes()
223
+
224
+ if success:
225
+ print("\n✅ Player nodes updated successfully!")
226
+ else:
227
+ print("\n❌ Player node update failed. Please check the errors above.")
228
+
229
+ if __name__ == "__main__":
230
+ main()
data/april_11_multimedia_data_collect/new_final_april 11/roster_april_11.csv ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Player,Number,Pos,HT,WT,Age,Exp,College,status,player_id,headshot_url,instagram_url,highlight_video_url
2
+ Israel Abanikanda,20,RB,5-10,216,22,2,Pittsburgh,Active,c1f595b7-9043-4569-9ff6-97e0f31a5ba5,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wo7d9oli06eki4mnh3i8.png,https://www.instagram.com/izzygetsbusy__/?hl=en,
3
+ Brandon Allen,17,QB,6-2,209,32,8,Arkansas,Active,86f109ac-c967-4c17-af5c-97395270c489,#N/A,#N/A,#N/A
4
+ Evan Anderson,69,DL,6-3,326,23,R,Florida Atlantic,Active,7774475d-ab11-4247-a631-9c7d29ba9745,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/ng7oamywxvqgkx6l6kqc.png,https://www.instagram.com/klamps8/?hl=en,
5
+ Tre Avery,36,CB,5-11,181,28,3,Rutgers,Active,59e3afa0-cb40-4f8e-9052-88b9af20e074,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/a7kfv7xjftqlaqghk6sg,https://www.instagram.com/t.avery21/?hl=en,
6
+ Robert Beal Jr.,51,DL,6-4,250,25,2,Georgia,Active,dcecbaa2-2803-4716-a729-45e1c80d6ab8,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jwwhmt5d8mi0vdb8nfic.jpg,https://www.instagram.com/oursf49ers/reel/C_CVQxxp2ti/,
7
+ Tatum Bethune,48,LB,6-0,299,24,R,Florida State,Active,f51beff4-e90c-4b73-9253-8699c46a94ff,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/vl08pinqpmoubdf0zy5s.png,https://www.instagram.com/tatumx15/?hl=en,
8
+ Nick Bosa,97,DL,6-4,266,27,6,Ohio State,Active,9cf4b059-d05c-4d22-9ca3-c5aee41ebfdc,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/utiwswqvpkiwtocijwhz.jpg,https://www.instagram.com/nbsmallerbear/?hl=en,https://www.youtube.com/watch?v=URvcwUEQYMw
9
+ Jake Brendel,64,OL,6-4,299,32,7,UCLA,Active,b7c1b4e2-4d9c-47cc-8ac2-b6e0d2493157,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/svsb41aekpzt3m9snilw.jpg,https://www.instagram.com/jake.brendel/?hl=en,
10
+ Ji'Ayir Brown,27,S,5-11,202,25,2,Penn State,Active,e5950f0d-0d24-4e2f-b96a-36ebedb604a9,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/urillpic02z774n09xvf.jpg,https://www.instagram.com/_tiig/?hl=en,
11
+ Chris Conley,18,WR,6-3,205,32,10,Georgia,Active,f35d154a-0a53-476e-b0c2-49ae5d33b7eb,#N/A,#N/A,#N/A
12
+ Jacob Cowing,19,WR,5-9,171,24,R,Arizona,Active,564daa89-38f8-4c8a-8760-de1923f9a681,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/lg7aao0umc21oioufqdx.png,https://www.instagram.com/jaycowing_/?hl=en,
13
+ Kalia Davis,93,DL,6-2,310,26,3,Central Florida,Active,9ecde51b-8b49-40a3-ba42-e8c5787c279c,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/rmnxj3sh7pyldmcxqe32.jpg,https://www.instagram.com/ucf.football/p/C3No6rTugDe/,https://www.youtube.com/watch?v=xE4jfmV7kGg
14
+ Khalil Davis,50,DL,6-2,315,28,4,Nebraska,Active,5162b93a-4f44-45fd-8d6b-f5714f4c7e91,#N/A,#N/A,#N/A
15
+ Joshua Dobbs,5,QB,6-3,220,30,8,Tennessee,Active,44b1d8d5-663c-485b-94d3-c72540441aa0,#N/A,#N/A,#N/A
16
+ Jordan Elliott,92,DL,6-4,303,27,5,Missouri,Active,f037f86a-6952-49a5-b6d3-6ce43b8e1d3d,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xbyky8r2yuzusd2tmrw8.jpg,https://www.instagram.com/jordanelliott_nbcs/,
17
+ Luke Farrell,89,TE,6-5,250,27,4,Ohio State,Active,ba2cf281-cffa-4de5-9db9-2109331e455d,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/f2z7wpmx7ngtxcqqedla,https://www.instagram.com/lukefarrell89/?hl=en,
18
+ Tashaun Gipson Sr.,43,S,6-1,212,34,13,Wyoming,Active,14026aa2-5f8c-45bf-9b92-0971d92127e6,#N/A,#N/A,#N/A
19
+ Jalen Graham,41,LB,6-3,220,25,2,Purdue,Active,00d1db69-8b43-4d34-bbf8-17d4f00a8b71,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/pbl2a1ujopvwqrfct0jp.jpg,https://www.instagram.com/thexniners/p/CruR8IPrSV7/,
20
+ Richie Grant,27,S,6-0,200,27,4,UCF,Active,c737a041-c713-43f6-8205-f409b349e2b6,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/szeswtvt6jmbu3so3phd,https://www.instagram.com/richiegrant_/?hl=en,
21
+ Renardo Green,0,CB,6-0,186,24,R,Florida State,Active,21d23c5c-28c0-4b66-8d17-2f5c76de48ed,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/v79obx9v7tgcjjlo6hiy.png,https://www.instagram.com/dondada.8/?hl=en,https://www.youtube.com/watch?v=iIooO2pTjt4
22
+ Yetur Gross-Matos,94,DL,6-5,265,27,5,Penn State,Active,cde0a59d-19ab-44c9-ba02-476b0762e4a8,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/etuaajmvhbc5qkebgoow.jpg,https://www.instagram.com/__lobo99/?hl=en,
23
+ Isaac Guerendo,31,RB,6-0,221,24,R,Louisville,Active,4ca8e082-d358-46bf-af14-9eaab40f4fe9,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/b66rpzr9iauo5rdprvka.png,https://www.instagram.com/isaac_guerendo/?hl=en,
24
+ Charlie Heck,75,OL,6-8,311,28,5,North Carolina,Active,7d809297-6d2f-4515-ab3c-1ce3eb47e7a6,#N/A,#N/A,#N/A
25
+ Matt Hennessy,61,OL,6-3,315,27,4,Temple,Active,2f95e3de-03de-4827-a4a7-aaed42817861,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/zk8b21o8ncxnyu0gyf23,https://www.instagram.com/matt___hennessy/?hl=en,
26
+ Jauan Jennings,15,WR,6-3,212,27,4,Tennessee,Active,16794171-c7a0-4a0e-9790-6ab3b2cd3380,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/wxsq7f4ajmhfs6tn4dg2.jpg,https://www.instagram.com/u_aintjj/?hl=en,https://www.youtube.com/watch?v=kFkNlmUQVu0
27
+ Mac Jones,10,QB,6-3,200,26,4,Alabama,Active,18df1544-69a6-460c-802e-7d262e83111d,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/pedpdxybeus7mrovsoko,https://www.instagram.com/macjones_10/?hl=en,https://www.youtube.com/watch?v=TylWJVa84VE
28
+ George Kittle,85,TE,6-4,250,31,8,Iowa,Active,3fe4cd72-43e3-40ea-8016-abb2b01503c7,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/elheepobwn1ahqwtfwat.jpg,https://www.instagram.com/gkittle/?hl=en,https://www.youtube.com/watch?v=RzMVbATV95w
29
+ Deommodore Lenoir,2,DB,5-10,200,25,4,Oregon,Active,79a00b55-fa24-45d8-a43f-772694b7776d,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/f9fnuvbpcxku9ibt9qs8.jpg,https://www.instagram.com/deommo.lenoir/?hl=en,https://www.youtube.com/watch?v=h-uvula5tNo
30
+ Nick McCloud,35,CB,6-1,193,26,4,Notre Dame,Active,c3b8f82b-92c0-4a5d-85ef-7ddaec7d3a87,#N/A,#N/A,#N/A
31
+ Colton McKivitz,68,OL,6-6,301,28,5,West Virginia,Active,63b288c1-4434-4120-867c-cee4dadd8c8a,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jugvoxjabgsbcfbuqfew.jpg,https://www.instagram.com/cmckivitz53/?hl=en,
32
+ Jake Moody,4,K,6-1,210,25,2,Michigan,Active,9328e072-e82e-41ef-a132-ed54b649a5ca,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ygputwsbutemszr8xxkw.jpg,https://www.instagram.com/jmoods_/?hl=en,
33
+ Malik Mustapha,6,S,5-10,206,22,R,Wake Forest,Active,6cb2d19f-f0a4-4ece-9190-76345d1abc54,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/eyrgxgpbrycd9x8glk0j.png,https://www.instagram.com/stapha/,
34
+ Pat O'Donnell,40,P,6-4,220,34,10,Miami,Active,61a0a607-be7b-429d-b492-59523fad023e,#N/A,#N/A,#N/A
35
+ Sam Okuayinonu,91,DL,6-1,269,26,2,Maryland,Active,c81b6283-b1aa-40d6-a825-f01410912435,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/fyolr2zk2nplfbdze75l.jpg,https://www.instagram.com/sam.ok97/?hl=en,
36
+ Ricky Pearsall,14,WR,6-3,192,24,R,Florida,Active,27bf8c9c-7193-4f43-9533-32f1293d1bf0,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/to7q7w4kjiajseb4ljcx.png,https://www.instagram.com/ricky.pearsall/?hl=en,
37
+ Jason Pinnock,41,CB,6-0,205,25,4,Pittsburgh,Active,57f29e6b-9082-4637-af4b-0d123ef4542d,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/on29awacb9frijyggtgt,https://www.instagram.com/jpinny15/?hl=en,
38
+ Austen Pleasants,62,OT,6-7,328,27,1,Ohio,Active,d000d0a3-a7ba-442d-92af-0d407340aa2f,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wsbs5emdyzuc1sudbcls.png,https://www.instagram.com/oursf49ers/p/DDr48a4PdcO/?hl=en,
39
+ Dominick Puni,77,OL,6-5,313,25,R,Kansas,Active,aeb5a55c-4554-4116-9de0-76910e66e154,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/tq1snozjpjrgrjoflrfg.png,https://www.instagram.com/dompuni/?hl=en,
40
+ Brock Purdy,13,QB,6-1,220,25,3,Iowa State,Active,787758c9-4e9a-44f2-af68-c58165d0bc03,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wt42ykvuxpngm4m1axxn.png,https://www.instagram.com/brock.purdy13/?hl=en,https://www.youtube.com/watch?v=O-ft3FPYwiA
41
+ Demarcus Robinson,14,WR,6-1,203,30,9,Florida,Active,c97d60e5-8c92-4d2e-b782-542ca7aa7799,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/lakf0xue1qqb7ed4p6ge,https://www.instagram.com/demarcusrobinson/?hl=en,https://www.youtube.com/watch?v=1vwP8vs-mXI
42
+ Eric Saubert,82,TE,6-5,248,30,7,Drake,Active,67214339-8a36-45b9-8b25-439d97b06703,#N/A,#N/A,#N/A
43
+ Patrick Taylor Jr.,32,RB,6-2,217,26,4,Memphis,Active,4bf9f546-d80c-4cb4-8692-73d8ac68d1f1,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/hochjncae0hqcoveuexq.jpg,https://www.instagram.com/patricktaylor/?hl=en,
44
+ Tre Tomlinson,,CB,5-9,177,25,2,TCU,Active,ad3e3f2e-ee06-4406-8874-ea1921c52328,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/n5pfv126xw0psc0d1ydz,https://www.instagram.com/trevius/?hl=en,
45
+ Jake Tonges,88,TE,6-4,240,25,2,California,Active,ad391cbf-b874-4b1e-905b-2736f2b69332,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/la3z5y6u7tix6rnq2m5l.jpg,https://www.instagram.com/jaketonges/?hl=en,
46
+ Fred Warner,54,LB,6-3,230,28,7,Brigham Young,Active,cdd0eadc-19e2-4ca1-bba5-6846c9ac642b,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/zo4ftfar4bshrbipceuk.jpg,https://www.instagram.com/fred_warner/?hl=en,https://www.youtube.com/watch?v=IwBlFktlNwY
47
+ Jon Weeks,46,LS,5-10,245,39,15,Baylor,Active,587c7609-ba56-4d22-b1e6-c12576c428fd,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/d9fvm74pu4vyinveopbf,https://www.instagram.com/jonweeks46/?hl=en,https://www.youtube.com/watch?v=FO_iJ1IEOQU
48
+ Brayden Willis,9,TE,6-4,240,25,2,Oklahoma,Active,d1b16c10-c5b3-4157-bd9d-7f289f17df81,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xmo7hsuho3ehmsjwvthc.jpg,https://www.instagram.com/brayden_willis/?hl=en,https://www.youtube.com/watch?v=3KNc8s3Xwos
49
+ Dee Winters,53,LB,5-11,227,24,2,TCU,Active,514f3569-5435-48bb-bc74-6b08d3d78ca9,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ggf13riajo0kn0y6kbu0.jpg,https://www.instagram.com/dwints_/?hl=en,
50
+ Rock Ya-Sin,33,CB,5-11,195,28,6,Temple,Active,cb00e672-232a-4137-a259-f3cf0382d466,#N/A,#N/A,#N/A
51
+ Isaac Yiadom,22,CB,6-1,232,29,7,Boston College,Active,3227c040-7d18-4803-b4b4-799667344a6d,#N/A,#N/A,#N/A
52
+ Nick Zakelj,63,OL,6-6,316,25,3,Fordham,Active,59845c40-7efc-4514-9ed6-c29d983fba31,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/o92tva22zezdz4aksadl.jpg,https://www.instagram.com/nickzakelj/?hl=en,
53
+ Player,#,Pos,HT,WT,Age,Exp,College,Reserve/Future,724825a5-7a0b-422d-946e-ce9512ad7add,#N/A,#N/A,#N/A
54
+ Isaac Alarcon,67,OL,6-7,320,26,1,Tecnológico de Monterrey,Reserve/Future,262ea245-93dc-4c61-aa41-868bc4cc5dcf,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mlhuuxukyusodzlfsmnv.jpg,https://www.instagram.com/isaac_algar/?hl=en,
55
+ Russell Gage,84,WR,6-0,184,29,7,LSU,Reserve/Future,1537733f-8218-4c45-9a0a-e00ff349a9d1,#N/A,#N/A,#N/A
56
+ Isaiah Hodgins,87,WR,6-3,200,26,4,Oregon State,Reserve/Future,f4c2cec2-d0b4-45a9-ac1b-478ce1a32b2c,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ax1oft9kqida0eokvtes.jpg,https://www.instagram.com/isaiahhodgins/?hl=en,
57
+ Quindell Johnson,,S,6-2,208,25,2,Memphis,Reserve/Future,7bee6f18-bd56-4920-a132-107c8af22bef,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/uga90lawcfxjcqna7opb,https://www.instagram.com/p/DFGnwNlymc9/,https://www.youtube.com/watch?v=VU2gRl8rgqw
58
+ Jalen McKenzie,76,OT,6-5,315,25,1,USC,Reserve/Future,473d4c85-cc2c-4020-9381-c49a7236ad68,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/gffxpns1ayxyjccymr6d.jpg,https://www.instagram.com/jay_peez70/?hl=en,
59
+ Brandon Aiyuk,11,WR,6-0,200,27,5,Arizona State,Reserve/Injured,577eb875-f886-400d-8b14-ec28a2cc5eae,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/khwofxjjwx0hcaigzxhw.png,https://www.instagram.com/brandonaiyuk/?hl=en,https://www.youtube.com/watch?v=TlAgJDpoOYk
60
+ Aaron Banks,65,OL,6-5,325,27,4,Notre Dame,Reserve/Injured,e665afb5-904a-4e86-a6da-1d859cc81f90,#N/A,#N/A,#N/A
61
+ Ben Bartch,78,OL,6-6,315,26,5,St. John's (MN),Reserve/Injured,6a1545de-63fd-4c04-bc27-58ba334e7a91,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/aqaslodzr7y0yvh5zzxa.jpg,https://www.instagram.com/bartchben/,
62
+ Tre Brown,22,CB,5-10,185,27,4,Oklahoma,Reserve/Injured,839c425d-d9b0-4b60-8c68-80d14ae382f7,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/dpemqrrweakt8dci3qfb,https://www.instagram.com/tre_brown25/?hl=en,
63
+ Spencer Burford,74,OL,6-4,300,24,3,Texas-San Antonio,Reserve/Injured,31da633a-a7f1-4ec4-a715-b04bb85e0b5f,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/lje3ae25dntkdudp6eex.jpg,https://www.instagram.com/spence__74/?hl=en,
64
+ Luke Gifford,57,LB,6-3,243,29,6,Nebraska,Reserve/Injured,069b6392-804b-4fcb-8654-d67afad1fd91,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/mhdbbzj8amttnpd1nbpn,https://www.instagram.com/luke_gifford/?hl=en,
65
+ Kevin Givens,90,DL,6-1,285,28,5,Penn State,Reserve/Injured,a9f79e66-ff50-49eb-ae50-c442d23955fc,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mstmgft0e0ancdzspboy.jpg,https://www.instagram.com/49ers/p/DAg_Pvpz1vV/,
66
+ Darrell Luter Jr.,28,CB,6-0,190,24,2,South Alabama,Reserve/Injured,741c6fa0-0254-4f85-9066-6d46fcc1026e,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/g5rohvooet9g5w7rlhrh.jpg,https://www.instagram.com/_d.ray4k/?hl=en,
67
+ Jordan Mason,24,RB,5-11,223,25,3,Georgia Tech,Reserve/Injured,89531f13-baf0-43d6-b9f4-42a95482753a,#N/A,#N/A,#N/A
68
+ Christian McCaffrey,23,RB,5-11,210,28,8,Stanford,Reserve/Injured,052ec36c-e430-4698-9270-d925fe5bcaf4,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/a8fka6shomakkbllljgt.jpg,https://www.instagram.com/christianmccaffrey/?hl=en,https://www.youtube.com/watch?v=cu78Okf6VSo
69
+ Elijah Mitchell,25,RB,5-10,200,26,4,Louisiana,Reserve/Injured,7dfc6f25-07a8-4618-954b-b9dd96cee86e,#N/A,#N/A,#N/A
70
+ Jaylon Moore,76,OL,6-4,311,27,4,Western Michigan,Reserve/Injured,c800d89e-031f-4180-b824-8fd307cf6d2b,#N/A,#N/A,#N/A
71
+ George Odum,30,S,6-1,202,31,7,Central Arkansas,Reserve/Injured,26e72658-4503-47c4-ad74-628545e2402a,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/sqpxhoycdpegkyjn6ooc.jpg,https://www.instagram.com/george.w.odum/?hl=en,
72
+ Curtis Robinson,36,LB,6-3,235,26,3,Stanford,Reserve/Injured,072a3483-b063-48fd-bc9c-5faa9b845425,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/x3xyzgeapcafr0gicl5y.jpg,https://www.instagram.com/curtis_robinsonn/?hl=en,https://www.youtube.com/watch?v=8wyHHbXoFZI
73
+ Trent Williams,71,T,6-5,320,36,15,Oklahoma,Reserve/Injured,bb8b42ad-6042-40cd-b08c-2dc3a5cfc737,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/bnq8i5urjualxre5caqz.jpg,https://www.instagram.com/trentwilliams71/?hl=en,https://www.youtube.com/watch?v=k7FDcmcawL0
74
+ Mitch Wishnowsky,3,P,6-2,220,33,6,Utah,Reserve/Injured,fe86f2c6-8576-4e77-b1df-a3df995eccf8,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mkf1xr1x8nr9l55oq72a.jpg,https://www.instagram.com/mitchwish3/?hl=en,https://www.youtube.com/watch?v=ZkH6eWs5Yd8
data/april_11_multimedia_data_collect/new_final_april 11/schedule_with_result_april_11.csv ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Match Number,Round Number,Date,Location,Home Team,Away Team,Result,game_result,home_team_logo_url,away_team_logo_url,game_id,Summary,highlight_video_url
2
+ 1,1,10/09/2024 00:15,Levi's Stadium,San Francisco 49ers,New York Jets,32 - 19,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/nyj.png,7d5492b7-6372-4ab6-b878-a6ad10936f3b,"Quarterback Brock Purdy threw for 231 yards, with running back Jordan Mason rushing for 147 yards.",https://www.youtube.com/watch?v=igOb4mfV7To
3
+ 28,2,15/09/2024 17:00,U.S. Bank Stadium,Minnesota Vikings,San Francisco 49ers,23 - 17,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/min.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,9c37ef4a-8887-4e16-a0e9-53dd21d0ed1c,"Purdy passed for 319 yards; Mason added 100 rushing yards, but the 49ers fell short.",https://www.youtube.com/watch?v=jTJw2uf-Pdg
4
+ 38,3,22/09/2024 20:25,SoFi Stadium,Los Angeles Rams,San Francisco 49ers,27 - 24,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/lar.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,b8c3e7f7-81ed-48c4-9a49-0897cac450e5,Purdy threw for 292 yards; Jauan Jennings had 175 receiving yards in a close loss.,https://www.youtube.com/watch?v=Y1dnhN-1ryU
5
+ 55,4,29/09/2024 20:05,Levi's Stadium,San Francisco 49ers,New England Patriots,30 - 13,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/ne.png,b4b49323-c84d-4414-bbd4-de399145db28,Brock Purdy threw for 288 yards and a touchdown; Fred Warner returned an interception for a touchdown.,https://www.youtube.com/watch?v=NCUjGFJILLo
6
+ 70,5,06/10/2024 20:05,Levi's Stadium,San Francisco 49ers,Arizona Cardinals,23 - 24,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/ari.png,efe67377-f218-4629-94d6-b0a28dae81b4,"Kyler Murray led a comeback, including a 50-yard touchdown run; Chad Ryland kicked the game-winning field goal.",https://www.youtube.com/watch?v=v62sybG_3Lk
7
+ 92,6,11/10/2024 00:15,Lumen Field,Seattle Seahawks,San Francisco 49ers,24 - 36,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sea.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,be924e35-6c00-470a-a82e-f77e89f2fca9,Geno Smith's late 13-yard touchdown run secured the Seahawks' victory.,https://www.youtube.com/watch?v=LaDE1QBC3Cc
8
+ 96,7,20/10/2024 20:25,Levi's Stadium,San Francisco 49ers,Kansas City Chiefs,18 - 28,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/kc.png,c0efcedb-e8a0-4058-8ae8-df418a829c22,Specific game details are not available.,https://www.youtube.com/watch?v=4_xM1tOK-28
9
+ 109,8,28/10/2024 00:20,Levi's Stadium,San Francisco 49ers,Dallas Cowboys,30 - 24,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/dal.png,9d3c8085-3864-4c86-9a47-6d91f9561e68,Specific game details are not available.,https://www.youtube.com/watch?v=7nTBwPljD-Q
10
+ 149,10,10/11/2024 18:00,Raymond James Stadium,Tampa Bay Buccaneers,San Francisco 49ers,20 - 23,Win,https://a.espncdn.com/i/teamlogos/nfl/500/tb.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,8c117905-4d53-4bfb-a85e-d4d0a52262a8,"The 49ers narrowly avoided a collapse, with Jake Moody's game-winning field goal.",https://www.youtube.com/watch?v=607mv01G8UU
11
+ 158,11,17/11/2024 21:05,Levi's Stadium,San Francisco 49ers,Seattle Seahawks,17 - 20,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/sea.png,6ee0f83e-d738-43c7-95e2-472bdaa9c2e8,Geno Smith's last-minute touchdown run ended the Seahawks' losing streak against the 49ers.,https://www.youtube.com/watch?v=VMPRSGk7bUg
12
+ 169,12,24/11/2024 21:25,Lambeau Field,Green Bay Packers,San Francisco 49ers,38 - 10,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/gb.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,89aeb6ec-c102-442f-a2b2-862a58f08c72,"Despite losing Deebo Samuel early, the 49ers secured a narrow victory.",https://www.youtube.com/watch?v=rtBtGh02HvA
13
+ 181,13,02/12/2024 01:20,Highmark Stadium,Buffalo Bills,San Francisco 49ers,35 - 10,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/buf.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,051a9bbd-41b1-4946-b366-2202b9b84646,"Josh Allen scored touchdowns passing, rushing, and receiving, leading the Bills to victory.",
14
+ 199,14,08/12/2024 21:25,Levi's Stadium,San Francisco 49ers,Chicago Bears,38 - 13,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/chi.png,2bfc3060-5975-4c60-8cf2-cd359c318bcb,Specific game details are not available.,https://www.youtube.com/watch?v=qmzSVmVNaFg
15
+ 224,15,13/12/2024 01:15,Levi's Stadium,San Francisco 49ers,Los Angeles Rams,6 - 12,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/lar.png,07182afe-36bf-44e4-a464-52a56e9e325d,"In a rainy defensive battle, the Rams secured victory with four field goals.",https://www.youtube.com/watch?v=3JfiboQ6ZC8
16
+ 228,16,22/12/2024 21:25,Hard Rock Stadium,Miami Dolphins,San Francisco 49ers,29 - 17,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/mia.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,0be9a14c-0017-46b8-96e8-7c446e78ea84,A high-scoring game marked by a scuffle involving Jauan Jennings; the 49ers fell short.,
17
+ 246,17,31/12/2024 01:15,Levi's Stadium,San Francisco 49ers,Detroit Lions,34 - 40,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/det.png,a6af1ef1-eece-43c2-b98f-c20494003cfe,Specific game details are not available.,https://www.youtube.com/watch?v=AooNLyum7Ng
18
+ 257,18,05/01/2025 21:25,State Farm Stadium,Arizona Cardinals,San Francisco 49ers,47 - 24,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/ari.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,2c95b37b-b32d-4b30-a582-f04b8cbf12e4,Specific game details are not available.,https://www.youtube.com/watch?v=HfqGFWVdf9w
data/april_11_multimedia_data_collect/new_games_with_highlights.csv ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ match_number,round_number,date,location,home_team,away_team,result,game_result,opponent,highlight_video_url
2
+ 1,1,10/09/2024 00:15,Levi's Stadium,San Francisco 49ers,New York Jets,32 - 19,Win,New York Jets,https://www.youtube.com/watch?v=igOb4mfV7To
3
+ 28,2,15/09/2024 17:00,U.S. Bank Stadium,Minnesota Vikings,San Francisco 49ers,23 - 17,Loss,Minnesota Vikings,https://www.youtube.com/watch?v=jTJw2uf-Pdg
4
+ 38,3,22/09/2024 20:25,SoFi Stadium,Los Angeles Rams,San Francisco 49ers,27 - 24,Loss,Los Angeles Rams,https://www.youtube.com/watch?v=Y1dnhN-1ryU
5
+ 55,4,29/09/2024 20:05,Levi's Stadium,San Francisco 49ers,New England Patriots,30 - 13,Win,New England Patriots,https://www.youtube.com/watch?v=NCUjGFJILLo
6
+ 70,5,06/10/2024 20:05,Levi's Stadium,San Francisco 49ers,Arizona Cardinals,23 - 24,Loss,Arizona Cardinals,https://www.youtube.com/watch?v=v62sybG_3Lk
7
+ 92,6,11/10/2024 00:15,Lumen Field,Seattle Seahawks,San Francisco 49ers,24 - 36,Win,Seattle Seahawks,https://www.youtube.com/watch?v=LaDE1QBC3Cc
8
+ 96,7,20/10/2024 20:25,Levi's Stadium,San Francisco 49ers,Kansas City Chiefs,18 - 28,Loss,Kansas City Chiefs,https://www.youtube.com/watch?v=4_xM1tOK-28
9
+ 109,8,28/10/2024 00:20,Levi's Stadium,San Francisco 49ers,Dallas Cowboys,30 - 24,Win,Dallas Cowboys,https://www.youtube.com/watch?v=7nTBwPljD-Q
10
+ 149,10,10/11/2024 18:00,Raymond James Stadium,Tampa Bay Buccaneers,San Francisco 49ers,20 - 23,Win,Tampa Bay Buccaneers,https://www.youtube.com/watch?v=607mv01G8UU
11
+ 158,11,17/11/2024 21:05,Levi's Stadium,San Francisco 49ers,Seattle Seahawks,17 - 20,Loss,Seattle Seahawks,https://www.youtube.com/watch?v=VMPRSGk7bUg
12
+ 169,12,24/11/2024 21:25,Lambeau Field,Green Bay Packers,San Francisco 49ers,38 - 10,Loss,Green Bay Packers,https://www.youtube.com/watch?v=rtBtGh02HvA
13
+ 181,13,02/12/2024 01:20,Highmark Stadium,Buffalo Bills,San Francisco 49ers,35 - 10,Loss,Buffalo Bills,
14
+ 199,14,08/12/2024 21:25,Levi's Stadium,San Francisco 49ers,Chicago Bears,38 - 13,Win,Chicago Bears,https://www.youtube.com/watch?v=qmzSVmVNaFg
15
+ 224,15,13/12/2024 01:15,Levi's Stadium,San Francisco 49ers,Los Angeles Rams,6 - 12,Loss,Los Angeles Rams,https://www.youtube.com/watch?v=3JfiboQ6ZC8
16
+ 228,16,22/12/2024 21:25,Hard Rock Stadium,Miami Dolphins,San Francisco 49ers,29 - 17,Loss,Miami Dolphins,
17
+ 246,17,31/12/2024 01:15,Levi's Stadium,San Francisco 49ers,Detroit Lions,34 - 40,Loss,Detroit Lions,https://www.youtube.com/watch?v=AooNLyum7Ng
18
+ 257,18,05/01/2025 21:25,State Farm Stadium,Arizona Cardinals,San Francisco 49ers,47 - 24,Loss,Arizona Cardinals,https://www.youtube.com/watch?v=HfqGFWVdf9w
data/april_11_multimedia_data_collect/new_niners_players_with_highlights.csv ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name,headshot_url,instagram_url,highlight_video_url
2
+ Israel Abanikanda,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wo7d9oli06eki4mnh3i8.png,https://www.instagram.com/izzygetsbusy__/?hl=en,
3
+ Brandon Aiyuk,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/khwofxjjwx0hcaigzxhw.png,https://www.instagram.com/brandonaiyuk/?hl=en,https://www.youtube.com/watch?v=TlAgJDpoOYk
4
+ Isaac Alarcon,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mlhuuxukyusodzlfsmnv.jpg,https://www.instagram.com/isaac_algar/?hl=en,
5
+ Evan Anderson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/ng7oamywxvqgkx6l6kqc.png,https://www.instagram.com/klamps8/?hl=en,
6
+ Tre Avery,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/a7kfv7xjftqlaqghk6sg,https://www.instagram.com/t.avery21/?hl=en,
7
+ Alex Barrett,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/bm0ay22de39d1enrxwiq.jpg,https://www.instagram.com/alex.barrett/?hl=en,
8
+ Ben Bartch,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/aqaslodzr7y0yvh5zzxa.jpg,https://www.instagram.com/bartchben/,
9
+ Robert Beal Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jwwhmt5d8mi0vdb8nfic.jpg,https://www.instagram.com/oursf49ers/reel/C_CVQxxp2ti/,
10
+ Tatum Bethune,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/vl08pinqpmoubdf0zy5s.png,https://www.instagram.com/tatumx15/?hl=en,
11
+ Nick Bosa,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/utiwswqvpkiwtocijwhz.jpg,https://www.instagram.com/nbsmallerbear/?hl=en,https://www.youtube.com/watch?v=URvcwUEQYMw
12
+ Jake Brendel,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/svsb41aekpzt3m9snilw.jpg,https://www.instagram.com/jake.brendel/?hl=en,
13
+ Ji'Ayir Brown,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/urillpic02z774n09xvf.jpg,https://www.instagram.com/_tiig/?hl=en,
14
+ Tre Brown,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/dpemqrrweakt8dci3qfb,https://www.instagram.com/tre_brown25/?hl=en,
15
+ Spencer Burford,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/lje3ae25dntkdudp6eex.jpg,https://www.instagram.com/spence__74/?hl=en,
16
+ Jacob Cowing,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/lg7aao0umc21oioufqdx.png,https://www.instagram.com/jaycowing_/?hl=en,
17
+ Kalia Davis,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/rmnxj3sh7pyldmcxqe32.jpg,https://www.instagram.com/ucf.football/p/C3No6rTugDe/,https://www.youtube.com/watch?v=xE4jfmV7kGg
18
+ Jordan Elliott,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xbyky8r2yuzusd2tmrw8.jpg,https://www.instagram.com/jordanelliott_nbcs/,
19
+ Luke Farrell,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/f2z7wpmx7ngtxcqqedla,https://www.instagram.com/lukefarrell89/?hl=en,
20
+ Russell Gage Jr.,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/lkqhshv0dss1b9c6mdnj,https://www.instagram.com/w8k3mupruss/?hl=en,
21
+ Jonathan Garvin,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/rapfcxut6vu50vcevswe.png,https://www.instagram.com/thesfniners/p/DCmgF8KSw2A/?hl=en,
22
+ Luke Gifford,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/mhdbbzj8amttnpd1nbpn,https://www.instagram.com/luke_gifford/?hl=en,
23
+ Kevin Givens,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mstmgft0e0ancdzspboy.jpg,https://www.instagram.com/49ers/p/DAg_Pvpz1vV/,
24
+ Jalen Graham,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/pbl2a1ujopvwqrfct0jp.jpg,https://www.instagram.com/thexniners/p/CruR8IPrSV7/,
25
+ Richie Grant,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/szeswtvt6jmbu3so3phd,https://www.instagram.com/richiegrant_/?hl=en,
26
+ Renardo Green,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/v79obx9v7tgcjjlo6hiy.png,https://www.instagram.com/dondada.8/?hl=en,https://www.youtube.com/watch?v=iIooO2pTjt4
27
+ Yetur Gross-Matos,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/etuaajmvhbc5qkebgoow.jpg,https://www.instagram.com/__lobo99/?hl=en,
28
+ Isaac Guerendo,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/b66rpzr9iauo5rdprvka.png,https://www.instagram.com/isaac_guerendo/?hl=en,
29
+ Sebastian Gutierrez,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/am9sywgkga6jq65hvboe.jpg,https://www.instagram.com/sebastiandev1/?hl=en,
30
+ Matt Hennessy,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/zk8b21o8ncxnyu0gyf23,https://www.instagram.com/matt___hennessy/?hl=en,
31
+ Isaiah Hodgins,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ax1oft9kqida0eokvtes.jpg,https://www.instagram.com/isaiahhodgins/?hl=en,
32
+ Drake Jackson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/y2luyplzpvbzokyfbmla.jpg,https://www.instagram.com/thefreak/?hl=en,
33
+ Tarron Jackson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/pnqrjp76bgpkmacxma3r,https://www.instagram.com/tarron_jackson/?hl=en,
34
+ Jauan Jennings,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/wxsq7f4ajmhfs6tn4dg2.jpg,https://www.instagram.com/u_aintjj/?hl=en,https://www.youtube.com/watch?v=kFkNlmUQVu0
35
+ Quindell Johnson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/uga90lawcfxjcqna7opb,https://www.instagram.com/p/DFGnwNlymc9/,https://www.youtube.com/watch?v=VU2gRl8rgqw
36
+ Zack Johnson,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/n4hy8uzhcl5cl0ricwoa,https://www.instagram.com/zack.johnson.68/,https://www.youtube.com/watch?v=yDAcyWJi6qQ
37
+ Mac Jones,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/pedpdxybeus7mrovsoko,https://www.instagram.com/macjones_10/?hl=en,https://www.youtube.com/watch?v=TylWJVa84VE
38
+ Kyle Juszczyk,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ywdz6y2pfzndqgmxxfbj.jpg,https://www.instagram.com/juicecheck44/?hl=en,https://www.youtube.com/watch?v=PZCVP0l8uVk
39
+ George Kittle,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/elheepobwn1ahqwtfwat.jpg,https://www.instagram.com/gkittle/?hl=en,https://www.youtube.com/watch?v=RzMVbATV95w
40
+ Deommodore Lenoir,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/f9fnuvbpcxku9ibt9qs8.jpg,https://www.instagram.com/deommo.lenoir/?hl=en,https://www.youtube.com/watch?v=h-uvula5tNo
41
+ Chase Lucas,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/gjeejt5pbagnipodhdz4.jpg,https://www.instagram.com/chase_lucas24/?hl=en,
42
+ Darrell Luter Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/g5rohvooet9g5w7rlhrh.jpg,https://www.instagram.com/_d.ray4k/?hl=en,
43
+ Jaylen Mahoney,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/yv9inbia05nyxppuajv0.png,https://www.instagram.com/jaylenmahoney_/,
44
+ Christian McCaffrey,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/a8fka6shomakkbllljgt.jpg,https://www.instagram.com/christianmccaffrey/?hl=en,https://www.youtube.com/watch?v=cu78Okf6VSo
45
+ Jalen McKenzie,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/gffxpns1ayxyjccymr6d.jpg,https://www.instagram.com/jay_peez70/?hl=en,
46
+ Colton McKivitz,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jugvoxjabgsbcfbuqfew.jpg,https://www.instagram.com/cmckivitz53/?hl=en,
47
+ Jake Moody,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ygputwsbutemszr8xxkw.jpg,https://www.instagram.com/jmoods_/?hl=en,
48
+ Tanner Mordecai,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/y8gipodnkeapgmegnxs1.png,https://www.instagram.com/t_mordecai/?hl=en,
49
+ Malik Mustapha,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/eyrgxgpbrycd9x8glk0j.png,https://www.instagram.com/stapha/,
50
+ Siran Neal,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/muhthfs6owkkpsyop1e6,https://www.instagram.com/siranneal/?hl=en,
51
+ Drake Nugent,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/qyb4kurtbv9uflmupfnc.png,https://www.instagram.com/drakenugent9/?hl=en,
52
+ George Odum,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/sqpxhoycdpegkyjn6ooc.jpg,https://www.instagram.com/george.w.odum/?hl=en,
53
+ Sam Okuayinonu,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/fyolr2zk2nplfbdze75l.jpg,https://www.instagram.com/sam.ok97/?hl=en,
54
+ Terique Owens,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/okhin0uwdon2nimvbtwd.png,https://www.instagram.com/terique_owens/?hl=en,
55
+ Ricky Pearsall,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/to7q7w4kjiajseb4ljcx.png,https://www.instagram.com/ricky.pearsall/?hl=en,
56
+ Jason Pinnock,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/on29awacb9frijyggtgt,https://www.instagram.com/jpinny15/?hl=en,
57
+ Austen Pleasants,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wsbs5emdyzuc1sudbcls.png,https://www.instagram.com/oursf49ers/p/DDr48a4PdcO/?hl=en,
58
+ Mason Pline,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/mvjlaxpu8bu33ohspqot.png,https://www.instagram.com/mpline12/?hl=en,
59
+ Dominick Puni,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/tq1snozjpjrgrjoflrfg.png,https://www.instagram.com/dompuni/?hl=en,
60
+ Brock Purdy,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wt42ykvuxpngm4m1axxn.png,https://www.instagram.com/brock.purdy13/?hl=en,https://www.youtube.com/watch?v=O-ft3FPYwiA
61
+ Curtis Robinson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/x3xyzgeapcafr0gicl5y.jpg,https://www.instagram.com/curtis_robinsonn/?hl=en,https://www.youtube.com/watch?v=8wyHHbXoFZI
62
+ Demarcus Robinson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/lakf0xue1qqb7ed4p6ge,https://www.instagram.com/demarcusrobinson/?hl=en,https://www.youtube.com/watch?v=1vwP8vs-mXI
63
+ Patrick Taylor Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/hochjncae0hqcoveuexq.jpg,https://www.instagram.com/patricktaylor/?hl=en,
64
+ Trent Taylor,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/j8lom4fnsveujt8hykef.jpg,https://www.instagram.com/trent5taylor/?hl=en,https://www.youtube.com/watch?v=kiEy31sL0co
65
+ Tre Tomlinson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/n5pfv126xw0psc0d1ydz,https://www.instagram.com/trevius/?hl=en,
66
+ Jake Tonges,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/la3z5y6u7tix6rnq2m5l.jpg,https://www.instagram.com/jaketonges/?hl=en,
67
+ Fred Warner,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/zo4ftfar4bshrbipceuk.jpg,https://www.instagram.com/fred_warner/?hl=en,https://www.youtube.com/watch?v=IwBlFktlNwY
68
+ Jon Weeks,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/d9fvm74pu4vyinveopbf,https://www.instagram.com/jonweeks46/?hl=en,https://www.youtube.com/watch?v=FO_iJ1IEOQU
69
+ DaShaun White,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/mjnpmkw3ar6zcj2hxxzd,https://www.instagram.com/demoeto/?hl=en,https://www.youtube.com/watch?v=mk4aHkdYaUQ
70
+ Trent Williams,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/bnq8i5urjualxre5caqz.jpg,https://www.instagram.com/trentwilliams71/?hl=en,https://www.youtube.com/watch?v=k7FDcmcawL0
71
+ Brayden Willis,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xmo7hsuho3ehmsjwvthc.jpg,https://www.instagram.com/brayden_willis/?hl=en,https://www.youtube.com/watch?v=3KNc8s3Xwos
72
+ Dee Winters,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ggf13riajo0kn0y6kbu0.jpg,https://www.instagram.com/dwints_/?hl=en,
73
+ Mitch Wishnowsky,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mkf1xr1x8nr9l55oq72a.jpg,https://www.instagram.com/mitchwish3/?hl=en,https://www.youtube.com/watch?v=ZkH6eWs5Yd8
74
+ Nick Zakelj,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/o92tva22zezdz4aksadl.jpg,https://www.instagram.com/nickzakelj/?hl=en,
data/april_11_multimedia_data_collect/new_team_highlights.csv ADDED
The diff for this file is too large to render. See raw diff
 
data/april_11_multimedia_data_collect/nfl-2024-san-francisco-49ers-with-results.csv ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Match Number,Round Number,Date,Location,Home Team,Away Team,Result,game_result
2
+ 1,1,10/09/2024 00:15,Levi's Stadium,San Francisco 49ers,New York Jets,32 - 19,Win
3
+ 28,2,15/09/2024 17:00,U.S. Bank Stadium,Minnesota Vikings,San Francisco 49ers,23 - 17,Loss
4
+ 38,3,22/09/2024 20:25,SoFi Stadium,Los Angeles Rams,San Francisco 49ers,27 - 24,Loss
5
+ 55,4,29/09/2024 20:05,Levi's Stadium,San Francisco 49ers,New England Patriots,30 - 13,Win
6
+ 70,5,06/10/2024 20:05,Levi's Stadium,San Francisco 49ers,Arizona Cardinals,23 - 24,Loss
7
+ 92,6,11/10/2024 00:15,Lumen Field,Seattle Seahawks,San Francisco 49ers,24 - 36,Win
8
+ 96,7,20/10/2024 20:25,Levi's Stadium,San Francisco 49ers,Kansas City Chiefs,18 - 28,Loss
9
+ 109,8,28/10/2024 00:20,Levi's Stadium,San Francisco 49ers,Dallas Cowboys,30 - 24,Win
10
+ 149,10,10/11/2024 18:00,Raymond James Stadium,Tampa Bay Buccaneers,San Francisco 49ers,20 - 23,Win
11
+ 158,11,17/11/2024 21:05,Levi's Stadium,San Francisco 49ers,Seattle Seahawks,17 - 20,Loss
12
+ 169,12,24/11/2024 21:25,Lambeau Field,Green Bay Packers,San Francisco 49ers,38 - 10,Loss
13
+ 181,13,02/12/2024 01:20,Highmark Stadium,Buffalo Bills,San Francisco 49ers,35 - 10,Loss
14
+ 199,14,08/12/2024 21:25,Levi's Stadium,San Francisco 49ers,Chicago Bears,38 - 13,Win
15
+ 224,15,13/12/2024 01:15,Levi's Stadium,San Francisco 49ers,Los Angeles Rams,6 - 12,Loss
16
+ 228,16,22/12/2024 21:25,Hard Rock Stadium,Miami Dolphins,San Francisco 49ers,29 - 17,Loss
17
+ 246,17,31/12/2024 01:15,Levi's Stadium,San Francisco 49ers,Detroit Lions,34 - 40,Loss
18
+ 257,18,05/01/2025 21:25,State Farm Stadium,Arizona Cardinals,San Francisco 49ers,47 - 24,Loss
data/april_11_multimedia_data_collect/nfl_team_logos.csv ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ team_name,logo_url,local_path
2
+ "Arizona Cardinals News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/ARI,"team_logos/arizona_cardinals_news,_scores,_stats,_schedule.png"
3
+ "Atlanta Falcons News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/ATL,"team_logos/atlanta_falcons_news,_scores,_stats,_schedule.png"
4
+ "Carolina Panthers News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/CAR,"team_logos/carolina_panthers_news,_scores,_stats,_schedule.png"
5
+ "Chicago Bears News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/CHI,"team_logos/chicago_bears_news,_scores,_stats,_schedule.png"
6
+ "Dallas Cowboys News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/DAL,"team_logos/dallas_cowboys_news,_scores,_stats,_schedule.png"
7
+ "Detroit Lions News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/DET,"team_logos/detroit_lions_news,_scores,_stats,_schedule.png"
8
+ "Green Bay Packers News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/GB,"team_logos/green_bay_packers_news,_scores,_stats,_schedule.png"
9
+ "Los Angeles Rams News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/LA,"team_logos/los_angeles_rams_news,_scores,_stats,_schedule.png"
10
+ "Minnesota Vikings News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/MIN,"team_logos/minnesota_vikings_news,_scores,_stats,_schedule.png"
11
+ "New Orleans Saints News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/NO,"team_logos/new_orleans_saints_news,_scores,_stats,_schedule.png"
12
+ "New York Giants News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/NYG,"team_logos/new_york_giants_news,_scores,_stats,_schedule.png"
13
+ "Philadelphia Eagles News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/PHI,"team_logos/philadelphia_eagles_news,_scores,_stats,_schedule.png"
14
+ "San Francisco 49ers News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/SF,"team_logos/san_francisco_49ers_news,_scores,_stats,_schedule.png"
15
+ "Seattle Seahawks News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/SEA,"team_logos/seattle_seahawks_news,_scores,_stats,_schedule.png"
16
+ "Tampa Bay Buccaneers News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/TB,"team_logos/tampa_bay_buccaneers_news,_scores,_stats,_schedule.png"
17
+ "Washington Commanders News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/WAS,"team_logos/washington_commanders_news,_scores,_stats,_schedule.png"
18
+ "Baltimore Ravens News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/BAL,"team_logos/baltimore_ravens_news,_scores,_stats,_schedule.png"
19
+ "Buffalo Bills News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/BUF,"team_logos/buffalo_bills_news,_scores,_stats,_schedule.png"
20
+ "Cincinnati Bengals News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/CIN,"team_logos/cincinnati_bengals_news,_scores,_stats,_schedule.png"
21
+ "Cleveland Browns News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/CLE,"team_logos/cleveland_browns_news,_scores,_stats,_schedule.png"
22
+ "Denver Broncos News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/DEN,"team_logos/denver_broncos_news,_scores,_stats,_schedule.png"
23
+ "Jacksonville Jaguars News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/JAX,"team_logos/jacksonville_jaguars_news,_scores,_stats,_schedule.png"
24
+ "Kansas City Chiefs News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/KC,"team_logos/kansas_city_chiefs_news,_scores,_stats,_schedule.png"
25
+ "Las Vegas Raiders News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/LV,"team_logos/las_vegas_raiders_news,_scores,_stats,_schedule.png"
26
+ "Los Angeles Chargers News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/LAC,"team_logos/los_angeles_chargers_news,_scores,_stats,_schedule.png"
27
+ "Miami Dolphins News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/MIA,"team_logos/miami_dolphins_news,_scores,_stats,_schedule.png"
28
+ "New England Patriots News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/NE,"team_logos/new_england_patriots_news,_scores,_stats,_schedule.png"
29
+ "New York Jets News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/NYJ,"team_logos/new_york_jets_news,_scores,_stats,_schedule.png"
30
+ "Pittsburgh Steelers News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/PIT,"team_logos/pittsburgh_steelers_news,_scores,_stats,_schedule.png"
31
+ "Tennessee Titans News, Scores, Stats, Schedule",https://static.www.nfl.com/t_headshot_desktop/league/api/clubs/logos/TEN,"team_logos/tennessee_titans_news,_scores,_stats,_schedule.png"
32
+ Arizona Cardinals,https://a.espncdn.com/i/teamlogos/nfl/500/ari.png,team_logos/arizona_cardinals.png
33
+ Atlanta Falcons,https://a.espncdn.com/i/teamlogos/nfl/500/atl.png,team_logos/atlanta_falcons.png
34
+ Baltimore Ravens,https://a.espncdn.com/i/teamlogos/nfl/500/bal.png,team_logos/baltimore_ravens.png
35
+ Buffalo Bills,https://a.espncdn.com/i/teamlogos/nfl/500/buf.png,team_logos/buffalo_bills.png
36
+ Carolina Panthers,https://a.espncdn.com/i/teamlogos/nfl/500/car.png,team_logos/carolina_panthers.png
37
+ Chicago Bears,https://a.espncdn.com/i/teamlogos/nfl/500/chi.png,team_logos/chicago_bears.png
38
+ Cincinnati Bengals,https://a.espncdn.com/i/teamlogos/nfl/500/cin.png,team_logos/cincinnati_bengals.png
39
+ Cleveland Browns,https://a.espncdn.com/i/teamlogos/nfl/500/cle.png,team_logos/cleveland_browns.png
40
+ Dallas Cowboys,https://a.espncdn.com/i/teamlogos/nfl/500/dal.png,team_logos/dallas_cowboys.png
41
+ Denver Broncos,https://a.espncdn.com/i/teamlogos/nfl/500/den.png,team_logos/denver_broncos.png
42
+ Detroit Lions,https://a.espncdn.com/i/teamlogos/nfl/500/det.png,team_logos/detroit_lions.png
43
+ Green Bay Packers,https://a.espncdn.com/i/teamlogos/nfl/500/gb.png,team_logos/green_bay_packers.png
44
+ Houston Texans,https://a.espncdn.com/i/teamlogos/nfl/500/hou.png,team_logos/houston_texans.png
45
+ Indianapolis Colts,https://a.espncdn.com/i/teamlogos/nfl/500/ind.png,team_logos/indianapolis_colts.png
46
+ Jacksonville Jaguars,https://a.espncdn.com/i/teamlogos/nfl/500/jax.png,team_logos/jacksonville_jaguars.png
47
+ Kansas City Chiefs,https://a.espncdn.com/i/teamlogos/nfl/500/kc.png,team_logos/kansas_city_chiefs.png
48
+ Las Vegas Raiders,https://a.espncdn.com/i/teamlogos/nfl/500/lv.png,team_logos/las_vegas_raiders.png
49
+ Los Angeles Chargers,https://a.espncdn.com/i/teamlogos/nfl/500/lac.png,team_logos/los_angeles_chargers.png
50
+ Los Angeles Rams,https://a.espncdn.com/i/teamlogos/nfl/500/lar.png,team_logos/los_angeles_rams.png
51
+ Miami Dolphins,https://a.espncdn.com/i/teamlogos/nfl/500/mia.png,team_logos/miami_dolphins.png
52
+ Minnesota Vikings,https://a.espncdn.com/i/teamlogos/nfl/500/min.png,team_logos/minnesota_vikings.png
53
+ New England Patriots,https://a.espncdn.com/i/teamlogos/nfl/500/ne.png,team_logos/new_england_patriots.png
54
+ New Orleans Saints,https://a.espncdn.com/i/teamlogos/nfl/500/no.png,team_logos/new_orleans_saints.png
55
+ New York Giants,https://a.espncdn.com/i/teamlogos/nfl/500/nyg.png,team_logos/new_york_giants.png
56
+ New York Jets,https://a.espncdn.com/i/teamlogos/nfl/500/nyj.png,team_logos/new_york_jets.png
57
+ Philadelphia Eagles,https://a.espncdn.com/i/teamlogos/nfl/500/phi.png,team_logos/philadelphia_eagles.png
58
+ Pittsburgh Steelers,https://a.espncdn.com/i/teamlogos/nfl/500/pit.png,team_logos/pittsburgh_steelers.png
59
+ San Francisco 49ers,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,team_logos/san_francisco_49ers.png
60
+ Seattle Seahawks,https://a.espncdn.com/i/teamlogos/nfl/500/sea.png,team_logos/seattle_seahawks.png
61
+ Tampa Bay Buccaneers,https://a.espncdn.com/i/teamlogos/nfl/500/tb.png,team_logos/tampa_bay_buccaneers.png
62
+ Tennessee Titans,https://a.espncdn.com/i/teamlogos/nfl/500/ten.png,team_logos/tennessee_titans.png
63
+ Washington Commanders,https://a.espncdn.com/i/teamlogos/nfl/500/wsh.png,team_logos/washington_commanders.png
data/april_11_multimedia_data_collect/nfl_team_logos_revised.csv ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ team_name,logo_url,local_path
2
+ Arizona Cardinals,https://a.espncdn.com/i/teamlogos/nfl/500/ari.png,team_logos/arizona_cardinals.png
3
+ Atlanta Falcons,https://a.espncdn.com/i/teamlogos/nfl/500/atl.png,team_logos/atlanta_falcons.png
4
+ Baltimore Ravens,https://a.espncdn.com/i/teamlogos/nfl/500/bal.png,team_logos/baltimore_ravens.png
5
+ Buffalo Bills,https://a.espncdn.com/i/teamlogos/nfl/500/buf.png,team_logos/buffalo_bills.png
6
+ Carolina Panthers,https://a.espncdn.com/i/teamlogos/nfl/500/car.png,team_logos/carolina_panthers.png
7
+ Chicago Bears,https://a.espncdn.com/i/teamlogos/nfl/500/chi.png,team_logos/chicago_bears.png
8
+ Cincinnati Bengals,https://a.espncdn.com/i/teamlogos/nfl/500/cin.png,team_logos/cincinnati_bengals.png
9
+ Cleveland Browns,https://a.espncdn.com/i/teamlogos/nfl/500/cle.png,team_logos/cleveland_browns.png
10
+ Dallas Cowboys,https://a.espncdn.com/i/teamlogos/nfl/500/dal.png,team_logos/dallas_cowboys.png
11
+ Denver Broncos,https://a.espncdn.com/i/teamlogos/nfl/500/den.png,team_logos/denver_broncos.png
12
+ Detroit Lions,https://a.espncdn.com/i/teamlogos/nfl/500/det.png,team_logos/detroit_lions.png
13
+ Green Bay Packers,https://a.espncdn.com/i/teamlogos/nfl/500/gb.png,team_logos/green_bay_packers.png
14
+ Houston Texans,https://a.espncdn.com/i/teamlogos/nfl/500/hou.png,team_logos/houston_texans.png
15
+ Indianapolis Colts,https://a.espncdn.com/i/teamlogos/nfl/500/ind.png,team_logos/indianapolis_colts.png
16
+ Jacksonville Jaguars,https://a.espncdn.com/i/teamlogos/nfl/500/jax.png,team_logos/jacksonville_jaguars.png
17
+ Kansas City Chiefs,https://a.espncdn.com/i/teamlogos/nfl/500/kc.png,team_logos/kansas_city_chiefs.png
18
+ Las Vegas Raiders,https://a.espncdn.com/i/teamlogos/nfl/500/lv.png,team_logos/las_vegas_raiders.png
19
+ Los Angeles Chargers,https://a.espncdn.com/i/teamlogos/nfl/500/lac.png,team_logos/los_angeles_chargers.png
20
+ Los Angeles Rams,https://a.espncdn.com/i/teamlogos/nfl/500/lar.png,team_logos/los_angeles_rams.png
21
+ Miami Dolphins,https://a.espncdn.com/i/teamlogos/nfl/500/mia.png,team_logos/miami_dolphins.png
22
+ Minnesota Vikings,https://a.espncdn.com/i/teamlogos/nfl/500/min.png,team_logos/minnesota_vikings.png
23
+ New England Patriots,https://a.espncdn.com/i/teamlogos/nfl/500/ne.png,team_logos/new_england_patriots.png
24
+ New Orleans Saints,https://a.espncdn.com/i/teamlogos/nfl/500/no.png,team_logos/new_orleans_saints.png
25
+ New York Giants,https://a.espncdn.com/i/teamlogos/nfl/500/nyg.png,team_logos/new_york_giants.png
26
+ New York Jets,https://a.espncdn.com/i/teamlogos/nfl/500/nyj.png,team_logos/new_york_jets.png
27
+ Philadelphia Eagles,https://a.espncdn.com/i/teamlogos/nfl/500/phi.png,team_logos/philadelphia_eagles.png
28
+ Pittsburgh Steelers,https://a.espncdn.com/i/teamlogos/nfl/500/pit.png,team_logos/pittsburgh_steelers.png
29
+ San Francisco 49ers,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,team_logos/san_francisco_49ers.png
30
+ Seattle Seahawks,https://a.espncdn.com/i/teamlogos/nfl/500/sea.png,team_logos/seattle_seahawks.png
31
+ Tampa Bay Buccaneers,https://a.espncdn.com/i/teamlogos/nfl/500/tb.png,team_logos/tampa_bay_buccaneers.png
32
+ Tennessee Titans,https://a.espncdn.com/i/teamlogos/nfl/500/ten.png,team_logos/tennessee_titans.png
33
+ Washington Commanders,https://a.espncdn.com/i/teamlogos/nfl/500/wsh.png,team_logos/washington_commanders.png
data/april_11_multimedia_data_collect/niners_players_headshots.csv ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name,headshot_url
2
+ Israel Abanikanda,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wo7d9oli06eki4mnh3i8.png
3
+ Brandon Aiyuk,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/khwofxjjwx0hcaigzxhw.png
4
+ Isaac Alarcon,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mlhuuxukyusodzlfsmnv.jpg
5
+ Evan Anderson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/ng7oamywxvqgkx6l6kqc.png
6
+ Tre Avery,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/a7kfv7xjftqlaqghk6sg
7
+ Alex Barrett,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/bm0ay22de39d1enrxwiq.jpg
8
+ Ben Bartch,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/aqaslodzr7y0yvh5zzxa.jpg
9
+ Robert Beal Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jwwhmt5d8mi0vdb8nfic.jpg
10
+ Tatum Bethune,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/vl08pinqpmoubdf0zy5s.png
11
+ Nick Bosa,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/utiwswqvpkiwtocijwhz.jpg
12
+ Jake Brendel,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/svsb41aekpzt3m9snilw.jpg
13
+ Ji'Ayir Brown,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/urillpic02z774n09xvf.jpg
14
+ Tre Brown,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/dpemqrrweakt8dci3qfb
15
+ Spencer Burford,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/lje3ae25dntkdudp6eex.jpg
16
+ Jacob Cowing,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/lg7aao0umc21oioufqdx.png
17
+ Kalia Davis,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/rmnxj3sh7pyldmcxqe32.jpg
18
+ Jordan Elliott,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xbyky8r2yuzusd2tmrw8.jpg
19
+ Luke Farrell,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/f2z7wpmx7ngtxcqqedla
20
+ Russell Gage Jr.,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/lkqhshv0dss1b9c6mdnj
21
+ Jonathan Garvin,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/rapfcxut6vu50vcevswe.png
22
+ Luke Gifford,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/mhdbbzj8amttnpd1nbpn
23
+ Kevin Givens,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mstmgft0e0ancdzspboy.jpg
24
+ Jalen Graham,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/pbl2a1ujopvwqrfct0jp.jpg
25
+ Richie Grant,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/szeswtvt6jmbu3so3phd
26
+ Renardo Green,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/v79obx9v7tgcjjlo6hiy.png
27
+ Yetur Gross-Matos,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/etuaajmvhbc5qkebgoow.jpg
28
+ Isaac Guerendo,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/b66rpzr9iauo5rdprvka.png
29
+ Sebastian Gutierrez,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/am9sywgkga6jq65hvboe.jpg
30
+ Matt Hennessy,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/zk8b21o8ncxnyu0gyf23
31
+ Isaiah Hodgins,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ax1oft9kqida0eokvtes.jpg
32
+ Drake Jackson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/y2luyplzpvbzokyfbmla.jpg
33
+ Tarron Jackson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/pnqrjp76bgpkmacxma3r
34
+ Jauan Jennings,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/wxsq7f4ajmhfs6tn4dg2.jpg
35
+ Quindell Johnson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/uga90lawcfxjcqna7opb
36
+ Zack Johnson,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/n4hy8uzhcl5cl0ricwoa
37
+ Mac Jones,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/pedpdxybeus7mrovsoko
38
+ Kyle Juszczyk,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ywdz6y2pfzndqgmxxfbj.jpg
39
+ George Kittle,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/elheepobwn1ahqwtfwat.jpg
40
+ Deommodore Lenoir,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/f9fnuvbpcxku9ibt9qs8.jpg
41
+ Chase Lucas,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/gjeejt5pbagnipodhdz4.jpg
42
+ Darrell Luter Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/g5rohvooet9g5w7rlhrh.jpg
43
+ Jaylen Mahoney,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/yv9inbia05nyxppuajv0.png
44
+ Christian McCaffrey,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/a8fka6shomakkbllljgt.jpg
45
+ Jalen McKenzie,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/gffxpns1ayxyjccymr6d.jpg
46
+ Colton McKivitz,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jugvoxjabgsbcfbuqfew.jpg
47
+ Jake Moody,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ygputwsbutemszr8xxkw.jpg
48
+ Tanner Mordecai,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/y8gipodnkeapgmegnxs1.png
49
+ Malik Mustapha,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/eyrgxgpbrycd9x8glk0j.png
50
+ Siran Neal,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/muhthfs6owkkpsyop1e6
51
+ Drake Nugent,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/qyb4kurtbv9uflmupfnc.png
52
+ George Odum,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/sqpxhoycdpegkyjn6ooc.jpg
53
+ Sam Okuayinonu,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/fyolr2zk2nplfbdze75l.jpg
54
+ Terique Owens,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/okhin0uwdon2nimvbtwd.png
55
+ Ricky Pearsall,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/to7q7w4kjiajseb4ljcx.png
56
+ Jason Pinnock,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/on29awacb9frijyggtgt
57
+ Austen Pleasants,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wsbs5emdyzuc1sudbcls.png
58
+ Mason Pline,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/mvjlaxpu8bu33ohspqot.png
59
+ Dominick Puni,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/tq1snozjpjrgrjoflrfg.png
60
+ Brock Purdy,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wt42ykvuxpngm4m1axxn.png
61
+ Curtis Robinson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/x3xyzgeapcafr0gicl5y.jpg
62
+ Demarcus Robinson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/lakf0xue1qqb7ed4p6ge
63
+ Patrick Taylor Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/hochjncae0hqcoveuexq.jpg
64
+ Trent Taylor,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/j8lom4fnsveujt8hykef.jpg
65
+ Tre Tomlinson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/n5pfv126xw0psc0d1ydz
66
+ Jake Tonges,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/la3z5y6u7tix6rnq2m5l.jpg
67
+ Fred Warner,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/zo4ftfar4bshrbipceuk.jpg
68
+ Jon Weeks,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/d9fvm74pu4vyinveopbf
69
+ DaShaun White,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/mjnpmkw3ar6zcj2hxxzd
70
+ Trent Williams,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/bnq8i5urjualxre5caqz.jpg
71
+ Brayden Willis,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xmo7hsuho3ehmsjwvthc.jpg
72
+ Dee Winters,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ggf13riajo0kn0y6kbu0.jpg
73
+ Mitch Wishnowsky,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mkf1xr1x8nr9l55oq72a.jpg
74
+ Nick Zakelj,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/o92tva22zezdz4aksadl.jpg
data/april_11_multimedia_data_collect/niners_players_headshots_with_socials_merged.csv ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name,headshot_url,instagram_url,
2
+ Israel Abanikanda,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wo7d9oli06eki4mnh3i8.png,https://www.instagram.com/izzygetsbusy__/?hl=en,
3
+ Brandon Aiyuk,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/khwofxjjwx0hcaigzxhw.png,https://www.instagram.com/brandonaiyuk/?hl=en,
4
+ Isaac Alarcon,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mlhuuxukyusodzlfsmnv.jpg,https://www.instagram.com/isaac_algar/?hl=en,
5
+ Evan Anderson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/ng7oamywxvqgkx6l6kqc.png,https://www.instagram.com/klamps8/?hl=en,
6
+ Tre Avery,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/a7kfv7xjftqlaqghk6sg,https://www.instagram.com/t.avery21/?hl=en,
7
+ Alex Barrett,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/bm0ay22de39d1enrxwiq.jpg,https://www.instagram.com/alex.barrett/?hl=en,
8
+ Ben Bartch,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/aqaslodzr7y0yvh5zzxa.jpg,https://www.instagram.com/bartchben/,
9
+ Robert Beal Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jwwhmt5d8mi0vdb8nfic.jpg,https://www.instagram.com/oursf49ers/reel/C_CVQxxp2ti/,
10
+ Tatum Bethune,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/vl08pinqpmoubdf0zy5s.png,https://www.instagram.com/tatumx15/?hl=en,
11
+ Nick Bosa,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/utiwswqvpkiwtocijwhz.jpg,https://www.instagram.com/nbsmallerbear/?hl=en,
12
+ Jake Brendel,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/svsb41aekpzt3m9snilw.jpg,https://www.instagram.com/jake.brendel/?hl=en,
13
+ Ji'Ayir Brown,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/urillpic02z774n09xvf.jpg,https://www.instagram.com/_tiig/?hl=en,
14
+ Tre Brown,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/dpemqrrweakt8dci3qfb,https://www.instagram.com/tre_brown25/?hl=en,
15
+ Spencer Burford,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/lje3ae25dntkdudp6eex.jpg,https://www.instagram.com/spence__74/?hl=en,
16
+ Jacob Cowing,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/lg7aao0umc21oioufqdx.png,https://www.instagram.com/jaycowing_/?hl=en,
17
+ Kalia Davis,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/rmnxj3sh7pyldmcxqe32.jpg,https://www.instagram.com/ucf.football/p/C3No6rTugDe/,
18
+ Jordan Elliott,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xbyky8r2yuzusd2tmrw8.jpg,https://www.instagram.com/jordanelliott_nbcs/,
19
+ Luke Farrell,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/f2z7wpmx7ngtxcqqedla,https://www.instagram.com/lukefarrell89/?hl=en,
20
+ Russell Gage Jr.,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/lkqhshv0dss1b9c6mdnj,https://www.instagram.com/w8k3mupruss/?hl=en,
21
+ Jonathan Garvin,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/rapfcxut6vu50vcevswe.png,https://www.instagram.com/thesfniners/p/DCmgF8KSw2A/?hl=en,
22
+ Luke Gifford,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/mhdbbzj8amttnpd1nbpn,https://www.instagram.com/luke_gifford/?hl=en,
23
+ Kevin Givens,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mstmgft0e0ancdzspboy.jpg,https://www.instagram.com/49ers/p/DAg_Pvpz1vV/,
24
+ Jalen Graham,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/pbl2a1ujopvwqrfct0jp.jpg,https://www.instagram.com/thexniners/p/CruR8IPrSV7/,
25
+ Richie Grant,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/szeswtvt6jmbu3so3phd,https://www.instagram.com/richiegrant_/?hl=en,
26
+ Renardo Green,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/v79obx9v7tgcjjlo6hiy.png,https://www.instagram.com/dondada.8/?hl=en,
27
+ Yetur Gross-Matos,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/etuaajmvhbc5qkebgoow.jpg,https://www.instagram.com/__lobo99/?hl=en,
28
+ Isaac Guerendo,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/b66rpzr9iauo5rdprvka.png,https://www.instagram.com/isaac_guerendo/?hl=en,
29
+ Sebastian Gutierrez,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/am9sywgkga6jq65hvboe.jpg,https://www.instagram.com/sebastiandev1/?hl=en,
30
+ Matt Hennessy,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/zk8b21o8ncxnyu0gyf23,https://www.instagram.com/matt___hennessy/?hl=en,
31
+ Isaiah Hodgins,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ax1oft9kqida0eokvtes.jpg,https://www.instagram.com/isaiahhodgins/?hl=en,
32
+ Drake Jackson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/y2luyplzpvbzokyfbmla.jpg,https://www.instagram.com/thefreak/?hl=en,
33
+ Tarron Jackson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/pnqrjp76bgpkmacxma3r,https://www.instagram.com/tarron_jackson/?hl=en,
34
+ Jauan Jennings,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/wxsq7f4ajmhfs6tn4dg2.jpg,https://www.instagram.com/u_aintjj/?hl=en,
35
+ Quindell Johnson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/uga90lawcfxjcqna7opb,https://www.instagram.com/p/DFGnwNlymc9/,
36
+ Zack Johnson,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/n4hy8uzhcl5cl0ricwoa,https://www.instagram.com/zack.johnson.68/,
37
+ Mac Jones,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/pedpdxybeus7mrovsoko,https://www.instagram.com/macjones_10/?hl=en,
38
+ Kyle Juszczyk,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ywdz6y2pfzndqgmxxfbj.jpg,https://www.instagram.com/juicecheck44/?hl=en,
39
+ George Kittle,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/elheepobwn1ahqwtfwat.jpg,https://www.instagram.com/gkittle/?hl=en,
40
+ Deommodore Lenoir,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/f9fnuvbpcxku9ibt9qs8.jpg,https://www.instagram.com/deommo.lenoir/?hl=en,
41
+ Chase Lucas,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/gjeejt5pbagnipodhdz4.jpg,https://www.instagram.com/chase_lucas24/?hl=en,
42
+ Darrell Luter Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/g5rohvooet9g5w7rlhrh.jpg,https://www.instagram.com/_d.ray4k/?hl=en,
43
+ Jaylen Mahoney,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/yv9inbia05nyxppuajv0.png,https://www.instagram.com/jaylenmahoney_/,
44
+ Christian McCaffrey,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/a8fka6shomakkbllljgt.jpg,https://www.instagram.com/christianmccaffrey/?hl=en,
45
+ Jalen McKenzie,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/gffxpns1ayxyjccymr6d.jpg,https://www.instagram.com/jay_peez70/?hl=en,
46
+ Colton McKivitz,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jugvoxjabgsbcfbuqfew.jpg,https://www.instagram.com/cmckivitz53/?hl=en,
47
+ Jake Moody,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ygputwsbutemszr8xxkw.jpg,https://www.instagram.com/jmoods_/?hl=en,
48
+ Tanner Mordecai,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/y8gipodnkeapgmegnxs1.png,https://www.instagram.com/t_mordecai/?hl=en,
49
+ Malik Mustapha,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/eyrgxgpbrycd9x8glk0j.png,https://www.instagram.com/stapha/,
50
+ Siran Neal,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/muhthfs6owkkpsyop1e6,https://www.instagram.com/siranneal/?hl=en,
51
+ Drake Nugent,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/qyb4kurtbv9uflmupfnc.png,https://www.instagram.com/drakenugent9/?hl=en,
52
+ George Odum,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/sqpxhoycdpegkyjn6ooc.jpg,https://www.instagram.com/george.w.odum/?hl=en,
53
+ Sam Okuayinonu,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/fyolr2zk2nplfbdze75l.jpg,https://www.instagram.com/sam.ok97/?hl=en,
54
+ Terique Owens,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/okhin0uwdon2nimvbtwd.png,https://www.instagram.com/terique_owens/?hl=en,
55
+ Ricky Pearsall,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/to7q7w4kjiajseb4ljcx.png,https://www.instagram.com/ricky.pearsall/?hl=en,
56
+ Jason Pinnock,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/on29awacb9frijyggtgt,https://www.instagram.com/jpinny15/?hl=en,
57
+ Austen Pleasants,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wsbs5emdyzuc1sudbcls.png,https://www.instagram.com/oursf49ers/p/DDr48a4PdcO/?hl=en,
58
+ Mason Pline,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/mvjlaxpu8bu33ohspqot.png,https://www.instagram.com/mpline12/?hl=en,
59
+ Dominick Puni,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/tq1snozjpjrgrjoflrfg.png,https://www.instagram.com/dompuni/?hl=en,
60
+ Brock Purdy,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wt42ykvuxpngm4m1axxn.png,https://www.instagram.com/brock.purdy13/?hl=en,
61
+ Curtis Robinson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/x3xyzgeapcafr0gicl5y.jpg,https://www.instagram.com/curtis_robinsonn/?hl=en,
62
+ Demarcus Robinson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/lakf0xue1qqb7ed4p6ge,https://www.instagram.com/demarcusrobinson/?hl=en,
63
+ Patrick Taylor Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/hochjncae0hqcoveuexq.jpg,https://www.instagram.com/patricktaylor/?hl=en,
64
+ Trent Taylor,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/j8lom4fnsveujt8hykef.jpg,https://www.instagram.com/trent5taylor/?hl=en,
65
+ Tre Tomlinson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/n5pfv126xw0psc0d1ydz,https://www.instagram.com/trevius/?hl=en,
66
+ Jake Tonges,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/la3z5y6u7tix6rnq2m5l.jpg,https://www.instagram.com/jaketonges/?hl=en,
67
+ Fred Warner,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/zo4ftfar4bshrbipceuk.jpg,https://www.instagram.com/fred_warner/?hl=en,
68
+ Jon Weeks,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/d9fvm74pu4vyinveopbf,https://www.instagram.com/jonweeks46/?hl=en,
69
+ DaShaun White,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/mjnpmkw3ar6zcj2hxxzd,https://www.instagram.com/demoeto/?hl=en,
70
+ Trent Williams,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/bnq8i5urjualxre5caqz.jpg,https://www.instagram.com/trentwilliams71/?hl=en,
71
+ Brayden Willis,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xmo7hsuho3ehmsjwvthc.jpg,https://www.instagram.com/brayden_willis/?hl=en,
72
+ Dee Winters,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ggf13riajo0kn0y6kbu0.jpg,https://www.instagram.com/dwints_/?hl=en,
73
+ Mitch Wishnowsky,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mkf1xr1x8nr9l55oq72a.jpg,https://www.instagram.com/mitchwish3/?hl=en,
74
+ Nick Zakelj,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/o92tva22zezdz4aksadl.jpg,https://www.instagram.com/nickzakelj/?hl=en,
data/april_11_multimedia_data_collect/niners_players_with_highlights.csv ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ name,headshot_url,instagram_url,highlight_video_url
2
+ Israel Abanikanda,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wo7d9oli06eki4mnh3i8.png,https://www.instagram.com/izzygetsbusy__/?hl=en,
3
+ Brandon Aiyuk,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/khwofxjjwx0hcaigzxhw.png,https://www.instagram.com/brandonaiyuk/?hl=en,https://www.youtube.com/watch?v=TlAgJDpoOYk
4
+ Isaac Alarcon,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mlhuuxukyusodzlfsmnv.jpg,https://www.instagram.com/isaac_algar/?hl=en,
5
+ Evan Anderson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/ng7oamywxvqgkx6l6kqc.png,https://www.instagram.com/klamps8/?hl=en,
6
+ Tre Avery,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/a7kfv7xjftqlaqghk6sg,https://www.instagram.com/t.avery21/?hl=en,
7
+ Alex Barrett,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/bm0ay22de39d1enrxwiq.jpg,https://www.instagram.com/alex.barrett/?hl=en,
8
+ Ben Bartch,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/aqaslodzr7y0yvh5zzxa.jpg,https://www.instagram.com/bartchben/,
9
+ Robert Beal Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jwwhmt5d8mi0vdb8nfic.jpg,https://www.instagram.com/oursf49ers/reel/C_CVQxxp2ti/,
10
+ Tatum Bethune,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/vl08pinqpmoubdf0zy5s.png,https://www.instagram.com/tatumx15/?hl=en,
11
+ Nick Bosa,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/utiwswqvpkiwtocijwhz.jpg,https://www.instagram.com/nbsmallerbear/?hl=en,https://www.youtube.com/watch?v=URvcwUEQYMw
12
+ Jake Brendel,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/svsb41aekpzt3m9snilw.jpg,https://www.instagram.com/jake.brendel/?hl=en,
13
+ Ji'Ayir Brown,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/urillpic02z774n09xvf.jpg,https://www.instagram.com/_tiig/?hl=en,
14
+ Tre Brown,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/dpemqrrweakt8dci3qfb,https://www.instagram.com/tre_brown25/?hl=en,
15
+ Spencer Burford,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/lje3ae25dntkdudp6eex.jpg,https://www.instagram.com/spence__74/?hl=en,
16
+ Jacob Cowing,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/lg7aao0umc21oioufqdx.png,https://www.instagram.com/jaycowing_/?hl=en,
17
+ Kalia Davis,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/rmnxj3sh7pyldmcxqe32.jpg,https://www.instagram.com/ucf.football/p/C3No6rTugDe/,https://www.youtube.com/watch?v=xE4jfmV7kGg
18
+ Jordan Elliott,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xbyky8r2yuzusd2tmrw8.jpg,https://www.instagram.com/jordanelliott_nbcs/,
19
+ Luke Farrell,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/f2z7wpmx7ngtxcqqedla,https://www.instagram.com/lukefarrell89/?hl=en,
20
+ Russell Gage Jr.,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/lkqhshv0dss1b9c6mdnj,https://www.instagram.com/w8k3mupruss/?hl=en,
21
+ Jonathan Garvin,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/rapfcxut6vu50vcevswe.png,https://www.instagram.com/thesfniners/p/DCmgF8KSw2A/?hl=en,
22
+ Luke Gifford,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/mhdbbzj8amttnpd1nbpn,https://www.instagram.com/luke_gifford/?hl=en,
23
+ Kevin Givens,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mstmgft0e0ancdzspboy.jpg,https://www.instagram.com/49ers/p/DAg_Pvpz1vV/,
24
+ Jalen Graham,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/pbl2a1ujopvwqrfct0jp.jpg,https://www.instagram.com/thexniners/p/CruR8IPrSV7/,
25
+ Richie Grant,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/szeswtvt6jmbu3so3phd,https://www.instagram.com/richiegrant_/?hl=en,
26
+ Renardo Green,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/v79obx9v7tgcjjlo6hiy.png,https://www.instagram.com/dondada.8/?hl=en,https://www.youtube.com/watch?v=iIooO2pTjt4
27
+ Yetur Gross-Matos,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/etuaajmvhbc5qkebgoow.jpg,https://www.instagram.com/__lobo99/?hl=en,
28
+ Isaac Guerendo,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/b66rpzr9iauo5rdprvka.png,https://www.instagram.com/isaac_guerendo/?hl=en,
29
+ Sebastian Gutierrez,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/am9sywgkga6jq65hvboe.jpg,https://www.instagram.com/sebastiandev1/?hl=en,
30
+ Matt Hennessy,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/zk8b21o8ncxnyu0gyf23,https://www.instagram.com/matt___hennessy/?hl=en,
31
+ Isaiah Hodgins,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ax1oft9kqida0eokvtes.jpg,https://www.instagram.com/isaiahhodgins/?hl=en,
32
+ Drake Jackson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/y2luyplzpvbzokyfbmla.jpg,https://www.instagram.com/thefreak/?hl=en,
33
+ Tarron Jackson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/pnqrjp76bgpkmacxma3r,https://www.instagram.com/tarron_jackson/?hl=en,
34
+ Jauan Jennings,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/wxsq7f4ajmhfs6tn4dg2.jpg,https://www.instagram.com/u_aintjj/?hl=en,https://www.youtube.com/watch?v=kFkNlmUQVu0
35
+ Quindell Johnson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/uga90lawcfxjcqna7opb,https://www.instagram.com/p/DFGnwNlymc9/,https://www.youtube.com/watch?v=VU2gRl8rgqw
36
+ Zack Johnson,https://static.www.nfl.com/image/private/t_thumb_squared_2x/f_auto/league/n4hy8uzhcl5cl0ricwoa,https://www.instagram.com/zack.johnson.68/,https://www.youtube.com/watch?v=yDAcyWJi6qQ
37
+ Mac Jones,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/pedpdxybeus7mrovsoko,https://www.instagram.com/macjones_10/?hl=en,https://www.youtube.com/watch?v=TylWJVa84VE
38
+ Kyle Juszczyk,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ywdz6y2pfzndqgmxxfbj.jpg,https://www.instagram.com/juicecheck44/?hl=en,https://www.youtube.com/watch?v=PZCVP0l8uVk
39
+ George Kittle,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/elheepobwn1ahqwtfwat.jpg,https://www.instagram.com/gkittle/?hl=en,https://www.youtube.com/watch?v=RzMVbATV95w
40
+ Deommodore Lenoir,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/f9fnuvbpcxku9ibt9qs8.jpg,https://www.instagram.com/deommo.lenoir/?hl=en,https://www.youtube.com/watch?v=h-uvula5tNo
41
+ Chase Lucas,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/gjeejt5pbagnipodhdz4.jpg,https://www.instagram.com/chase_lucas24/?hl=en,
42
+ Darrell Luter Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/g5rohvooet9g5w7rlhrh.jpg,https://www.instagram.com/_d.ray4k/?hl=en,
43
+ Jaylen Mahoney,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/yv9inbia05nyxppuajv0.png,https://www.instagram.com/jaylenmahoney_/,
44
+ Christian McCaffrey,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/a8fka6shomakkbllljgt.jpg,https://www.instagram.com/christianmccaffrey/?hl=en,https://www.youtube.com/watch?v=cu78Okf6VSo
45
+ Jalen McKenzie,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/gffxpns1ayxyjccymr6d.jpg,https://www.instagram.com/jay_peez70/?hl=en,
46
+ Colton McKivitz,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/jugvoxjabgsbcfbuqfew.jpg,https://www.instagram.com/cmckivitz53/?hl=en,
47
+ Jake Moody,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ygputwsbutemszr8xxkw.jpg,https://www.instagram.com/jmoods_/?hl=en,
48
+ Tanner Mordecai,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/y8gipodnkeapgmegnxs1.png,https://www.instagram.com/t_mordecai/?hl=en,
49
+ Malik Mustapha,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/eyrgxgpbrycd9x8glk0j.png,https://www.instagram.com/stapha/,
50
+ Siran Neal,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/muhthfs6owkkpsyop1e6,https://www.instagram.com/siranneal/?hl=en,
51
+ Drake Nugent,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/qyb4kurtbv9uflmupfnc.png,https://www.instagram.com/drakenugent9/?hl=en,
52
+ George Odum,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/sqpxhoycdpegkyjn6ooc.jpg,https://www.instagram.com/george.w.odum/?hl=en,
53
+ Sam Okuayinonu,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/fyolr2zk2nplfbdze75l.jpg,https://www.instagram.com/sam.ok97/?hl=en,
54
+ Terique Owens,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/okhin0uwdon2nimvbtwd.png,https://www.instagram.com/terique_owens/?hl=en,
55
+ Ricky Pearsall,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/to7q7w4kjiajseb4ljcx.png,https://www.instagram.com/ricky.pearsall/?hl=en,
56
+ Jason Pinnock,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/on29awacb9frijyggtgt,https://www.instagram.com/jpinny15/?hl=en,
57
+ Austen Pleasants,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wsbs5emdyzuc1sudbcls.png,https://www.instagram.com/oursf49ers/p/DDr48a4PdcO/?hl=en,
58
+ Mason Pline,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/mvjlaxpu8bu33ohspqot.png,https://www.instagram.com/mpline12/?hl=en,
59
+ Dominick Puni,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/tq1snozjpjrgrjoflrfg.png,https://www.instagram.com/dompuni/?hl=en,
60
+ Brock Purdy,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_png/49ers/wt42ykvuxpngm4m1axxn.png,https://www.instagram.com/brock.purdy13/?hl=en,https://www.youtube.com/watch?v=O-ft3FPYwiA
61
+ Curtis Robinson,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/x3xyzgeapcafr0gicl5y.jpg,https://www.instagram.com/curtis_robinsonn/?hl=en,https://www.youtube.com/watch?v=8wyHHbXoFZI
62
+ Demarcus Robinson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/lakf0xue1qqb7ed4p6ge,https://www.instagram.com/demarcusrobinson/?hl=en,https://www.youtube.com/watch?v=1vwP8vs-mXI
63
+ Patrick Taylor Jr.,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/hochjncae0hqcoveuexq.jpg,https://www.instagram.com/patricktaylor/?hl=en,
64
+ Trent Taylor,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/j8lom4fnsveujt8hykef.jpg,https://www.instagram.com/trent5taylor/?hl=en,https://www.youtube.com/watch?v=kiEy31sL0co
65
+ Tre Tomlinson,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/n5pfv126xw0psc0d1ydz,https://www.instagram.com/trevius/?hl=en,
66
+ Jake Tonges,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/la3z5y6u7tix6rnq2m5l.jpg,https://www.instagram.com/jaketonges/?hl=en,
67
+ Fred Warner,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/zo4ftfar4bshrbipceuk.jpg,https://www.instagram.com/fred_warner/?hl=en,https://www.youtube.com/watch?v=IwBlFktlNwY
68
+ Jon Weeks,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/d9fvm74pu4vyinveopbf,https://www.instagram.com/jonweeks46/?hl=en,https://www.youtube.com/watch?v=FO_iJ1IEOQU
69
+ DaShaun White,https://static.www.nfl.com/image/upload/t_thumb_squared_2x/f_auto/league/mjnpmkw3ar6zcj2hxxzd,https://www.instagram.com/demoeto/?hl=en,https://www.youtube.com/watch?v=mk4aHkdYaUQ
70
+ Trent Williams,https://static.clubs.nfl.com/image/private/t_thumb_squared_2x/f_auto/49ers/bnq8i5urjualxre5caqz.jpg,https://www.instagram.com/trentwilliams71/?hl=en,https://www.youtube.com/watch?v=k7FDcmcawL0
71
+ Brayden Willis,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/xmo7hsuho3ehmsjwvthc.jpg,https://www.instagram.com/brayden_willis/?hl=en,https://www.youtube.com/watch?v=3KNc8s3Xwos
72
+ Dee Winters,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/ggf13riajo0kn0y6kbu0.jpg,https://www.instagram.com/dwints_/?hl=en,
73
+ Mitch Wishnowsky,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/mkf1xr1x8nr9l55oq72a.jpg,https://www.instagram.com/mitchwish3/?hl=en,https://www.youtube.com/watch?v=ZkH6eWs5Yd8
74
+ Nick Zakelj,https://static.clubs.nfl.com/image/upload/t_thumb_squared_2x/f_auto/49ers/o92tva22zezdz4aksadl.jpg,https://www.instagram.com/nickzakelj/?hl=en,
data/april_11_multimedia_data_collect/player_headshots.py ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ from bs4 import BeautifulSoup
3
+ import csv
4
+
5
+ ROSTER_URL = "https://www.49ers.com/team/players-roster/"
6
+
7
+ def scrape_49ers_roster(output_csv='niners_players_headshots.csv'):
8
+ """
9
+ Scrapes the 49ers roster page for player data and saves to CSV.
10
+ Extracts:
11
+ - Name
12
+ - Headshot Image URL
13
+ """
14
+ response = requests.get(ROSTER_URL)
15
+ response.raise_for_status()
16
+ soup = BeautifulSoup(response.text, 'html.parser')
17
+
18
+ player_rows = soup.select('div.d3-o-table--horizontal-scroll tbody tr')
19
+ if not player_rows:
20
+ raise ValueError("No player rows found. The page structure may have changed.")
21
+
22
+ roster_data = []
23
+ for row in player_rows:
24
+ try:
25
+ # Extract player name and headshot
26
+ player_cell = row.find('td')
27
+ name_tag = player_cell.select_one('.nfl-o-roster__player-name')
28
+ name = name_tag.get_text(strip=True) if name_tag else ""
29
+
30
+ img_tag = player_cell.find('img')
31
+ headshot_url = img_tag['src'] if img_tag and img_tag.get('src') else ""
32
+
33
+ # Fix the URL by replacing t_lazy with t_thumb_squared_2x
34
+ if headshot_url:
35
+ headshot_url = headshot_url.replace('/t_thumb_squared/t_lazy/', '/t_thumb_squared_2x/')
36
+
37
+ # Other stats (in order of table columns)
38
+ # cells = row.find_all('td')
39
+ # jersey_number = cells[1].get_text(strip=True) if len(cells) > 1 else ""
40
+ # position = cells[2].get_text(strip=True) if len(cells) > 2 else ""
41
+ # height = cells[3].get_text(strip=True) if len(cells) > 3 else ""
42
+ # weight = cells[4].get_text(strip=True) if len(cells) > 4 else ""
43
+ # age = cells[5].get_text(strip=True) if len(cells) > 5 else ""
44
+ # experience = cells[6].get_text(strip=True) if len(cells) > 6 else ""
45
+ # college = cells[7].get_text(strip=True) if len(cells) > 7 else ""
46
+
47
+ roster_data.append({
48
+ 'name': name,
49
+ # 'jersey_number': jersey_number,
50
+ # 'position': position,
51
+ # 'height': height,
52
+ # 'weight': weight,
53
+ # 'age': age,
54
+ # 'experience': experience,
55
+ # 'college': college,
56
+ 'headshot_url': headshot_url
57
+ })
58
+
59
+ except Exception as e:
60
+ print(f"[WARNING] Skipping row due to error: {e}")
61
+ continue
62
+
63
+ # Save to CSV
64
+ with open(output_csv, 'w', newline='', encoding='utf-8') as f:
65
+ fieldnames = ['name', 'headshot_url']
66
+ writer = csv.DictWriter(f, fieldnames=fieldnames)
67
+ writer.writeheader()
68
+ writer.writerows(roster_data)
69
+
70
+ print(f"[INFO] Successfully saved {len(roster_data)} players to '{output_csv}'.")
71
+
72
+ if __name__ == "__main__":
73
+ scrape_49ers_roster()
data/april_11_multimedia_data_collect/schedule_with_result_and_logo_urls.csv ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Match Number,Round Number,Date,Location,Home Team,Away Team,Result,game_result,home_team_logo_url,away_team_logo_url
2
+ 1,1,10/09/2024 00:15,Levi's Stadium,San Francisco 49ers,New York Jets,32 - 19,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/nyj.png
3
+ 28,2,15/09/2024 17:00,U.S. Bank Stadium,Minnesota Vikings,San Francisco 49ers,23 - 17,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/min.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png
4
+ 38,3,22/09/2024 20:25,SoFi Stadium,Los Angeles Rams,San Francisco 49ers,27 - 24,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/lar.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png
5
+ 55,4,29/09/2024 20:05,Levi's Stadium,San Francisco 49ers,New England Patriots,30 - 13,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/ne.png
6
+ 70,5,06/10/2024 20:05,Levi's Stadium,San Francisco 49ers,Arizona Cardinals,23 - 24,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/ari.png
7
+ 92,6,11/10/2024 00:15,Lumen Field,Seattle Seahawks,San Francisco 49ers,24 - 36,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sea.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png
8
+ 96,7,20/10/2024 20:25,Levi's Stadium,San Francisco 49ers,Kansas City Chiefs,18 - 28,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/kc.png
9
+ 109,8,28/10/2024 00:20,Levi's Stadium,San Francisco 49ers,Dallas Cowboys,30 - 24,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/dal.png
10
+ 149,10,10/11/2024 18:00,Raymond James Stadium,Tampa Bay Buccaneers,San Francisco 49ers,20 - 23,Win,https://a.espncdn.com/i/teamlogos/nfl/500/tb.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png
11
+ 158,11,17/11/2024 21:05,Levi's Stadium,San Francisco 49ers,Seattle Seahawks,17 - 20,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/sea.png
12
+ 169,12,24/11/2024 21:25,Lambeau Field,Green Bay Packers,San Francisco 49ers,38 - 10,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/gb.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png
13
+ 181,13,02/12/2024 01:20,Highmark Stadium,Buffalo Bills,San Francisco 49ers,35 - 10,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/buf.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png
14
+ 199,14,08/12/2024 21:25,Levi's Stadium,San Francisco 49ers,Chicago Bears,38 - 13,Win,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/chi.png
15
+ 224,15,13/12/2024 01:15,Levi's Stadium,San Francisco 49ers,Los Angeles Rams,6 - 12,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/lar.png
16
+ 228,16,22/12/2024 21:25,Hard Rock Stadium,Miami Dolphins,San Francisco 49ers,29 - 17,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/mia.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png
17
+ 246,17,31/12/2024 01:15,Levi's Stadium,San Francisco 49ers,Detroit Lions,34 - 40,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png,https://a.espncdn.com/i/teamlogos/nfl/500/det.png
18
+ 257,18,05/01/2025 21:25,State Farm Stadium,Arizona Cardinals,San Francisco 49ers,47 - 24,Loss,https://a.espncdn.com/i/teamlogos/nfl/500/ari.png,https://a.espncdn.com/i/teamlogos/nfl/500/sf.png
data/april_11_multimedia_data_collect/team_logos.py ADDED
@@ -0,0 +1,298 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import requests
2
+ from bs4 import BeautifulSoup
3
+ import csv
4
+ import os
5
+ import time
6
+ import re
7
+ import json
8
+ import logging
9
+
10
+ # Set up logging
11
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
12
+ logger = logging.getLogger(__name__)
13
+
14
+ # Constants
15
+ NFL_TEAMS_URL = "https://www.nfl.com/teams/"
16
+ OUTPUT_DIR = "team_logos"
17
+ CSV_OUTPUT = "nfl_team_logos.csv"
18
+ EXPECTED_TEAM_COUNT = 32
19
+
20
+ def ensure_output_dir(dir_path):
21
+ """Ensure output directory exists"""
22
+ if not os.path.exists(dir_path):
23
+ os.makedirs(dir_path)
24
+ logger.info(f"Created directory: {dir_path}")
25
+
26
+ def download_image(url, file_path):
27
+ """Download image from URL and save to file_path"""
28
+ try:
29
+ headers = {
30
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
31
+ }
32
+ response = requests.get(url, headers=headers, stream=True)
33
+ response.raise_for_status()
34
+
35
+ with open(file_path, 'wb') as f:
36
+ for chunk in response.iter_content(chunk_size=8192):
37
+ f.write(chunk)
38
+
39
+ return True
40
+ except Exception as e:
41
+ logger.error(f"Failed to download image from {url}: {e}")
42
+ return False
43
+
44
+ def get_team_logo_urls():
45
+ """
46
+ Get team logo URLs directly from team pages.
47
+ Returns a dictionary mapping team names to their logo URLs.
48
+ """
49
+ logger.info(f"Fetching team information from {NFL_TEAMS_URL}")
50
+
51
+ headers = {
52
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
53
+ }
54
+
55
+ try:
56
+ response = requests.get(NFL_TEAMS_URL, headers=headers)
57
+ response.raise_for_status()
58
+ except Exception as e:
59
+ logger.error(f"Failed to fetch NFL teams page: {e}")
60
+ return {}
61
+
62
+ soup = BeautifulSoup(response.text, 'html.parser')
63
+
64
+ # Find all team links
65
+ team_links = []
66
+ for a_tag in soup.find_all('a', href=True):
67
+ if '/teams/' in a_tag['href'] and a_tag['href'].count('/') >= 3:
68
+ # This looks like a team-specific link
69
+ team_links.append(a_tag['href'])
70
+
71
+ # Get unique team URLs
72
+ team_urls = {}
73
+ for link in team_links:
74
+ # Extract team slug (e.g., 'cardinals', '49ers')
75
+ match = re.search(r'/teams/([a-z0-9-]+)/?$', link)
76
+ if match:
77
+ team_slug = match.group(1)
78
+ if team_slug not in team_urls:
79
+ full_url = f"https://www.nfl.com{link}" if not link.startswith('http') else link
80
+ team_urls[team_slug] = full_url
81
+
82
+ logger.info(f"Found {len(team_urls)} unique team URLs")
83
+
84
+ # Visit each team page to get the official logo
85
+ team_logos = {}
86
+ for slug, url in team_urls.items():
87
+ try:
88
+ logger.info(f"Visiting team page: {url}")
89
+ team_response = requests.get(url, headers=headers)
90
+ team_response.raise_for_status()
91
+
92
+ team_soup = BeautifulSoup(team_response.text, 'html.parser')
93
+
94
+ # Get team name from title
95
+ title_tag = team_soup.find('title')
96
+ if title_tag:
97
+ title_text = title_tag.text
98
+ team_name = title_text.split('|')[0].strip()
99
+ if not team_name:
100
+ team_name = slug.replace('-', ' ').title() # Fallback to slug
101
+ else:
102
+ team_name = slug.replace('-', ' ').title() # Fallback to slug
103
+
104
+ # Look for team logo in various places
105
+ logo_url = None
106
+
107
+ # Method 1: Look for logo in meta tags (most reliable)
108
+ og_image = team_soup.find('meta', property='og:image')
109
+ if og_image and og_image.get('content'):
110
+ logo_url = og_image.get('content')
111
+
112
+ # Method 2: Look for team logos in certain image tags or SVGs
113
+ if not logo_url:
114
+ team_header = team_soup.find('div', class_=lambda c: c and ('team-header' in c or 'logo' in c))
115
+ if team_header:
116
+ img = team_header.find('img')
117
+ if img and img.get('src'):
118
+ logo_url = img.get('src')
119
+
120
+ # Method 3: JavaScript data
121
+ if not logo_url:
122
+ scripts = team_soup.find_all('script')
123
+ for script in scripts:
124
+ if script.string and ('logo' in script.string.lower() or 'image' in script.string.lower()):
125
+ # Try to extract JSON data with logo information
126
+ json_matches = re.findall(r'({.*?"logo".*?})', script.string)
127
+ for match in json_matches:
128
+ try:
129
+ data = json.loads(match)
130
+ if 'logo' in data and isinstance(data['logo'], str):
131
+ logo_url = data['logo']
132
+ break
133
+ except:
134
+ continue
135
+
136
+ # Method 4: Fallback to a known pattern based on team abbreviation
137
+ if not logo_url and len(slug) > 2:
138
+ # Some teams have standardized logo URLs with abbreviations
139
+ team_abbr = slug[:2].upper() # Get first 2 chars as abbreviation
140
+ logo_url = f"https://static.www.nfl.com/t_headshot_desktop/f_auto/league/api/clubs/logos/{team_abbr}"
141
+
142
+ # If we found a logo, add it to our dictionary
143
+ if logo_url:
144
+ # If necessary, make the URL absolute
145
+ if not logo_url.startswith('http'):
146
+ logo_url = f"https://www.nfl.com{logo_url}" if logo_url.startswith('/') else f"https://www.nfl.com/{logo_url}"
147
+
148
+ team_logos[team_name] = logo_url
149
+ logger.info(f"Found logo for {team_name}: {logo_url}")
150
+ else:
151
+ logger.warning(f"Could not find logo URL for {team_name}")
152
+
153
+ # Be polite with rate limiting
154
+ time.sleep(1)
155
+
156
+ except Exception as e:
157
+ logger.error(f"Error processing team page {url}: {e}")
158
+
159
+ logger.info(f"Found logos for {len(team_logos)} teams")
160
+ return team_logos
161
+
162
+ def download_team_logos():
163
+ """Download NFL team logos and save to CSV"""
164
+ logger.info("Starting NFL team logo download")
165
+
166
+ # Ensure output directory exists
167
+ ensure_output_dir(OUTPUT_DIR)
168
+
169
+ # Get team logo URLs from team pages
170
+ team_logos = get_team_logo_urls()
171
+
172
+ # Use a backup approach for any missing teams
173
+ if len(team_logos) < EXPECTED_TEAM_COUNT:
174
+ logger.warning(f"Only found {len(team_logos)} team logos from web scraping. Using ESPN API as backup.")
175
+ # We'll use ESPN's API to get team data including logos
176
+ try:
177
+ espn_url = "https://site.api.espn.com/apis/site/v2/sports/football/nfl/teams"
178
+ response = requests.get(espn_url)
179
+ response.raise_for_status()
180
+
181
+ espn_data = response.json()
182
+ if 'sports' in espn_data and len(espn_data['sports']) > 0:
183
+ if 'leagues' in espn_data['sports'][0] and len(espn_data['sports'][0]['leagues']) > 0:
184
+ if 'teams' in espn_data['sports'][0]['leagues'][0]:
185
+ for team_data in espn_data['sports'][0]['leagues'][0]['teams']:
186
+ team = team_data.get('team', {})
187
+ team_name = team.get('displayName')
188
+ if team_name and team_name not in team_logos:
189
+ logo_url = team.get('logos', [{}])[0].get('href')
190
+ if logo_url:
191
+ team_logos[team_name] = logo_url
192
+ logger.info(f"Added {team_name} logo from ESPN API: {logo_url}")
193
+ except Exception as e:
194
+ logger.error(f"Error fetching from ESPN API: {e}")
195
+
196
+ # If we still don't have enough teams, use a manually defined dictionary
197
+ if len(team_logos) < EXPECTED_TEAM_COUNT:
198
+ logger.warning(f"Still only have {len(team_logos)} teams. Adding manual definitions for missing teams.")
199
+
200
+ # Standard team names that should be present
201
+ standard_teams = [
202
+ "Arizona Cardinals", "Atlanta Falcons", "Baltimore Ravens", "Buffalo Bills",
203
+ "Carolina Panthers", "Chicago Bears", "Cincinnati Bengals", "Cleveland Browns",
204
+ "Dallas Cowboys", "Denver Broncos", "Detroit Lions", "Green Bay Packers",
205
+ "Houston Texans", "Indianapolis Colts", "Jacksonville Jaguars", "Kansas City Chiefs",
206
+ "Las Vegas Raiders", "Los Angeles Chargers", "Los Angeles Rams", "Miami Dolphins",
207
+ "Minnesota Vikings", "New England Patriots", "New Orleans Saints", "New York Giants",
208
+ "New York Jets", "Philadelphia Eagles", "Pittsburgh Steelers", "San Francisco 49ers",
209
+ "Seattle Seahawks", "Tampa Bay Buccaneers", "Tennessee Titans", "Washington Commanders"
210
+ ]
211
+
212
+ # Manual dictionary of team logos (use correct ones from NFL's CDN)
213
+ manual_logos = {
214
+ "Arizona Cardinals": "https://static.www.nfl.com/image/private/f_auto/league/u9fltoslqdsyao8cpm0k",
215
+ "Atlanta Falcons": "https://static.www.nfl.com/image/private/f_auto/league/d8m7hzwsyzgg0smz7ifyj",
216
+ "Baltimore Ravens": "https://static.www.nfl.com/image/private/f_auto/league/ucsdijmddsqcj1i9tddd",
217
+ "Buffalo Bills": "https://static.www.nfl.com/image/private/f_auto/league/giphcy6ie9mxbnldntsf",
218
+ "Carolina Panthers": "https://static.www.nfl.com/image/private/f_auto/league/ervfzgrqdpnc7lh5gqwq",
219
+ "Chicago Bears": "https://static.www.nfl.com/image/private/f_auto/league/ra0poq2ivwyahbaq86d2",
220
+ "Cincinnati Bengals": "https://static.www.nfl.com/image/private/f_auto/league/bpx88i8nw4nnabuq0oob",
221
+ "Cleveland Browns": "https://static.www.nfl.com/image/private/f_auto/league/omlzo6n7dpxzbpwrqaak",
222
+ "Dallas Cowboys": "https://static.www.nfl.com/image/private/f_auto/league/dxibuyxbk0b9ua5ih9hn",
223
+ "Denver Broncos": "https://static.www.nfl.com/image/private/f_auto/league/t0p7m5cjdjy18rnzzqbx",
224
+ "Detroit Lions": "https://static.www.nfl.com/image/private/f_auto/league/dhfidtn8jrumakbawoxz",
225
+ "Green Bay Packers": "https://static.www.nfl.com/image/private/f_auto/league/q1l7xmkuuyrpdmnutkzf",
226
+ "Houston Texans": "https://static.www.nfl.com/image/private/f_auto/league/bpx88i8nw4nnabuq0oob",
227
+ "Indianapolis Colts": "https://static.www.nfl.com/image/private/f_auto/league/ketwqeuschqzjsllbid5",
228
+ "Jacksonville Jaguars": "https://static.www.nfl.com/image/private/f_auto/league/bwl1nuab0n2bhi8nxiar",
229
+ "Kansas City Chiefs": "https://static.www.nfl.com/image/private/f_auto/league/ujshjqvmnxce8m4obmvs",
230
+ "Las Vegas Raiders": "https://static.www.nfl.com/image/private/f_auto/league/gzcojbzcyjgubgyb6xf2",
231
+ "Los Angeles Chargers": "https://static.www.nfl.com/image/private/f_auto/league/dhfidtn8jrumakbawoxz",
232
+ "Los Angeles Rams": "https://static.www.nfl.com/image/private/f_auto/league/rjxoqpjirhjvvitffvwh",
233
+ "Miami Dolphins": "https://static.www.nfl.com/image/private/f_auto/league/lits6p8ycthy9to70bnt",
234
+ "Minnesota Vikings": "https://static.www.nfl.com/image/private/f_auto/league/teguylrnqqmfcwxvcmmz",
235
+ "New England Patriots": "https://static.www.nfl.com/image/private/f_auto/league/moyfxx3dq5pio4aiftnc",
236
+ "New Orleans Saints": "https://static.www.nfl.com/image/private/f_auto/league/grhjkahghuebpwzo6kxn",
237
+ "New York Giants": "https://static.www.nfl.com/image/private/f_auto/league/t6mhdmgizi6qhndh8b9p",
238
+ "New York Jets": "https://static.www.nfl.com/image/private/f_auto/league/ekijosiae96gektbo1lj",
239
+ "Philadelphia Eagles": "https://static.www.nfl.com/image/private/f_auto/league/puhrqgj71gobgmwb5g3p",
240
+ "Pittsburgh Steelers": "https://static.www.nfl.com/image/private/f_auto/league/xujik9a3j8hl6jjumu25",
241
+ "San Francisco 49ers": "https://static.www.nfl.com/image/private/f_auto/league/dxibuyxbk0b9ua5ih9hn",
242
+ "Seattle Seahawks": "https://static.www.nfl.com/image/private/f_auto/league/gcytzwpjdzbpwnwxincg",
243
+ "Tampa Bay Buccaneers": "https://static.www.nfl.com/image/private/f_auto/league/v8uqiualryypwqgvwcih",
244
+ "Tennessee Titans": "https://static.www.nfl.com/image/private/f_auto/league/pln44vuzugjgipyidsre",
245
+ "Washington Commanders": "https://static.www.nfl.com/image/private/f_auto/league/xymxwrxtyj9fhaegfwof"
246
+ }
247
+
248
+ # Fill in any missing teams with manual data
249
+ for team_name in standard_teams:
250
+ if team_name not in team_logos and team_name in manual_logos:
251
+ team_logos[team_name] = manual_logos[team_name]
252
+ logger.info(f"Added {team_name} logo from manual dictionary")
253
+
254
+ # Process and download team logos
255
+ results = []
256
+ for team_name, logo_url in team_logos.items():
257
+ # Create safe filename
258
+ safe_name = team_name.replace(' ', '_').lower()
259
+ file_extension = '.png' # Default to PNG
260
+ filename = f"{safe_name}{file_extension}"
261
+ local_path = os.path.join(OUTPUT_DIR, filename)
262
+
263
+ # Download the logo
264
+ logger.info(f"Downloading logo for {team_name} from {logo_url}")
265
+ download_success = download_image(logo_url, local_path)
266
+
267
+ if download_success:
268
+ results.append({
269
+ 'team_name': team_name,
270
+ 'logo_url': logo_url,
271
+ 'local_path': local_path
272
+ })
273
+ logger.info(f"Successfully downloaded logo for {team_name}")
274
+ else:
275
+ logger.error(f"Failed to download logo for {team_name}")
276
+
277
+ # Add a small delay
278
+ time.sleep(0.5)
279
+
280
+ # Save to CSV
281
+ with open(CSV_OUTPUT, 'w', newline='', encoding='utf-8') as f:
282
+ fieldnames = ['team_name', 'logo_url', 'local_path']
283
+ writer = csv.DictWriter(f, fieldnames=fieldnames)
284
+ writer.writeheader()
285
+ writer.writerows(results)
286
+
287
+ logger.info(f"Successfully saved {len(results)} team logos out of {len(team_logos)} teams.")
288
+ logger.info(f"CSV data saved to '{CSV_OUTPUT}'")
289
+
290
+ if len(results) < EXPECTED_TEAM_COUNT:
291
+ logger.warning(f"Only downloaded {len(results)} team logos, expected {EXPECTED_TEAM_COUNT}.")
292
+ else:
293
+ logger.info(f"SUCCESS! Downloaded all {EXPECTED_TEAM_COUNT} NFL team logos!")
294
+
295
+ return results
296
+
297
+ if __name__ == "__main__":
298
+ download_team_logos()
data/april_11_multimedia_data_collect/team_logos/arizona_cardinals.png ADDED
data/april_11_multimedia_data_collect/team_logos/arizona_cardinals_news,_scores,_stats,_schedule.png ADDED
data/april_11_multimedia_data_collect/team_logos/atlanta_falcons.png ADDED
data/april_11_multimedia_data_collect/team_logos/atlanta_falcons_news,_scores,_stats,_schedule.png ADDED
data/april_11_multimedia_data_collect/team_logos/baltimore_ravens.png ADDED
data/april_11_multimedia_data_collect/team_logos/baltimore_ravens_news,_scores,_stats,_schedule.png ADDED
data/april_11_multimedia_data_collect/team_logos/buffalo_bills.png ADDED
data/april_11_multimedia_data_collect/team_logos/buffalo_bills_news,_scores,_stats,_schedule.png ADDED
data/april_11_multimedia_data_collect/team_logos/carolina_panthers.png ADDED
data/april_11_multimedia_data_collect/team_logos/carolina_panthers_news,_scores,_stats,_schedule.png ADDED