
    \i                        d Z ddlZddlZddlZddlmZ ddlmZ ddlZddl	Zddl
Z
ej                  j                  dd      ZdZ ed      Zd	d
ddddddddddddZd Zd Zd Zedk(  rx eej,                        dkD  rej,                  d   ndZedk(  r e        yeev r eee   e       y ede         eddj3                  ej5                                       yy) zFetch odds from The Odds API for sports not covered by BallDontLie.
   Merges data into the existing historical files, enriching matching games.
    N)datetime)PathODDS_API_KEY 051d1c55f6a354dca3198465f4c27df1zhttps://api.the-odds-api.com/v4z&/var/www/html/eventheodds/data/bettingbaseball_mlb
soccer_eplsoccer_germany_bundesligasoccer_italy_serie_asoccer_france_ligue_onesoccer_spain_la_ligasoccer_uefa_champs_leaguebasketball_nbaamericanfootball_nflicehockey_nhlbasketball_ncaabbasketball_wnbaamericanfootball_ncaaf)mlbepl
bundesligaseriealigue1laligauclnbanflnhlncaabwnbancaafc                     | sy| j                         }d|v ryd|v ryd|v ryd|v ry	d
|v ry	|j                         }|r|d   S |S )z!Normalize team name for matching. ztrail blazersblazerszmaple leafsleafsz	blue jaysjayszred soxsoxz	white sox)lowersplit)namenwordss      3/var/www/html/eventheodds/scripts/fetch_odds_api.pynormalize_teamr.   #   sa    

A !I'aA~eaGGIE59$1$    c           	         t         |dz   z  }g }t         j                  dd       |j                         r*	 t        |      5 }t	        j
                  |      }ddd       i }t        |      D ]T  \  }}|j                  dd      dd	 }t        |j                  d
      xs |j                  d            }	|sK|	sN||||	f<   V t         d|  dt         d}
t        d|j                          d       	 t        j                  j!                  |
d      5 }t	        j"                  |j%                         j'                               }ddd       st        d|        yt        dt5        |       d|        d}d}|D ]  }|d   dd	 }|d   }t        |      }|j                  ||f      }d}|||   }n:i }d}d}d}d}|j                  dg       D ]  }|d   }i }|j                  dg       D ]  }|d   dk(  r7|d    D ].  }|d!   |d   k(  r|d"   |d#<   ||d"   }|d"   |d$<   |*|d"   }0 B|d   d%k(  r?|d    D ]6  }|d!   |d   k(  s|j                  d&      |d'<   |&|j                  d&      }8 |d   d(k(  s|d    D ]3  }|d!   d)k(  s|j                  d&      |d*<   |#|j                  d&      }5  |s|||<    |sO|j                  d+i       j                  d,      }|j                  d-d.      } | r|d/v s||||r| nd|d0|d1|d+<   d|d-<   |d2z  } |dkD  rNt        |d3      5 }t	        j6                  ||d45       ddd       t        |j                          d6| d7       |S t        |j                          d8       |S # 1 sw Y   ExY w# t        j                  $ r t        d| d       g }Y ow xY w# 1 sw Y   xY w# t        j(                  j*                  $ r2}t        d|  d|j,                   d|j.                          Y d}~yd}~wt0        $ r$}t        d|  dt3        |              Y d}~yd}~ww xY w# 1 sw Y   xY w)9z.Fetch odds for a specific sport key and merge.z_historical.jsonT)parentsexist_okNzWarning: Could not decode z, starting fresh.dater"   
   homeTeam	home_teamz/sports/z/odds?apiKey=z:&regions=us&markets=h2h,spreads,totals&oddsFormat=americanz	Fetching z odds from The Odds API...   )timeoutzHTTP Error fetching z: z - r   zError fetching zNo active games found for zFound z games from Odds API for commence_time
bookmakerskeymarketsh2houtcomesr*   pricehome_mlaway_mlspreadspointspreadtotalsOvertotaloddssourcehasRealOddsF)noneunknownNzthe-odds-api)moneylineHomemoneylineAway
spreadHome
spreadAway	totalLinerI   sportsbooks   w   )indentz
: Updated z games with new odds.z%: No existing games required updates.)DATA_DIRmkdirexistsopenjsonloadJSONDecodeErrorprint	enumerategetr.   BASE_URLAPI_KEYupperurllibrequesturlopenloadsreaddecodeerror	HTTPErrorcodereason	Exceptionstrlendump)!	sport_key	our_sport	data_fileexisting_gamesfgame_mapigamedhurlresp	odds_dataeupdated_count	new_count	game_dater6   	home_norm	match_idxtarget_gamerR   rD   rG   r@   rA   	bookmaker	book_name	book_oddsmarketoutcomecurrent_sourcehas_reals!                                    r-   fetch_sport_oddsr   3   s   I(::;IN NN4$N/	 i .A!%1. H^, !4HHVR "%488J/H488K3HI HaV	! Jhykwi?y
zC	Iioo'((B
CD^^##C#4 	9

499;#5#5#78I	9 *9+67	F3y>"";I;
GHMI I)#2.	%	"9-	 LL)Y!78	 (3K
  ,3 	3I!%(II#--	26 K%=E)#)*#5 K"6?d;.??3:73CIi0&'':J3:73CIi0&'':JK E]i/#)*#5 M"6?d;.??29++g2FIh/%~G8LvM E]h.#)*#5 K"6?f418W1EIg.$}gkk'6JeKK( )2I&3	36  %488B??=%8
 >-FF!(!($)/vgT"(*#K *.K&QMSIV q)S! 	3QIIna2	3"#:m_<QRS  	"##HIJq. .## 	 .yk9JKLN	 $	9 	9<<!! $YKr!&&QXXJGH 	{"SVH56r	3 	3sq   N( NN( 5!O  2OO  ;QN% N( ($OOOO   Q=(P**Q6QQQ'c                  `    d} t         j                         D ]  \  }}| t        ||      z  }  | S )z/Fetch odds for all sports defined in SPORT_MAP.r   )	SPORT_MAPitemsr   )	total_newrs   	api_sports      r-   fetch_all_mapped_sportsr      s:    I ) 1 <	9%i;;	<r/   __main__rS   allzUnknown sport: zAvailable sports: z, )__doc__r[   ossysr   pathlibr   urllib.requestrd   urllib.errorreenvironr`   rb   ra   rW   r   r.   r   r   __name__rp   argv	sport_argr^   joinkeys r/   r-   <module>r      s    	 
     	 **..)K
L,89 -$'$&!%	 % BH z"388}q0eIE!	i	9-y9	{+,"499Y^^-=#>"?@A r/   