
    :Ki!                     t   d Z ddlZddlZddlZddlZddlZddlZddlmZmZm	Z	 ej                  j                  dej                  j                  ej                  j                  e                   ddlmZ dZdZddd	d
dd	ddd	ddd	ddd	d
dd	dZh dZd Zd Zd ZddZd Zedk(  r e        yy)z
Fetch TV Broadcast Information from ESPN
Captures which networks are broadcasting each game (ESPN, TNT, ABC, etc.)

ESPN scoreboard includes broadcasts in competitions[0].broadcasts

Run: Daily before games
    N)datetimetimezone	timedelta)normalize_to_fullz-https://site.api.espn.com/apis/site/v2/sportsg333333?
basketballnba)sportespn_leaguefootballnflhockeynhlbaseballmlbmens-college-basketballcollege-football)r   r   r   r   ncaabncaaf>   NBA TVNFL NetworkNHL NetworkABCCBSFOXFS1NBCTBSTNTUSAESPNESPN2NBCSNc                  ~   d} 	 t        | d      5 }|D ]S  }|j                  d      s|j                  dd      d   j                         j                  d      d   c cd d d        S  	 d d d        t
        j                  j                  dd	      j                  d      d   S # 1 sw Y   ;xY w# t        $ r Y Iw xY w)
Nz/var/www/html/eventheodds/.envrzSPORTS_DATABASE_URL==   ?r   SPORTS_DATABASE_URL )open
startswithsplitstripFileNotFoundErrorosenvironget)env_pathflines      scripts/fetch_broadcast_info.pyload_db_urlr6   $   s    /H(C  	GA G??#9:::c1-a0668>>sCAFF	G 	GG	G ::>>/4::3?BB	G 	G  s9   B0 B$6B$	B0 (B$*B0 $B-)B0 0	B<;B<c                 j    | j                  d       | j                  d       | j                  d       y)z$Create GameBroadcast table if neededa  
        CREATE TABLE IF NOT EXISTS "GameBroadcast" (
            id BIGSERIAL PRIMARY KEY,
            league VARCHAR(50) NOT NULL,
            "gameId" BIGINT,
            "gameDate" TIMESTAMP,
            "homeTeam" VARCHAR(20),
            "awayTeam" VARCHAR(20),
            network VARCHAR(100),
            "isNational" BOOLEAN DEFAULT FALSE,
            market VARCHAR(100),
            "createdAt" TIMESTAMP DEFAULT NOW(),
            UNIQUE(league, "gameId", network)
        )
    zhCREATE INDEX IF NOT EXISTS "GameBroadcast_league_national_idx" ON "GameBroadcast" (league, "isNational")zSCREATE INDEX IF NOT EXISTS "GameBroadcast_gameId_idx" ON "GameBroadcast" ("gameId")N)execute)curs    r5   ensure_broadcast_tabler:   0   s/    KK  	 KKz{KKef    c           	         t          d|  d| d| }|dv r|dz  }	 t        j                  |d      }|j                  dk7  rg S |j	                         }g }|j                  dg       D ]6  }|j                  d	g       }|s|d
   }	d}
d}|	j                  dg       D ]M  }|j                  di       }|j                  dd      j                         }|j                  d      dk(  r|}
L|}O |	j                  dg       }g }|D ]m  }|j                  dd      }|j                  dg       }|D ]B  }|j                         t        v xs |j                         dk(  }|j                  |||d       D o |
s|s|j                  |
||j                  d      |d       9 |S # t        $ r}t        d|        g cY d}~S d}~ww xY w)z,Fetch broadcast info for all games on a date/z/scoreboard?dates=)r   r   z&groups=50&limit=300   )timeout   eventscompetitionsr   Ncompetitorsteamabbreviationr)   homeAwayhome
broadcastsmarketnamesnational)networkis_nationalrI   date)rG   awayrN   rH   z	  Error: )	ESPN_BASErequestsr1   status_codejsonupperNATIONAL_NETWORKSlowerappend	Exceptionprint)r	   r
   date_strurlrespdatagameseventrB   comp	home_team	away_team
competitorrD   abbrevrH   game_broadcastsbroadcast_grouprI   rJ   namerM   es                          r5   fetch_broadcasts_for_dateri   E   s   Kqq-?z
JCEE%%5||C,s"Iyy{XXh+ (	E 99^R8L?D II"hh}b9 '
!~~fb1."5;;=>>*-7 &I &I' ,3J O#- 
(,,Xr:'++GR8! D"&**,2C"C"cv||~YcGcK#**#''2"(, 	
 Y%%!IIf-"1	 G(	T  	!o	s0   'F$ D0F$ 6F$ :)F$ $	G-G<GGc                    | t         vrt        d|         dddS t         |    }t               }t        j                  |      }|j                         }t        |       |j                          t        j                  t        j                        j                         }|t        |      z
  }|t        |      z   }	t        d| j                          d| d|	        d}
d}|}||	k  r|j                  d      }t!        j"                  t$               t'        |d	   |d
   |      }|D ]  }|d   s	t)        |d   |       }t)        |d   |       }|j+                  d| |||f       |j-                         }|r|d   nd}|r|d   n|}|d   D ]+  }	 |j+                  d| |||||d   |d   |d   f       |dz  }- |
dz  }
 |t        d      z  }||	k  r|j                          |j+                  d| f       |j-                         }|j1                          |j1                          t        d|  d|d    d|d    d|d    d	       |
|dS # t.        $ r
}Y d}~d}~ww xY w)z!Fetch broadcast info for a leaguezUnknown league: r   )r^   rH   )days
z: Fetching broadcasts from z to z%Y%m%dr	   r
   rH   rG   rO   z
                SELECT id, "gameDate" FROM "SportsGame"
                WHERE league = %s
                  AND "homeTeam" = %s AND "awayTeam" = %s
                  AND "gameDate"::date = %s
                LIMIT 1
            Nr&   a  
                        INSERT INTO "GameBroadcast" (
                            league, "gameId", "gameDate", "homeTeam", "awayTeam",
                            network, "isNational", market
                        )
                        VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
                        ON CONFLICT (league, "gameId", network) DO UPDATE SET
                            "isNational" = EXCLUDED."isNational",
                            market = EXCLUDED.market
                    rL   rM   rI   z
        SELECT COUNT(DISTINCT "gameId"), COUNT(*), SUM(CASE WHEN "isNational" THEN 1 ELSE 0 END)
        FROM "GameBroadcast"
        WHERE league = %s
    z  z:  games, z broadcasts (   z
 national))LEAGUE_CONFIGrY   r6   psycopg2connectcursorr:   commitr   nowr   utcrN   r   rT   strftimetimesleepREQUEST_DELAYri   r   r8   fetchonerX   close)league	days_backdays_forwardconfigdb_urlconnr9   today
start_dateend_datetotal_gamestotal_broadcastscurrent_daterZ   r^   game	home_full	away_fulldb_gamegame_id	game_date	broadcastrh   statss                           r5   fetch_broadcasts_for_leaguer      s   ]" )*!,,6"F]FF#D
++-C3KKMLL&++-E	22Jyl33H	Bv||~9*T(
TUKL
(
"((2

=!)&/6-;PRZ[ '	D%)$v,?I)$v,?I KK  )Y=? llnG$+gajG&-
<I!,/ 	KK 	! Iy!),i.F	RZH[ %)$& 1KO'	R 		q))_ (
"b 	KKM KK  	
 LLNEIIKJJL	Bvhbq
(58*M%(:
VW 0@AA+ ! s   (I	I$I$c                     t        j                  d      } | j                  dt        dd       | j                  dt        dd	       | j                  d
t        dd       | j                         }t        d       t        d       t        dt        j                  t        j                        j                                 t        d       |j                  j                  d      D cg c]   }|j                         j                         " }}d}d}|D ]3  }t!        ||j"                  |j$                        }||d   z  }||d   z  }5 t        dd        t        d| d| d       t        d       y c c}w )NzFetch broadcast info from ESPN)descriptionz	--leaguesznba,nfl,nhlzComma-separated leagues)typedefaulthelpz--days-back   zDays to look backz--days-forward   zDays to look forwardz<============================================================z!FETCH TV BROADCAST INFO FROM ESPNzTime: ,r   r^   rH   rl   zTOTAL: rm   z broadcasts)argparseArgumentParseradd_argumentstrint
parse_argsrY   r   rt   r   ru   	isoformatleaguesr,   r-   rV   r   r}   r~   )parserargslr   r   r   r|   results           r5   mainr      sh   $$1QRF
#}6  8
C0  2
(sA3  5D	(O	
-.	F8<<-779:
;<	(O*.,,*<*<S*ABQqwwy BGBK 1,VT^^TEVEVWvg&F<001
 
Bvh-	GK=)9(:+
FG	(O Cs   -%E<__main__)r   r   )__doc__rQ   rp   r/   sysrw   r   r   r   r   pathinsertdirnameabspath__file__
team_namesr   rP   ry   ro   rU   r6   r:   ri   r   r   __name__ r;   r5   <module>r      s      	 
   2 2 277??277??8#<= > (;	 "%86e46#4MN!2DE O 	Cg*;|WBt< zF r;   