Spaces:
Runtime error
Runtime error
Upload folder using huggingface_hub
Browse filesThis view is limited to 50 files because it contains too many changes.
See raw diff
- .env.example +11 -0
- .gitattributes +10 -0
- .gitignore +65 -0
- .gradio/certificate.pem +31 -0
- README.md +133 -7
- components/.gradio/certificate.pem +31 -0
- components/game_recap_component.py +292 -0
- components/player_card_component.py +158 -0
- components/team_story_component.py +63 -0
- data/.env.example +11 -0
- data/49ers roster - Sheet1.csv +74 -0
- data/49ers_fan_communities_clean_GOOD.csv +384 -0
- data/april_11_multimedia_data_collect/49ers_2024_column_definitions.csv +62 -0
- data/april_11_multimedia_data_collect/49ers_2024_enhanced_stats.csv +0 -0
- data/april_11_multimedia_data_collect/component actual example v2.png +0 -0
- data/april_11_multimedia_data_collect/custom component attempt 1.png +0 -0
- data/april_11_multimedia_data_collect/game recap layout example.png +0 -0
- data/april_11_multimedia_data_collect/game_stats.py +392 -0
- data/april_11_multimedia_data_collect/get_player_socials.py +239 -0
- data/april_11_multimedia_data_collect/get_youtube_playlist_videos.py +65 -0
- data/april_11_multimedia_data_collect/match_highlights.py +196 -0
- data/april_11_multimedia_data_collect/merge_schedule_logos.py +24 -0
- data/april_11_multimedia_data_collect/neo4j_article_uploader.py +146 -0
- data/april_11_multimedia_data_collect/new_final_april 11/neo4j_game_update/SCHEMA.md +44 -0
- data/april_11_multimedia_data_collect/new_final_april 11/neo4j_game_update/update_game_nodes.py +205 -0
- data/april_11_multimedia_data_collect/new_final_april 11/neo4j_player_update/update_player_nodes.py +230 -0
- data/april_11_multimedia_data_collect/new_final_april 11/roster_april_11.csv +74 -0
- data/april_11_multimedia_data_collect/new_final_april 11/schedule_with_result_april_11.csv +18 -0
- data/april_11_multimedia_data_collect/new_games_with_highlights.csv +18 -0
- data/april_11_multimedia_data_collect/new_niners_players_with_highlights.csv +74 -0
- data/april_11_multimedia_data_collect/new_team_highlights.csv +0 -0
- data/april_11_multimedia_data_collect/nfl-2024-san-francisco-49ers-with-results.csv +18 -0
- data/april_11_multimedia_data_collect/nfl_team_logos.csv +63 -0
- data/april_11_multimedia_data_collect/nfl_team_logos_revised.csv +33 -0
- data/april_11_multimedia_data_collect/niners_players_headshots.csv +74 -0
- data/april_11_multimedia_data_collect/niners_players_headshots_with_socials_merged.csv +74 -0
- data/april_11_multimedia_data_collect/niners_players_with_highlights.csv +74 -0
- data/april_11_multimedia_data_collect/player_headshots.py +73 -0
- data/april_11_multimedia_data_collect/schedule_with_result_and_logo_urls.csv +18 -0
- data/april_11_multimedia_data_collect/team_logos.py +298 -0
- data/april_11_multimedia_data_collect/team_logos/arizona_cardinals.png +0 -0
- data/april_11_multimedia_data_collect/team_logos/arizona_cardinals_news,_scores,_stats,_schedule.png +1 -0
- data/april_11_multimedia_data_collect/team_logos/atlanta_falcons.png +0 -0
- data/april_11_multimedia_data_collect/team_logos/atlanta_falcons_news,_scores,_stats,_schedule.png +1 -0
- data/april_11_multimedia_data_collect/team_logos/baltimore_ravens.png +0 -0
- data/april_11_multimedia_data_collect/team_logos/baltimore_ravens_news,_scores,_stats,_schedule.png +1 -0
- data/april_11_multimedia_data_collect/team_logos/buffalo_bills.png +0 -0
- data/april_11_multimedia_data_collect/team_logos/buffalo_bills_news,_scores,_stats,_schedule.png +1 -0
- data/april_11_multimedia_data_collect/team_logos/carolina_panthers.png +0 -0
- 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
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
-
colorTo:
|
6 |
sdk: gradio
|
7 |
-
|
8 |
-
app_file: app.py
|
9 |
pinned: false
|
10 |
---
|
11 |
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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("&", "&").replace("<", "<").replace(">", ">")
|
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
![]() |