U
    Õ«ÚjÙi ã                G   @   sX  d dl mZ d dlmZ d dlmZ d dlm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Zd dlZd dlZd dlmZ d dlZd dlmZmZ d dlmZ d dlmZmZmZmZ d d	lm Z m!Z!m"Z" d d
l#m$Z$m%Z% d dl&m'Z' d dl(m)Z) d dl*m+Z+ eƒ Z,e$ƒ Z-e,j.de'e
j/ 0e
j/ 1e2¡d¡d�dd� e
j/ 0e
j/ 1e2¡d¡Z3dd„ Z4dd„ Z5e4ƒ a6ddiZ7G dd„ de+ƒZ8G dd„ de+ƒZ9edƒZ:edƒZ;dd „ Z<ee-ƒfe%d!œd"d#„Z=e >¡ a?e ¡ a@d$ed%ƒd&œd'ed(ƒd&œd)ed*ƒd&œd+œZAed,ƒZBed-ƒZCed.ƒZDed/ƒZEed0ƒZFed1ƒZGed2ƒZHed3ƒZIed4ƒZJd5d6„ ZKd7d8„ ZLd9d:d;d<d=d>d?d@gZMdAdB„ eMD ƒaNdCdB„ eMD ƒZOdDdB„ eMD ƒZPdEedFƒedGƒdHœdIedJƒedKƒdHœdLedMƒedNƒdHœdOedPƒedQƒdHœdRedSƒedTƒdHœdUedVƒedWƒdHœdXedYƒedZƒdHœd[ed\ƒed]ƒdHœd^ed_ƒed`ƒdHœdaedbƒedcƒdHœddedeƒedfƒdHœdgedhƒediƒdHœdjedkƒedlƒdHœdmednƒedoƒdHœdpedqƒedrƒdHœdsedtƒeduƒdHœdvedwƒedxƒdHœdyedzƒed{ƒdHœd|ed}ƒed~ƒdHœded€ƒed�ƒdHœd‚edƒƒed„ƒdHœd…ed†ƒed‡ƒdHœdˆed‰ƒedŠƒdHœd‹edŒƒed�ƒdHœdŽed�ƒed�ƒdHœd‘ed’ƒed“ƒdHœd”ed•ƒed–ƒdHœd—ed˜ƒed™ƒdHœdšed›ƒedœƒdHœd�edžƒedŸƒdHœd ed¡ƒed¢ƒdHœd£ed¤ƒed¥ƒdHœd¦œ dEeKd§ƒd¨œdIeKd©ƒd¨œdLeKdªƒd¨œd«eKd¬ƒd¨œd­eKd®ƒd¨œd¯eKd°ƒd¨œdXeKd±ƒd¨œd[eKd²ƒd¨œd³eKd´ƒd¨œddeKdµƒd¨œdjeKd¶ƒd¨œdseKd·ƒd¨œd¸eKd¹ƒd¨œdºeKd»ƒd¨œdeKd¼ƒd¨œd½eKd¾ƒd¨œd‚eKd¿ƒd¨œdÀeKdÁƒd¨œdÂeKdÃƒd¨œdÄeKdÅƒd¨œd”eKdÆƒd¨œd—eKdÇƒd¨œdÈeKdÉƒd¨œdšeKdÊƒd¨œd�eKdËƒd¨œdÌeKdÍƒd¨œd eKdÎƒd¨œdÏeKdÐƒd¨œdÑeKdÒƒd¨œdÓeKdÔƒd¨œdÕœdIdÖeLd×ƒdØœd«dÖeLdÙƒdØœdÚdÖeLdÛƒdØœdÜdÖeLdÝƒdØœdUdÖeLdÞƒdØœd[dÖeLdßƒdØœd^dÖeLdàƒdØœdadÖeLdáƒdØœdddÖeLdâƒdØœdãdÖeLdäƒdØœdjdÖeLdåƒdØœdmdÖeLdæƒdØœd|dÖeLdçƒdØœdèdÖeLdéƒdØœdêdÖeLdëƒdØœddÖeLdìƒdØœd½dÖeLdíƒdØœd‚dÖeLdîƒdØœdïdÖeLdðƒdØœdñdÖeLdòƒdØœdódÖeLdôƒdØœdõdÖeLdöƒdØœd”dÖeLd÷ƒdØœdødÖeLdùƒdØœdúdÖeLdûƒdØœdüdÖeLdýƒdØœdþdÖeLdÿƒdØœdÑdÖeL�d ƒdØœ�ddÖeL�dƒdØœd£dÖeL�dƒdØœ�dœi d=�ddÖ�d�d�dœd=�ddÖ�d	�d�dœdI�d
dÖ�d�d�dœdI�d
dÖ�d	�d�dœ�d�ddÖ�d�d�dœ�d�ddÖ�d	�d�dœ�d�ddÖ�d�d�dœ�d�ddÖ�d	�d�dœdU�ddÖ�d�d�dœdU�ddÖ�d	�d�dœdX�ddÖ�d�d�dœdX�ddÖ�d	�d�dœd³�ddÖ�d�d�dœd³�ddÖ�d	�d�dœ�d�ddÖ�d�d�dœ�d�ddÖ�d	�d�dœd^�ddÖ�d�d�dœd^�ddÖ�d	�d�dœ�d�ddÖ�d�d�dœ�d�ddÖ�d	�d�dœdj�d dÖ�d�d!�dœdj�d dÖ�d	�d!�dœ�d"�d#dÖ�d�d$�dœ�d"�d#dÖ�d	�d$�dœ�d%�d&dÖ�d�d'�dœ�d%�d&dÖ�d	�d'�dœ�d(�d)dÖ�d�d(�dœ�d(�d)dÖ�d	�d(�dœd�d*dÖ�d�d+�dœd�d*dÖ�d	�d+�dœd‚�d,dÖ�d�d-�dœd‚�d,dÖ�d	�d-�dœ�d.�d/dÖ�d�d0�dœ�d.�d/dÖ�d	�d0�dœ�d1�d2dÖ�d�d3�dœ�d1�d2dÖ�d	�d3�dœdˆ�d4dÖ�d�d5�dœdˆ�d4dÖ�d	�d5�dœ�d6�d7dÖ�d�d8�dœ�d6�d7dÖ�d	�d8�dœ�d9�d:dÖ�d�d;�dœ�d9�d:dÖ�d	�d;�dœdõ�d<dÖ�d�d=�dœdõ�d<dÖ�d	�d=�dœd”�d>dÖ�d�d?�dœd”�d>dÖ�d	�d?�dœdú�d@dÖ�d�dA�dœdú�d@dÖ�d	�dA�dœ�dB�dCdÖ�d�dD�dœ�dB�dCdÖ�d	�dD�dœdÈ�dEdÖ�d�dF�dœdÈ�dEdÖ�d	�dF�dœ�dG�dHdÖ�d�dI�dœ�dG�dHdÖ�d	�dI�dœd��dJdÖ�d�dK�dœd��dJdÖ�d	�dK�dœdÌ�dLdÖ�d�dM�dœdÌ�dLdÖ�d	�dM�dœdÑ�dNdÖ�d�dO�dœdÑ�dNdÖ�d	�dO�dœ�dP�dQdÖ�d�dR�dœ�dP�dQdÖ�d	�dR�dœ�dSœ>�dT�dUdÖ�dVdÖ�dW�dXœ�dY�dZdÖ�dVdÖ�dW�dXœ�d[�d\dÖ�d]dÖ�d^�dXœ�d_�d`dÖ�dadÖ�db�dXœ�dc�dddÖ�dadÖ�db�dXœ�de�dedÖ�dadÖ�db�dXœ�dfœ�dg�dhdÖ�di�djœ�dk�dldÖ�dm�djœ�dn�dodÖ�dp�djœ�dq�drdÖ�ds�djœ�dt�dudÖ�dv�djœ�dw�dxdÖ�dy�djœ�dz�d{dÖ�d|�djœ�d}�d~dÖ�d�djœ�d€�d�dÖ�d‚�djœ�dƒ�d„dÖ�d…�djœ�d†œ
i �d‡œZQ�dˆ�d‰�dŠ�d‹�dŒ�d�œZRG �dŽ�d�„ �d�e+ƒZSG �d�d„ de+ƒZ9�d‘dB„ eMD ƒZT�d’�d“„ ZU�d”�d•„ ZV�d–�d—„ ZW�d˜�d™„ ZX�dš�d›„ ZY�dœ�d�„ ZZ�dž�dŸ„ Z[�d �d¡„ Z\�d¢�d£„ Z]�d!�d¤�d¥„Z^�d"�d¦�d§„Z_�d#�d¨�d©„Z`�d$�d«�d¬„Za�d%ebebeb�d­œ�d®�d¯„Zc�d°�d±„ Zde)�d²�d³�Zeeejfe]�d´�dµ�d¶� eejfe_�d´�d·�d¶� eejfe`�d´�d¸�d¶� eejfeY�d´�d¹�dº� eejfed�d»�d¼�d·d �d½� eejf�d¾�d¿„ �d´�d¸�d¶� eejf�dÀ�d¿„ �d´�d¹�d¶� eejf�dÁ�d¿„ �d´�dÂ�d¶� eejf�dÃ�d¿„ �d´�dÄ�d¶� �dÅ�dÆ„ Zg�dÇ�dÈ„ Zheejfeh�d´�dµ�dÉ�dÊ�d	�dË� �dÌ�dÍ„ Zieejfei�d»d d �dÎ�dÊ�d	�d	�dÏ� ee j¡  e, k�dÐ¡�dÑ�dÒ„ ƒZl�d&�dÓ�dÔ„Zme=e,jne< e,joeee=ƒg�dÕ� d �dÖlpmqZq e, oeqe=�d×�d¿„ ƒ¡ e,joeee=ƒg�dÕ� e, r�dØ¡ee=ƒfeb�dÙœ�dÚ�dÛ„ƒZse, r�dÜ¡ee=ƒfeb�dÙœ�dÝ�dÞ„ƒZte, r�dß¡ee=ƒfeb�dÙœ�dà�dá„ƒZue, v�dâ¡ee=ƒfeb�dÙœ�dã�dä„ƒZwe, r�då¡ee=ƒfeb�dÙœ�dæ�dç„ƒZx�dè�dé„ Zy�dê�dë„ Zz�dì�dí„ Z{e, r�dî¡d9dee=ƒfebebeb�dïœ�dð�dñ„ƒZ|e, r�dò¡ee=ƒfeb�dÙœ�dó�dô„ƒZ}e, v�dò¡ee=ƒfe9eb�dõœ�dö�d÷„ƒZ~e, r�dø¡ee=ƒfeb�dÙœ�dù�dú„ƒZe, r�dû¡ee=ƒfeb�dÙœ�dü�dý„ƒZ€e, v�dû¡ee=ƒfe8eb�dõœ�dþ�dÿ„ƒZ�e, v�d ¡ee=ƒfeSeb�dõœ�d�d„ƒZ‚e, r�d¡ee=ƒfebeb�dœ�d�d„ƒZƒe, r�d¡ee=ƒfebeb�dœ�d	�d
„ƒZ„e, r�d¡ee=ƒfebeeb�dœ�d�d„ƒZ…e, r�d¡e, r�d¡ebebe�dœ�d�d„ƒƒZ†e, r�d¡e, r�d¡ebe�dœ�d�d„ƒƒZ‡e, r�d¡ee=ƒfeeb�dœ�d�d„ƒZˆe‰�dk�rTe	je,�d�d�d � dS ('  é    )Úvault_value)Úrouter)Úobtener_usuario_hermesN©Údatetime)ÚrunÚlist_events)ÚList)ÚFastAPIÚHTTPExceptionÚDependsÚRequest)ÚRedirectResponseÚHTMLResponseÚPlainTextResponse)Ú	HTTPBasicÚHTTPBasicCredentials)ÚStaticFiles)ÚBackgroundScheduler)Ú	BaseModelz/imgZimg)Ú	directory)Únamezsecurity.jsonc               
   C   sR   t j t¡rHz.ttdƒ�} t | ¡W  5 Q R £ W S Q R X W n   Y nX dg dœS )NÚrF)ÚenabledÚips)ÚosÚpathÚexistsÚSECURITY_FILEÚopenÚjsonÚload)Úf© r#   ú/var/www/html/NFL_ST/nfl.pyÚcargar_seguridad"   s    "r%   c              	   C   s&   t tdƒ�}t | |¡ W 5 Q R X d S )NÚw)r   r   r    Údump)Údatar"   r#   r#   r$   Úguardar_seguridad+   s    r)   ÚsourceZprimec                   @   s"   e Zd ZU eed< ee ed< dS )ÚSecurityModelr   r   N)Ú__name__Ú
__module__Ú__qualname__ÚboolÚ__annotations__r	   Ústrr#   r#   r#   r$   r+   3   s   
r+   c                   @   s   e Zd ZU eed< dS ©ÚNBASourceModelr*   N©r,   r-   r.   r1   r0   r#   r#   r#   r$   r3   7   s   
r3   ÚTELEGRAM_BOT_TOKENÚTELEGRAM_CHAT_IDc              
   C   sh   z2dt › d�}td| › �ddœ}tj||dd� W n0 tk
rb } ztd|› �ƒ W 5 d }~X Y nX d S )	Nzhttps://api.telegram.org/botz/sendMessageu'   ðŸ“¡ <b>Alerta del Router Maestro</b>

ZHTML)Zchat_idÚtextZ
parse_modeç      @)r(   Útimeoutz$[ERROR] No se pudo enviar Telegram: )r5   r6   ÚhttpxÚpostÚ	ExceptionÚprint)ÚmensajeÚurlÚpayloadÚer#   r#   r$   Úenviar_alerta_telegram>   s    ýrB   )Úcredentialsc                 C   sD   t  | jtdƒ¡}t  | jtdƒ¡}|r,|s>tddddid�‚| jS )NZadmin_74Zadmin_75i‘  zAcceso denegadozWWW-AuthenticateZBasic)Ústatus_codeÚdetailÚheaders)ÚsecretsZcompare_digestÚusernamer   Úpasswordr   )rC   Zusuario_correctoZpass_corrector#   r#   r$   Úverificar_credencialesJ   s    ýrJ   zhttp://23.237.34.58:7070Zsecret_92_16)ÚhostÚauthzhttp://172.111.38.198:2020Zsecret_96_16zhttp://51.81.107.170:7070Zsecret_100_16)Úpanel_1Úpanel_primeÚpanel_trillerZsecret_105_14Zsecret_106_13Zsecret_107_13Zsecret_108_21Zsecret_109_13Zsecret_110_17Zsecret_111_13Zsecret_112_16Zsecret_113_13c                 C   s   d| › d�S )Nz%http://15.204.47.5:1234/stream/sling/zW/master.m3u8?u=admin&p=8366d2f479ee25eaecd01b42960c3fe667ac6f49f2fb41d7c236fde115bd64der#   ©Úteamr#   r#   r$   Úslingt   s    rR   c                 C   s   d| › d�S )Nz'http://51.81.107.170:7070/stream/sling/zW/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fr#   rP   r#   r#   r$   Ú	nba_slingw   s    rS   ÚnflÚmlbÚnbaÚnhlÚmlsÚppvÚlmpÚtrillerc                 C   s   i | ]
}|i “qS r#   r#   ©Ú.0Úleaguer#   r#   r$   Ú
<dictcomp>}   s      r_   c                 C   s   i | ]
}|i “qS r#   r#   r\   r#   r#   r$   r_   ~   s      c                 C   s   i | ]
}|i “qS r#   r#   r\   r#   r#   r$   r_      s      ZariZsecret_130_44Zsecret_130_192)ÚabbrÚCBSÚFOXÚatlZsecret_131_42Zsecret_131_190ZbalZsecret_132_41Zsecret_132_190ÚbufZsecret_133_40Zsecret_133_188ZcarZsecret_134_43Zsecret_134_193ÚchiZsecret_135_40Zsecret_135_187ZcinZsecret_136_42Zsecret_136_193ZcleZsecret_137_41Zsecret_137_191ZdalZsecret_138_42Zsecret_138_187ZdenZsecret_139_42Zsecret_139_189ZdetZsecret_140_40Zsecret_140_187ZgbZsecret_141_41Zsecret_141_190ÚhouZsecret_142_41Zsecret_142_189ZindZsecret_143_40Zsecret_143_193ZjaxZsecret_144_42Zsecret_144_195ZkcZsecret_145_40Zsecret_145_188ÚlvZsecret_146_41Zsecret_146_191ZlarZsecret_147_39Zsecret_147_182ZlacZsecret_148_43Zsecret_148_186ÚmiaZsecret_149_43Zsecret_149_187ÚminZsecret_150_42Zsecret_150_194ZtenZsecret_151_41Zsecret_151_191ÚneZsecret_152_42Zsecret_152_188ÚnoZsecret_153_40Zsecret_153_190ZnygZsecret_154_41Zsecret_154_191ZnyjZsecret_155_39Zsecret_155_189ÚphiZsecret_156_41Zsecret_156_186ZpitZsecret_157_43Zsecret_157_194ZsfZsecret_158_39Zsecret_158_192ÚseaZsecret_159_43Zsecret_159_191ÚtbZsecret_160_44Zsecret_160_190ÚwasZsecret_161_45Zsecret_161_197) Ú	cardinalsZfalconsÚravensZbillsZpanthersZbearsÚbengalsZbrownsÚcowboysÚbroncosZlionsÚpackersZtexansZcoltsZjaguarsÚchiefsZraidersZramsZchargersZdolphinsÚvikingsZtitansÚpatriotsZsaintsÚgiantsZjetsÚeaglesÚsteelersÚ49ersÚseahawksÚ
buccaneersZ
commandersZarizonadiamondbacks)r`   ÚregionalZatlantabravesZbaltimoreoriolesZbosZbostonredsoxZchcZchicagocubsZchwZchicagowhitesoxZcincinnatiredsZclevelandguardiansÚcolZcoloradorockiesZdetroittigersZhoustonastrosZkansascityroyalsZlaaZlosangelesangelsZladZlosangelesdodgersZmiamimarlinsZmilZmilwaukeebrewersZminnesotatwinsZnymZnewyorkmetsZnyyZnewyorkyankeesZoakZoaklandathleticsZphiladelphiaphilliesZpittsburghpiratesÚsdZsandiegopadresZsanfranciscogiantsZseattlemarinersÚstlZstlouiscardinalsZtampabayraysZtexZtexasrangersZtorZtorontobluejaysZwshZwashingtonnationals)ZdiamondbacksZbravesZoriolesZredsoxZcubsZwhitesoxZredsZ	guardiansZrockiesZtigersZastrosZroyalsZangelsZdodgersZmarlinsZbrewersZtwinsZmetsZyankeesZ	athleticsZphilliesZpiratesZpadresry   Zmarinersrp   ZraysZrangersZbluejaysZ	nationalsÚ Zatlantahawks)r`   r   rR   ZbostoncelticsZbknZbrooklynnetsZchaZcharlottehornetsZchicagobullsZclevelandcavaliersZdallasmavericksZdenvernuggetsZdetroitpistonsZgswZgoldenstatewarriorsZhoustonrocketsZindianapacersZlosangelesclippersZlalZlosangeleslakersZmemZmemphisgrizzliesZ	miamiheatZmilwaukeebucksZminnesotatimberwolvesZnopZneworleanspelicansZnykZnewyorkknicksZokcZoklahomacitythunderZorlZorlandomagicZphiladelphia76ersZphxZphoenixsunsÚporZportlandtrailblazersZsacZsacramentokingsZsasZsanantoniospursZtorontoraptorsÚutahZutahjazzZwashingtonwizards)ZhawksZcelticsÚnetsÚhornetsZbullsZ	cavaliersZ	mavericksZnuggetsZpistonsZwarriorsZrocketsZpacersZclippersZlakersZ	grizzliesZheatZbucksZtimberwolvesZpelicansZknicksZthunderÚmagicÚ76ersZsunsÚtrailblazersZkingsZspursZraptorsÚjazzZwizardszMLS 360FÚmls360)r`   Úo11_namer   Úis_esÚ	base_slugTzAtlanta UnitedÚatlantaunitedZatxz	Austin FCÚaustinfcZcltzCharlotte FCÚcharlottefczChicago Fire FCÚchicagofirezFC CincinnatiÚfccincinnatizColorado RapidsÚcoloradorapidsZclbzColumbus CrewÚcolumbuscrewz	FC DallasÚfcdallasÚdczD.C. UnitedÚdcunitedzHouston Dynamo FCÚhoustondynamoÚskczSporting Kansas CityÚ
sportingkcÚlaz	LA GalaxyÚlagalaxyÚlafczLos Angeles Football ClubzInter Miami CFÚ
intermiamizMinnesota United FCÚminnesotaunitedÚmtlu   CF MontrÃ©alÚ
cfmontrealZnshzNashville SCÚnashvillesczNew England RevolutionÚnewenglandrevolutionZnyczNew York City Football ClubÚnycfcÚnyzRed Bull New YorkÚnewyorkredbullszOrlando CityÚorlandocityzPhiladelphia UnionÚphiladelphiaunionzPortland TimbersÚportlandtimbersZrslzReal Salt LakeÚrealsaltlakezSan Diego FCÚ
sandiegofcZsjzSan Jose EarthquakesÚsanjoseearthquakeszSeattle Sounders FCÚseattlesounderszSt. Louis CITY SCÚstlouiscityscz
Toronto FCÚ	torontofcÚvanzVancouver Whitecaps FCÚvancouverwhitecaps)>rŒ   Z	mls360_esr�   Zatlantaunited_esr‘   Zaustinfc_esr’   Zcharlottefc_esr“   Zchicagofire_esr”   Zfccincinnati_esr•   Zcoloradorapids_esr–   Zcolumbuscrew_esr—   Zfcdallas_esr™   Zdcunited_esrš   Zhoustondynamo_esrœ   Zsportingkc_esrž   Zlagalaxy_esrŸ   Zlafc_esr    Zintermiami_esr¡   Zminnesotaunited_esr£   Zcfmontreal_esr¤   Znashvillesc_esr¥   Znewenglandrevolution_esr¦   Znycfc_esr¨   Znewyorkredbulls_esr©   Zorlandocity_esrª   Zphiladelphiaunion_esr«   Zportlandtimbers_esr¬   Zrealsaltlake_esr­   Zsandiegofc_esr®   Zsanjoseearthquakes_esr¯   Zseattlesounders_esr°   Zstlouiscitysc_esr±   Ztorontofc_esr³   Zvancouverwhitecaps_esÚ	lagranja1z$la granja vip: acceso total 24/7 - 1zmhttps://upload.wikimedia.org/wikipedia/commons/thumb/7/77/Disney_Plus_logo.svg/500px-Disney_Plus_logo.svg.pngÚespnmx)r`   r�   r   Úcustom_logoÚdynamic_logoZproviderÚ	lagranja2z$la granja vip: acceso total 24/7 - 2Ú	danawhitez
dana whitez{https://upload.wikimedia.org/wikipedia/commons/thumb/1/11/Amazon_Prime_Video_logo.svg/500px-Amazon_Prime_Video_logo.svg.pngÚprimemxZufcenÚufcz]https://upload.wikimedia.org/wikipedia/commons/thumb/0/0d/UFC_logo.svg/500px-UFC_logo.svg.pngÚsporthubparamountZufcesu    ufc espanol|ufc espaÃ±ol|espanolÚzuffa)r´   r¸   r¹   Úufc_enÚufc_esr½   Zmxczaguilas|mexicaliz/img/lmp_aguilas.png)r`   r�   r   r¶   Zherznaranjeros|hermosilloz/img/lmp_naranjeros.pngZobrzyaquis|obregonz/img/lmp_yaquis.pngZnavzmayos|navojoaz/img/lmp_mayos.pngZmocu   caÃ±eros|mochisz/img/lmp_caneros.pngZgsvzalgodoneros|guasavez/img/lmp_algodoneros.pngZculztomateros|culiacanz/img/lmp_tomateros.pngZmazzvenados|mazatlanz/img/lmp_venados.pngZjalzcharros|jaliscoz/img/lmp_charros.pngZnayzjaguares|nayarit|tepicz/img/lmp_jaguares.png)
ZaguilasZ
naranjerosZyaquisZmayosZcanerosZalgodonerosZ	tomaterosZvenadosZcharrosZjaguares)rT   rU   rV   rW   rX   rY   rZ   r[   zEhttps://site.api.espn.com/apis/site/v2/sports/football/nfl/scoreboardzEhttps://site.api.espn.com/apis/site/v2/sports/baseball/mlb/scoreboardzGhttps://site.api.espn.com/apis/site/v2/sports/basketball/nba/scoreboardzChttps://site.api.espn.com/apis/site/v2/sports/hockey/nhl/scoreboardzEhttps://site.api.espn.com/apis/site/v2/sports/soccer/usa.1/scoreboard)rT   rU   rV   rW   rX   c                   @   s&   e Zd ZU eed< eed< eed< dS )ÚOverrideModelr^   rQ   r?   Nr4   r#   r#   r#   r$   rÀ   n  s   
rÀ   c                   @   s   e Zd ZU eed< dS r2   r4   r#   r#   r#   r$   r3   s  s   
c                 C   s   i | ]
}|i “qS r#   r#   r\   r#   r#   r$   r_   v  s      c                  C   s   t  d¡} t | ¡ d¡S )NúAmerica/Tijuanaz%Y%m%d)ÚpytzÚtimezoner   ÚnowÚstrftime)Útzr#   r#   r$   Úget_today_strx  s    
rÇ   c                 C   sH   | sdS t | ƒ ¡ }d dd„ t d|¡D ƒ¡ dd¡ dd¡ dd¡S )Nrƒ   c                 s   s    | ]}t  |¡d kr|V  qdS )ZMnN)ÚunicodedataÚcategory)r]   Úcr#   r#   r$   Ú	<genexpr>€  s      z!normalize_text.<locals>.<genexpr>ZNFDú Ú.ú-)r1   ÚlowerÚjoinrÈ   Ú	normalizeÚreplace)r7   Útr#   r#   r$   Únormalize_text|  s    rÔ   c           	      C   sš  t | dd¡ƒ}t | dd¡ƒ}t | dd¡ƒ}| dkr¤dddddddd	d	d
d
dddddddddddddddddœ}||kr„|| S ||kr”|| S ||kr¤|| S | dkrðddddddddœ}||krÐ|| S ||krà|| S ||krð|| S t | i ¡ ¡ D ]”\}}| dd¡�r�q | dd¡ ¡ |k�rB|dk�rB|  S ||k�sV||k�r^|  S | dk�r€|dk�r€d|k�r€�q ||k�r |  S �q |S )Nr   rƒ   ZshortDisplayNameZabbreviationrX   r¨   r    rœ   r“   r�   rš   r¡   r£   r¯   r³   r™   rŸ   rž   r­   )ZrbnyZnyrbZ	newyorkrbrh   Zintermiamicfr›   Zsportingkansascityre   Zchicagofirefcrc   Zatlantaunitedfcrf   Zhoustondynamofcri   Zminnesotaunitedfcr¢   r£   Zmontrealrm   Zseattlesoundersfcr²   Zvancouverwhitecapsfcr˜   rŸ   Zlosangelesfootballclubr�   r�   rV   r‰   rŠ   r‹   )r‰   Zphilarl   Zblazersr„   r…   ZutarŽ   Fr`   r†   r‡   )rÔ   ÚgetÚSTREAM_DATABASEÚitemsrÏ   )	r^   Zteam_objr   Zshortr`   Z
espn_to_dbZespn_to_db_nbaZdb_slugÚdb_datar#   r#   r$   Úget_matched_slug‚  s‚                   ô       ý    
rÙ   c               	   C   sî   dddddœ} |   ¡ D ]Ò\}}z´tj|dd�}| ¡ }| dg ¡}|rÐ|d	  d
g ¡}|rÐ|d	  dg ¡}|D ]`}| di ¡}	t||	ƒ}
|	 dg ¡}|rn|d	  dd¡ dd¡}| d¡d	 d }|t| |
< qnW q tk
ræ   Y qX qd S )Nz@https://site.api.espn.com/apis/site/v2/sports/football/nfl/teamsz@https://site.api.espn.com/apis/site/v2/sports/baseball/mlb/teamszBhttps://site.api.espn.com/apis/site/v2/sports/basketball/nba/teamsz@https://site.api.espn.com/apis/site/v2/sports/soccer/usa.1/teams)rT   rU   rV   rX   é   ©r9   Úsportsr   ÚleaguesÚteamsrQ   ÚlogosZhrefrƒ   zhttp://úhttps://ú?z?w=500&h=500&transparent=true)	r×   r:   rÕ   r    rÙ   rÒ   ÚsplitÚOFFICIAL_LOGOSr<   )Z	endpointsr^   r?   Úrespr(   rÜ   rÝ   Z
teams_listZt_itemZt_objÚslugrß   Úlogo_urlr#   r#   r$   Úsync_official_logosµ  s0    ü
rç   c                     sN   t   ¡ ‰ tD ]<} tt|   ¡ ƒD ]&\}}‡ fdd„| ¡ D ƒt|  |< q qd S )Nc                    s&   i | ]\}}ˆ |d   dk r||“qS )Útimeiô  r#   )r]   Úipr(   ©rÄ   r#   r$   r_   Õ  s       z%clean_old_viewers.<locals>.<dictcomp>)rè   ÚLEAGUESÚlistÚactive_viewersr×   )r^   rQ   r   r#   rê   r$   Úclean_old_viewersÑ  s    rî   c                 C   s0   |   ¡ } d| krdS dD ]}|| kr dS qdS )NÚNBCSNF)ÚESPNÚABCÚNBCÚPEACOCKÚTNTúNBA TVÚNBATVÚPRIMET©Úupper)Znet_strÚnr#   r#   r$   Úis_national_tv×  s    rû   c                 C   s:   | sdS |   ¡ }d|krdS dD ]}||kr |   S q dS )NúNBA LEAGUE PASSrï   )rð   rñ   rò   ró   r÷   rô   rõ   rö   rø   )Znetwork_strZnet_upZvalidr#   r#   r$   Úget_nba_network_displayà  s    
rý   c                 C   sL   | dkrd|kr|d   ¡ S | d|¡  ¡ }| dkrH| d¡rH|› d�S |S )Nr[   r�   r�   rX   rŽ   u   <span class='text-emerald-400 text-[10px] ml-2 border border-emerald-500/30 bg-emerald-900/20 px-1.5 py-0.5 rounded'>ESPAÃ‘OL</span> <img src='https://flagcdn.com/w20/mx.png' class='inline-block w-4 h-3 ml-1 rounded-sm shadow-sm' style='transform: translateY(-2px);'>)rù   rÕ   )r^   rå   r(   Úbaser#   r#   r$   Úget_team_display_nameë  s    
rÿ   c            #         sä  t ƒ } t ¡ D �]*\}}�z|› d| › �}tj|dd�}| ¡ }i }| dg ¡D ]Æ}| di ¡ di ¡ dd¡}|d	 d
 }	d}
|	 d¡r¨d |	d d
  dg ¡¡ ¡ }
|dkrºt|
ƒ}
n|
sÂd}
|	 dg ¡D ]F}| di ¡}t	||ƒ}|
| dd¡| dd¡|| dd¡dœ||< qÎqP|t
|< W q tk
�r8   Y qX q�z|t d¡}t |¡ d¡}d|› d�}dddddd œ}tj||dd!�}| ¡ }t
 d"i ¡}g }| d#i ¡}d$|k�rÒt|d$ tƒ�rÒ| |d$ ¡ d%|k�rút|d% tƒ�rú| |d% ¡ d&|k�r"t|d& tƒ�r"| |d& ¡ |D �]†}| d'd
¡}d}|d(k�rLd)}n|d*k�rZd+}| d,d¡}||k�r~|d)k�r~�q&|}|�rz~| d-¡}|�s¢td.ƒ‚t t|ƒ d/d0¡¡}|jd k�rÐtj |¡}| |¡}| ¡ }t |¡}|dk�r||k�rd)}W n   Y nX | d1d2¡}| d3d4¡}|› d5|› �}t|ƒ‰ t|ƒ‰td"  ¡ D ]T\}} d6d7„ |  d8d¡ d9¡D ƒ}!t ‡ ‡fd:d;„|!D ƒƒ�rVd<|||ddœ||< �qV�q&|t
d"< W n$ tk
�rÞ }" zW 5 d }"~"X Y nX d S )=Nú?dates=é
   rÛ   ÚeventsÚstatusÚtypeÚstateÚpreÚcompetitionsr   rƒ   Ú
broadcastsrÌ   ÚnamesrV   ÚLOCALÚcompetitorsrQ   Ú	shortNameÚdateÚlogo©ÚnetworkÚ
match_nameÚ
match_dater  r  rÁ   ú%Y-%m-%dú)https://api.lmp.mx/3.0.0/scoreboard?date=ú&days_next=2&days_prev=1ú!application/json, text/plain, */*úes-MX,es;q=0.9,en-US;q=0.8úhttps://www.lmp.mxúhttps://www.lmp.mx/úMozilla/5.0©Úacceptzaccept-languageÚoriginÚrefererú
user-agent©rF   r9   rZ   ÚresponseÚgamesÚ	prevGamesÚ	nextGamesÚ
gameStatusé   Úiné   r;   ÚlocalFullDateÚutcFullDateú$LMP sin utcFullDate: horario ambiguoÚZú+00:00ÚawayTeamShortÚAwayÚhomeTeamShortÚHomeú vs c                 S   s   g | ]}t |ƒ‘qS r#   ©rÔ   ©r]   rú   r#   r#   r$   Ú
<listcomp>[  s     z!sync_schedule.<locals>.<listcomp>r�   ú|c                 3   s"   | ]}|o|ˆ kp|ˆkV  qd S ©Nr#   ©r]   r   ©Ú
away_cleanÚ
home_cleanr#   r$   rË   \  s     z sync_schedule.<locals>.<genexpr>úLMP TV)!rÇ   ÚESPN_API_URLSr×   r:   rÕ   r    rÐ   rù   rý   rÙ   Úcurrent_game_infor<   rÂ   rÃ   r   rÄ   rÅ   Ú
isinstancerì   ÚextendÚ
ValueErrorÚfromisoformatr1   rÒ   ÚtzinfoÚutcÚlocalizeÚ
astimezoneÚ	isoformatrÔ   rÖ   râ   Úany)#Z	today_strr^   r?   Zfull_urlrä   r(   ÚmappingÚeventr  ÚcompetitionÚ	broadcastÚ
competitorÚ	team_datarå   rÆ   Z	today_lmpÚlmp_urlÚlmp_headersZlmp_mappingÚ	all_gamesÚ	resp_dataÚgamerD   r  Úlocal_date_strÚgame_date_isoÚutc_rawÚdt_awarerÄ   Ú	away_nameÚ	home_namer  rØ   Ú	o11_namesrA   r#   r9  r$   Úsync_scheduleô  sº    





û
û

 
 


ûr[  c              
   C   s  t j t j t¡d¡}t j t j t¡d¡}t j |¡r~z8t t|ƒ 	¡ ¡}t
 
¡ | dd¡k rn|d dfW S W n   Y nX t j |¡sžd}| ršd |fS dS t|ƒ 	¡  ¡ }d	}d
dddddddddœ	}ddd|iiddœ}zÔtj|||dd�}	|	 ¡ }d|k�r.| �r(d d|d d  d¡› �fW S W dS |d d d d }
|d d d d }t|d ƒ�}| |¡ W 5 Q R X t|d ƒ�$}| t |
t
 
¡ d! d"œ¡¡ W 5 Q R X |
d#fW S  tk
�rþ } z,| �rèd d$t|ƒ› d%�f W Y ¢S W Y ¢dS d }~X Y nX d S )&NzaccessToken.jsonzrefreshToken.txtÚexp_dater   Úaccess_tokenrƒ   uS   âš ï¸� API Disney+: Falta el archivo 'refreshToken.txt' en la carpeta del servidor.)Nrƒ   z;https://disney.api.edge.bamgrid.com/graph/v1/device/graphqlzdisney.api.edge.bamgrid.comzNBearer ZGlzbmV5JmJyb3dzZXImMS4wLjA.Cu56AgSfBTDag5NiRA81oLHkDZfu5L3CKadnefEAY84údisney-svod-3d9324fcú35.8zjavascript/windows/chromeú)Mozilla/5.0 (Windows NT 10.0; Win64; x64)úapplication/jsonzhttps://www.disneyplus.com)	ZHostÚauthorizationúx-bamsdk-client-idúx-bamsdk-versionzx-bamsdk-platformú
User-Agentr  zcontent-typeÚOriginzmmutation refreshToken($input:RefreshTokenInput!){refreshToken(refreshToken:$input){activeSession{sessionId}}}ÚinputZrefreshToken)ÚqueryZ	variablesZoperationNameg      $@)r    rF   r9   Úerrorsu*   â�Œ API Disney+: El token expirÃ³. Error: ÚmessageÚ
extensionsZsdkÚtokenZaccessTokenr&   i°6  )r]  r\  u+   âœ… API Disney+: Token renovado con Ã©xito.u   â�Œ API Disney+: Error HTTP (ú))r   r   rÐ   ÚdirnameÚ__file__r   r    Úloadsr   Úreadrè   rÕ   Ústripr:   r;   ÚwriteÚdumpsr<   r1   )Ú	is_manualZ
token_fileZrefresh_filer(   ÚmsgZrefresh_tokenr?   rF   r@   r   Z
new_accessZnew_refreshr"   rA   r#   r#   r$   Úget_disney_tokeni  s`    ÷
ý
(
rw  c              	   C   sª  t | ƒ\}}|s | rd|fS dS ddg}d|› �dddd	d
œ}t di ¡}d}g }|D �]}�zîtj||dd�}	|	jdk�rJ|	 ¡ }
|
 di ¡ di ¡ dg ¡}|sì|
 di ¡ di ¡ dg ¡D ]*}| | dg ¡pæ| di ¡ dg ¡¡ qÀ|D �]V}| di ¡}| dd¡}||k�r,|dk�r,| |¡ d}| di ¡ di ¡ di ¡ di ¡ d¡| di ¡ di ¡ di ¡ di ¡ d¡fD ]}|�r„d|› d �} �q¤�q„| ¡ }d}d!|k�sØd"|k�sØd#|k�sØd$|k�r$d%|k�söd&|k�söd'|k�rüd(}n(d)|k�sd*|k�sd+|k�r d,}nd(}|rð|d-7 }d.| 	¡ d/d0|d1œ||< qðW qV t
k
�rb   Y qVX qV|�r˜|dk�r˜|td< | �r”d2d3|› d4�fS d5S | �r¢d7S dS d S )8NF©Frƒ   zihttps://disney.api.edge.bamgrid.com/explore/v1.18/page/page-26e7614f-0e33-431d-ada3-d5db4e4e1da4?limit=15zchttps://disney.api.edge.bamgrid.com/explore/v1.18/set/0dc02d86-bc33-450c-8240-93f3a8dda292?limit=60zBearer r^  r_  r`  ra  )rb  rc  rd  re  r  rY   r   ç      .@r   éÈ   r(   Úsetr×   ZpageZ
containersÚvisualsÚtitleZUnknownrƒ   ZartworkZmatchupZtilez1.78ZimageIdZstandardzIhttps://disney.images.edge.bamgrid.com/ripcut-delivery/v2/variant/disney/z/compose?format=webp&width=800ZgranjaZaccesou   cÃ¡maraZcamaraÚ1Z	principalZduelor´   Ú2Z
secundariaZasamblear¸   r&  úDISNEY+õ   ðŸ”´ 24/7 EN VIVOr'  r  Tu2   âœ… API Disney+: Se conectÃ³ con Ã©xito y extrajo z portadas HD.©Trƒ   õD   âš ï¸� API Disney+: ConexiÃ³n exitosa, pero no detectÃ³ los eventos.)Frƒ  )rw  r>  rÕ   r:   rD   r    r@  ÚappendrÏ   rr  r<   )ru  rl  Z	msj_tokenZurlsrF   rI  Zlogos_encontradosZtitulos_vistosr?   r   Z	data_jsonr×   rÊ   Úitemr|  r}  ræ   ÚpidZ	title_lowrå   r#   r#   r$   Úsync_disney_schedule¡  s|    þû
 (

X
(ûr‡  c              
   C   s   t d d }t d d }|› d�}d|d||› d�dd	œ}�zrtj||d
ddœdd� t d¡ tj||dddœdd�}|jdk�rž|› d�}tj|d|idd�}|jdk�rž|j ¡  	d¡}i }	z(d}
tj|
dd�}|jdkrè| 
¡ }	W n tk
rþ   Y nX i }i }d}|D �]R}| ¡ }| d¡�r2|}�q| d¡�r|�rt d|¡}|�r^| d¡}d|› �}| d¡ ¡ }d }d!}d"|› d#�}|d$k�r¨d%}d&}d'}d(}nŽ|	 |i ¡}| d)d¡}|�r6zX|d d*… }t |d+¡}t d,¡}tj |¡ |¡}t |¡}| ¡ }||k�rd%}W n tk
�r4   Y nX |||||d-œ||< d.||||d/œ||< d}�q|�rž|td< |td< | �r˜d0d1t|ƒ› d2�fW S W d3S | �rªW d4S W d5S  tk
�rú } z,| �räd6d7t|ƒ› d8�f W Y ¢S W Y ¢d5S d }~X Y nX d S )9NrO   rK   rL   ú/api/actionú*/*ra  z/config/trillertv?type=liver  )ÚAcceptÚAuthorizationúContent-Typerf  ÚRefererre  ÚchannelsupdaterequestÚ	trillertv©ZActionZ
ProviderIdry  ©rF   r    r9   é   Úchannelsupdateapplyrz  ú/playlist.m3ur‹  r   Ú
z'http://51.81.107.170/triller_cache.jsonr8   rÛ   rƒ   ú#EXTINFÚhttpz\[(\d+)\](.*)r&  r[   r(  u   ðŸ”œ SCHEDULEDr  zhttps://img.fite.tv/t/z_wide_554x200.jpgZ4534230r'  r�  zTrillerTV 24/7 LivezDhttps://thumbs.fite.tv/api_11/headers/triile_tv_247_logo_EMfZaHQ.pngZ
start_timeé   z%Y-%m-%dT%H:%M:%SrÁ   )r`   r�   r�   r   r¶   z
TRILLER TVr  Tu5   âœ… API TrillerTV: SincronizaciÃ³n exitosa con JSON. z eventos mapeados.r‚  )Fu.   â�Œ API TrillerTV: El panel o11 no respondiÃ³.rx  Fu,   â�Œ API TrillerTV: Error de conexiÃ³n HTTP (rm  )Ú
O11_PANELSr:   r;   rè   ÚsleeprD   rÕ   r7   rr  râ   r    r<   Ú
startswithÚreÚsearchÚgroupr   ÚstrptimerÂ   rÃ   rD  rE  rF  rÄ   rG  r>  rÖ   Úlenr1   )ru  rK   rL   Z
url_actionZheaders_o11Ú
resp_applyÚm3u_urlZresp_m3uÚlinesZremote_cacheZ	cache_urlZr_cacherI  Z
db_trillerÚcurrent_extinfÚlineZid_matchZraw_slugZ	safe_slugZclean_titleÚevent_date_isoÚevent_stateræ   Zc_dataZstart_time_rawZtime_strÚdtZtz_tjÚdt_tjZnow_tjrA   r#   r#   r$   Úsync_triller_scheduleì  s°    
ú	









  û
	û
   rª  rM   c           "         s„  t  | i ¡ d¡}t  | i ¡ d¡}|r,|s0dS |› d�}dd|ddœ}�z
tj||d	d
�}|jdk�rP|j ¡  d¡}t|ƒdk rŠW dS | dk�rX|r |dkr¾td D ]}dtd | d< q¨|rÊ|dkrètd D ]}dtd | d< qÒ|rö|dk�rdtd d d< dtd d d< |�r&|dk�r®dtd d d< dtd d d< dtd d d< nV| dk�r®dtd d d< td D ]2}td |  dd¡ 	|¡�rzdtd | d< �qzd}	|D �]�}
|
 ¡ }
|
 	d¡�rØ|
}	�q¶|
 	d¡�r¶|	�r¶|	 d ¡d!  ¡ }t
|ƒ‰ t d"|	¡}|�r | d#¡nd}| dk�rÜd$|	k�sPd%|	k�sPd&|	 ¡ k�rÀd'ˆ k�p`d(ˆ k}td  ¡ D ]P\}}|| d)d¡k�rŒ�qnt
| d*d¡ƒ}|�rn|ˆ k�rn|
td | d< �qnd+ˆ k�sØd,| ¡ k�r„d-D ]¦}t
td |  d*d¡ƒ}|�rÜ|ˆ k�rÜ|
td | d< |�r.|td | d.< |t di ¡k�rPi t di ¡|< td |  d/¡�sÜtd |  |d0d1d2d3œ¡ �qÜd4|
k�rVdˆ k�rÚ|
td d d< |�r¾|td d d.< |d5d6d2d3œt di ¡d< n|d7ˆ k�rVt‡ fd8d9„d:D ƒƒ}|�rdnd}|�rd;nd<}|
td | d< |�r<|td | d.< |d5|d2d3œt di ¡|< d=|k�s|d>| ¡ k�s|d?| ¡ k�rBtd  ¡ D ]N\}}d@dA„ | d*d¡ dB¡D ƒ}t‡ fdCd9„|D ƒƒ�rˆ|
td | d< �qˆ�nf| dk�rBt‡ fdDd9„dED ƒƒ�r<|
td d d< |�r$|td d d.< t dF|tj¡}dG}d}|�rt| d#¡ƒ}t| d¡ƒ}| dH¡ ¡ }|dIk�rŠ|dJk �rŠ|dJ7 }n|dKk�r¢|dJk�r¢dL}t dM¡}t |¡}| t|j|j|j||dLƒ¡}dNˆ k�sèdOˆ k�rdLdPlm} ||d#dQ� }|  ¡ }||k�rd2}t di ¡ di ¡ ||dR|d3œ¡ t‡ fdSd9„dTD ƒƒ}|�sBdU|
k�rpdV|
k�rp�q¶td  !¡ D �]Â}|dWk�r¤dXˆ k�r¤dYˆ k�r¤�q|t dZ|› dZ�|tj¡�r|dNˆ k�s|dOˆ k�rÖ�q||
td | d< t dF|tj¡}dG}|�r t| d#¡ƒ}t| d¡ƒ}| dH¡ ¡ }|dIk�rH|dJk �rH|dJ7 }n|dKk�r`|dJk�r`dL}t dM¡}t |¡}| t|j|j|j||dLƒ¡}||k�r d2}t di ¡ |i ¡ td |  d/¡�sè|td | d/< d[td | d\< td |  d]d¡} t"| ƒ�sd^td | d]< td |  d_¡d2k�r||td | d_< �q|d}	�q¶W d`S W dS  t#k
�r~ }! z
W Y ¢dS da}!~!X Y nX daS )bz\
    Descarga y mapea la playlist de o11 manteniendo aislamiento estricto por provider.
    rK   rL   Fr”  r‰  úes-MXr  )rŠ  úAccept-Languager‹  re  g      4@r   rz  r•  r(  rM   rX   rƒ   r   rZ   rµ   rY   r´   r¸   r¼   r¾   r¿   r½   rN   r¹   rV   r–  r—  ú,éÿÿÿÿztvg-logo="([^"]+)"r&  zgroup-title="MLS"z[MLS]ZMLSzmls(es)ZmlsesrŽ   r�   Zlagranjaz	la granja)r´   r¸   r·   r  r�  r€  r'  )r  r  r  r  z/stream/sporthubparamount/u   ðŸ”´ EN VIVOzZUFFA BOXINGr»   c                 3   s   | ]}|ˆ kV  qd S r7  r#   ©r]   Úk©Zevent_name_cleanr#   r$   rË   ¹  s     z parse_o11_m3u.<locals>.<genexpr>)ZespanolZespanaÚspanishZ	enespanolu   UFC ESPAÃ‘OLzUFC ENGLISHzLMP:zLMP :ÚLMPc                 S   s   g | ]}t |ƒ‘qS r#   r3  r4  r#   r#   r$   r5  Ê  s     z!parse_o11_m3u.<locals>.<listcomp>r6  c                 3   s   | ]}|o|ˆ kV  qd S r7  r#   r8  r±  r#   r$   rË   Ë  s     c                 3   s   | ]}|ˆ kV  qd S r7  r#   r¯  r±  r#   r$   rË   Ð  s     )r¹   Z	contenderZdwcszA\((?:Live at|Live)\s*(\d{1,2}):(\d{2})\s*(AM|PM)\s*([A-Z]{3,4})\)r  é   ZPMé   ZAMr   rÁ   ZtomorrowZmanana)Ú	timedelta)ÚdayszPRIME VIDEOc                 3   s   | ]}|ˆ kV  qd S r7  r#   )r]   Úwordr±  r#   r$   rË   ó  s     )r}   rt   rx   rs   r{   ru   rv   rz   r|   rr   r~   rq   Z
blackhawksZdonetskZredbullsrw   Z	canadiensZ
mapleleafsrW   ZuclZuefaZ	championsz/stream/primemx/z/stream/nbar†   r‡   Zbrooklynz\bu   ðŸ”´ NBA LEAGUE PASSr  r  rü   r  TN)$r™  rÕ   r:   rD   r7   rr  râ   r   rÖ   r›  rÔ   rœ  r�  rž  rù   r×   rÏ   r>  Ú
setdefaultÚupdaterH  Ú
IGNORECASEÚintrÂ   rÃ   r   rÄ   rE  ÚyearÚmonthÚdayr¶  rG  Úkeysrû   r<   )"Ú	panel_keyÚprovider_scoperK   rL   r¢  rF   rä   r£  rå   r¤  r¥  Zevent_name_fullZ
logo_matchZextracted_logoZis_spanish_streamr(   r�   Zis_spanish_ufcZtarget_slugZtarget_networkrZ  Z
match_timer§  r¦  ÚhourÚminuteZampmrÆ   rÄ   Z	target_dtr¶  Zis_other_sportZ
actual_netrA   r#   r±  r$   Úparse_o11_m3uT  sP   
ü



"ü

ü
ü&
 
 


ü 
 



rÅ  )rÁ  Úprovider_idr}  c                 C   sÌ  t  | i ¡ d¡}t  | i ¡ d¡}|r,|s0d S | dkrH|› d|› d�n|› d|› d�}dd	|d
||ddœ}d}d|› d�}	z | dkr¤|› d�}
tj|
|i dd�}nD|› d�}
tj|
|d|dœdd� t d¡ tj|
|d|dœdd�}|jdk�rd}|	d|j› d�7 }	n|�r|	d7 }	W n" tk
�r>   d}|	d7 }	Y nX t d¡ |dk�r^t|ƒ}nt	| |d�}|�s~d}|	d 7 }	n|�rŒ|	d!7 }	|d"k�r´t
dd#�\}}|	d$|› d$�7 }	|�sÀ|�rÈt|	ƒ d S )%NrK   rL   rN   z/events/z?server=localz/config/z
?type=liver‰  r«  ra  r  )rŠ  r¬  r‹  rŒ  rf  r�  re  Fu!   ðŸ”„ <b>REPORTE DE DIAGNÃ“STICO (z)</b>

z/api/provider/getry  r‘  rˆ  rŽ  r�  r’  r“  rz  Tu"   â�Œ <b>PANEL o11</b>: Fallo (HTTP z).
u.   âœ… <b>PANEL o11</b>: ActualizaciÃ³n exitosa.
u=   â�Œ <b>PANEL o11</b>: Error de red al contactar el servidor.
r�  )rÂ  u:   â�Œ <b>MAPEO M3U</b>: Error al descargar lista del panel.
u6   âœ… <b>MAPEO M3U</b>: Links asignados a las tarjetas.
rµ   ©ru  r•  )r™  rÕ   r:   r;   rè   rš  rD   r<   rª  rÅ  r‡  rB   )rÁ  rÆ  r}  ru  rK   rL   r  rF   Zerror_encontradoZmensaje_telegramr?   r¡  Zexito_parserZ	ok_disneyZ
msg_disneyr#   r#   r$   Úsync_o11_provider,  sZ    (ù	







rÈ  c                  C   st   g } t d  ¡ D ]@\}}| dd¡}d|ks4d|krtd  |¡s|  | ¡ ¡ q| rpdd | ¡› d�}t|ƒ d S )	NrT   r  rƒ   r÷   ZAMAZONuÚ   âš ï¸� <b>RECORDATORIO DE JUEGOS PRIME (NFL)</b> âš ï¸�

El sistema detectÃ³ que hoy se transmitirÃ¡ un juego exclusivo por Amazon Prime.

Los siguientes equipos <b>NO</b> tienen un Link Maestro asignado aÃºn:
ðŸ‘‰ <b>z, uh   </b>

Entra al panel del Router y coloca tu enlace en el campo 'Forzar Link Manual' para evitar caÃ­das.)r>  r×   rÕ   Úmanual_overridesr„  rù   rÐ   rB   )Zequipos_afectadosrå   Úinfor  r>   r#   r#   r$   Úauditar_juegos_primef  s    ÿrË  rÁ   )rÃ   Úintervalr(  )Úminutesr  rÚ   é   )ÚsecondsÚcronÚthu)Zday_of_weekrÃ  rÄ  c                   C   s   t ddddƒS )NrM   rX   úMLS Apple TVF©rÈ  r#   r#   r#   r$   Ú<lambda>~  ó    rÔ  c                   C   s   t ddddƒS )NrM   rµ   zPPV / ESPN MX (La Granja)FrÓ  r#   r#   r#   r$   rÔ    rÕ  c                   C   s   t ddddƒS )NrN   rº   úPPV / Prime VideoFrÓ  r#   r#   r#   r$   rÔ  €  rÕ  é   c                   C   s   t ddddƒS )NrM   r¼   úPPV / UFC & ZuffaFrÓ  r#   r#   r#   r$   rÔ  ƒ  rÕ  é   c            
   
   C   sÞ   z ddl m}  ddlm} dd l}dd l}| d¡}| |¡ d¡}d}|j||ddd	œd
ddddœdd�}| 	¡  | 
¡ }| |dƒs”tdƒ W dS tdƒ W dS  tk
rØ }	 ztdt|	ƒjƒ W Y ¢dS d }	~	X Y nX d S )Nr   )Úguardarr   rÁ   r  z#https://api.lmp.mx/3.0.0/scoreboardr&  r(  )r  Z	days_prevZ	days_nextra  r  r  r  )rŠ  rf  r�  re  rÚ   )ÚparamsrF   r9   úhermes_lmp_epg_live.jsonzHERMES LMP: EPG INVALIDOFzHERMES LMP: EPG ACTUALIZADOTzHERMES LMP EPG ERROR:)Úhermes_lmp_epg_cache_v2rÚ  r   rÂ   r:   rÃ   rÄ   rÅ   rÕ   Zraise_for_statusr    r=   r<   r  r,   )
rÚ  r   rÂ   r:   rÆ   Zfechar?   Z	respuestaÚepgrA   r#   r#   r$   Úhermes_lmp_refresh_epg†  sD    
ýüó
þrß  c               
   C   sš   zTt ƒ sW d S ddlm}  ddlm} | ddƒ}|d kr>W d S ||d td tƒ W n@ tk
r” } z"tdt	|ƒj
t|ƒd d	… ƒ W 5 d }~X Y nX d S )
Nr   )Úcargar_vigente)ÚtickrÜ  i,  rÞ  rM   zHERMES LMP V5 ERROR:é    )rß  rÝ  rà  Úhermes_lmp_v5_runtimerá  r™  rÖ   r<   r=   r  r,   r1   )rà  rá  ZregistrorA   r#   r#   r$   Úhermes_lmp_tick´  s    
rä  Zhermes_lmp_v5r&  )rÍ  ÚidÚmax_instancesÚcoalescec               
   C   s`   z&t dd�} td| d | d dd� W n4 tk
rZ } ztdt|ƒdd� W 5 d }~X Y nX d S )NT©Zpublishz
[FOOTBALL]Úcountri  )Úflushz[FOOTBALL ERROR])Úfootball_runr=   r<   Úrepr)ÚresultÚexcr#   r#   r$   Úfootball_midnightË  s
    
rï  Zhermes_football_midnight)rÃ  rÄ  rå  ræ  rç  Zreplace_existingÚstartupc                  C   sP   t ƒ  tƒ  tdd� tdd� dd l} | jtdd� ¡  | jtdd� ¡  d S )NFrÇ  r   )rM   ©ÚtargetÚargs)rN   )rç   r[  r‡  rª  Ú	threadingÚThreadrÅ  Ústart)rô  r#   r#   r$   Ústartup_eventÕ  s    

r÷  c                 C   s8  t |   |¡rt |  | S t | i ¡ |i ¡}|d k	r:|n
| dd¡}| ¡ }t|   |i ¡}| dkrÐd|krvd|ks~d|kr‚tS d|ks’d|kr–tS d	|kr¢tS d
|kr´| d
¡S d|krÆ| d¡S | d
¡S | dk�rœ| dd¡}| dd¡}d|k�r
d|k�r
tS d|k�rtS d|k�r&tS d|k�s:d|k�r>t	S d|k�rLt
S d|k�s`d|k�rn|�rj|S |S t d¡dk�rŒ|�rˆ|S |S |�r–|S |S n˜| dk�rþd|k�r´tS d|k�rÂtS d|k�rÚd|k�rÚtS d|k�sîd|k�ròtS | dd¡S d|k�sd|k�sd|k�r(| dd¡S | dd¡S d S )Nr  rƒ   rT   rï   rò   ró   rð   rñ   ZNFLra   rb   rV   r   rR   rõ   rö   rô   r÷   r*   rU   ZFS1ZTBSZSPORTSZnacional)rÉ  rÕ   r>  rù   rÖ   Ú
NBC_STREAMÚESPN_STREAMÚNFL_NETWORK_STREAMÚ
ABC_STREAMÚNBA_TV_STREAMÚ
TNT_STREAMÚnba_settingsÚ
FS1_STREAMÚ
TBS_STREAMÚFOX_MLB_STREAM)r^   Ú	team_slugZnetwork_overriderÊ  r  r(   Z	prime_urlZ	sling_urlr#   r#   r$   Úobtener_url_asignadaß  sb        
 


 
 
  
 

 
   r  )Zdependencies)Úbuild_routerc                   C   s   t S r7  ©Úsecurity_configr#   r#   r#   r$   rÔ    rÕ  ú/©rH   c              
   C   sh   t j t j t¡d¡}z6t|ddd��}t| ¡ d�W  5 Q R £ W S Q R X W n   tdd� Y S X d S )Nz
panel.htmlr   zutf-8)Úencoding)Úcontentz<h1>Falta panel.html</h1>)r   r   rÐ   rn  ro  r   r   rq  )rH   Z	html_pathr"   r#   r#   r$   Ú
show_panel  s    &r  z/api/systemc           
      C   s¶   t  ¡ }t ¡ }|t }|dkrZ|jtj }|jtj }|d d|  }|d d|  }nd}d}|a|at jd d�}t  ¡ }	||	j	t
|	jd dƒt
|	jd dƒt
|dƒt
|dƒdœS )	Nr   é   i   g        )rÌ  i   @r(  )Úcpu_percentZram_percentZram_used_gbZram_total_gbÚtx_mbpsÚrx_mbps)ÚpsutilÚnet_io_countersrè   Úlast_net_timeÚ
bytes_sentÚlast_net_ioÚ
bytes_recvr  Zvirtual_memoryÚpercentÚroundÚusedÚtotal)
rH   Zcurrent_net_ioÚcurrent_timeZ	time_diffr  r  r  r  ZcpuZramr#   r#   r$   Úget_system_stats"  s*    úr  z/api/football/previewc                 C   s
   t dd�S )NFrè  ©rë  r  r#   r#   r$   Úfootball_previewA  s    r  z/api/football/publishc                 C   s
   t dd�S )NTrè  r  r  r#   r#   r$   Úfootball_publishD  s    r  z/api/football/eventsc                 C   s
   dt ƒ iS )Nr  )Úfootball_listr  r#   r#   r$   Úfootball_eventsG  s    r   c              	   C   sL   dd l }|jddd��}| d| d f¡ ¡ }W 5 Q R X |rH|d pJdS dS )Nr   z.file:/var/lib/hermes-nexus/football.db?mode=roT)Zuriz6SELECT manual_url FROM football_links WHERE event_id=?rå  rƒ   )Úsqlite3ÚconnectZexecuteZfetchone)rJ  r!  ZdbZfilar#   r#   r$   Úfootball_manual_urlM  s    þþr#  c                 C   s   ddl m} || d ƒpdS )Nr   )Ú
get_targetrå  rƒ   )Úhermes_football_links_v3r$  )rJ  r$  r#   r#   r$   Úfootball_target_urlY  s    r&  c                 C   sD   ddl m} || d ƒ}|d r8d| d  dd¡ d nd	|d
 fS )Nr   )Ú	get_linksrå  Úassignedz/live/futbol/ú:rÎ   ú.m3u8rƒ   r*   )r%  r'  rÒ   )rJ  r'  r(   r#   r#   r$   Úfootball_link_status]  s    r+  z/api/status)r^   r  rH   c           -      C   sš  | dkrddd„ t |ƒD ƒiS | tkr.dg iS |r6|ntƒ }t | i ¡}|sh| tkrX|rh| dk�r.|�s.i }| tk�r’�ztjt|  › d|› �dd�}| ¡ }| d	g ¡D ]Î}| d
i ¡ di ¡ dd¡}	|d d }
d}|
 d¡�rd |
d d  dg ¡¡ 	¡ }| dk�rt
|ƒ}n
|�s"d}|
 dg ¡D ]H}| di ¡}t| |ƒ}|| dd¡| dd¡|	| dd¡dœ||< �q.qª|}W n   Y nX �nœ| dk�r.�z‚|d d… › d|dd… › d|dd … › �}d|› d �}d!d"d#d$d%d&œ}tj||dd'�}| ¡ }g }| d(i ¡}d)|k�r8t|d) tƒ�r8| |d) ¡ d*|k�r`t|d* tƒ�r`| |d* ¡ d+|k�rˆt|d+ tƒ�rˆ| |d+ ¡ t d,¡}|D �]€}| d-d¡}d}|d.k�r¼d/}n|d0k�rÊd1}| d2d¡}||k�rî|d/k�rî�q–|}|�r„z~| d3¡}|�std4ƒ‚t t|ƒ d5d6¡¡}|jd k�r@tj |¡}| |¡}| ¡ }t |¡}|dk�rt||k�rtd/}W n   Y nX | d7d8¡}| d9d:¡}|› d;|› �}t|ƒ} t|ƒ}!td  ¡ D ]N\}}"d<d„ |" d=d¡ d>¡D ƒ}#t d?d@„ |#D ƒƒ�rÆdA|||ddœ||< �qÆ�q–|}W n   Y nX g }$t|   ¡ D �]P\}}| dB|¡}%| |%i ¡}&|& dCd¡}'| dk�r€t
|'ƒ}'n|'�s–|& dD¡�r–d}'|& dd¡}(t! | i ¡ |%d¡})| dEd¡}*| dF¡�pædG| › dH| dI|¡› dJ�}+|%dKk�rødL},n2| dMk�r|(�p|*�p|)�p|+},n|(�p(|)�p(|+},|$ "|t#| ||ƒ|,t$| ||'ƒt%|   |d¡t&t'|   |i ¡ƒ|'|& dNd¡|& dDd¡|& dd¡dOœ
¡ �q>d|$iS )PNZfutbolZequiposc                 S   s”   g | ]Œ}|d    dd¡|d |d | dd¡|d |d |d d |d  |d	 |d
 |d |d t|ƒd t|ƒt|ƒd t|ƒ|d  ddœ‘qS )rå  r)  rÎ   Úhomer  Ú	away_logorƒ   Úawayz contra Z
starts_utcr  r  r^   r   r&  )rå   r   r  r-  r,  r.  r  r  r  r  rK  Úassigned_urlÚ
manual_urlZlink_sourceZ
target_urlrå  Úviewers)rÒ   rÕ   r+  r#  r&  )r]   rA   r#   r#   r$   r5  e  s&   ú  
    
  
   ûzget_status.<locals>.<listcomp>rZ   r   r  rÛ   r  r  r  r  r  r  r   rƒ   r  rÌ   r	  rV   r
  r  rQ   r  r  r  r  é   rÎ   é   r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  rÁ   r%  r&  r'  r(  r;   r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  c                 S   s   g | ]}t |ƒ‘qS r#   r3  r4  r#   r#   r$   r5  Ñ  s     r�   r6  c                 s   s   | ]}|o|t kV  qd S r7  r±  r8  r#   r#   r$   rË   Ò  s     zget_status.<locals>.<genexpr>r<  r�   r  r  r·   r¶   ú"https://a.espncdn.com/i/teamlogos/ú/500/r`   ú.png©rŒ   ZmlsmlswrapupZmlsmlscountdownZmlsmlslapreviaú5https://a.espncdn.com/i/teamlogos/leagues/500/mls.png©rY   rZ   r[   r  )
rå   r   r  r/  r0  r1  r  r  r  r  )(r  rë   rÇ   r>  rÕ   r=  r:   r    rÐ   rù   rý   rÙ   r?  rì   r@  rÂ   rÃ   rA  r   rB  r1   rÒ   rC  rD  rE  rF  rG  rÄ   rÔ   rÖ   r×   râ   rH  rã   r„  rÿ   r  rÉ  r   rí   )-r^   r  rH   Ztarget_dateZinfo_temporalZtemp_mappingrä   r(   rJ  r  rK  rL  rM  rN  rå   Zlmp_daterO  rP  rQ  rR  rÆ   rS  rD   r  rT  rU  rV  rW  rÄ   rX  rY  r  r:  r;  rØ   rZ  Zequipos_datar�   rÊ  Únetwork_valÚlogo_apiÚ
logo_cacheÚlogo_dynamicÚlogo_fallbackÚ
logo_finalr#   r#   r$   Ú
get_statusb  s   ú 






û

,û


 
 


  û

&






ör@  z/api/nba_sourcec                 C   s   t S r7  )rþ  r  r#   r#   r$   Úget_nba_source  s    rA  ©r(   rH   c                 C   s   | j td< ddiS )Nr*   r  Úok)r*   rþ  rB  r#   r#   r$   Úset_nba_source  s    
rD  z/api/monitorc                 C   sH   i }t  ¡ D ]6\}}| ¡ D ]$\}}||| ¡ › d| ¡ › d�< qq|S )Nz (rm  )rí   r×   rù   )rH   Zflat_viewersr^   rÞ   rQ   r   r#   r#   r$   Úget_monitor  s
     rE  z/api/securityc                 C   s   t S r7  r  r  r#   r#   r$   Úget_sec  s    rF  c                 C   s.   | j td< dd„ | jD ƒtd< ttƒ ddiS )Nr   c                 S   s   g | ]}|  ¡ r|  ¡ ‘qS r#   )rr  )r]   ré   r#   r#   r$   r5    s      zupdate_sec.<locals>.<listcomp>r   r  rC  )r   r  r   r)   rB  r#   r#   r$   Ú
update_sec  s    
rG  z/api/overridec                 C   sN   | j tkr| j nd}| j ¡ r4| j ¡ t| | j< nt|  | jd ¡ ddiS )NrT   r  rC  )r^   rë   r?   rr  rÉ  rQ   Úpop)r(   rH   r^   r#   r#   r$   Úset_override   s
    
rI  z
/api/check)r?   rH   c                 Ã   s–   z|t jdd�4 I d H šX}|j| dd�I d H }|jdkrRddiW  5 Q I d H R £ W S ddiW  5 Q I d H R £ W S Q I d H R X W n   ddi Y S X d S )	NF)Úverifyg      @rÛ   rz  r  ZonlineZoffline)r:   ZAsyncClientrÕ   rD   )r?   rH   Úclienträ   r#   r#   r$   Úcheck_stream)  s    
,rL  z!/api/force_sync_o11/{provider_id})rÆ  rH   c                 C   sÜ   dd l }| dkr*|jtdd� ¡  ddiS | dkrL|jtdd� ¡  dd	iS | d
krn|jtdd� ¡  ddiS | dkr�|jtdd� ¡  ddiS | dkr²|jtdd� ¡  ddiS | dkrÔ|jtdd� ¡  ddiS ddiS )Nr   rX   )rM   rX   rÒ  Trñ  r  zIniciando MLS...rµ   )rM   rµ   zPPV / Disney+TzIniciando Disney+...rº   )rN   rº   rÖ  TzIniciando Prime Video...rZ   )rM   rZ   r³  TzIniciando LMP...r�  )rO   r�  zPPV / Triller TVTzIniciando Triller TV...r¼   )rM   r¼   rØ  TzIniciando UFC & Zuffa...zPanel desconocido.)rô  rõ  rÈ  rö  )rÆ  rH   rô  r#   r#   r$   Ú
force_sync4  s(    rM  z/download/{filename})ÚfilenameÚrequestrH   c                 C   s¤  |j  dd¡}t d¡}t |¡ ¡ }t|ƒ}dg}| dk�r\tD �] }t	|  
¡ D �]ì\}	}
t |i ¡ |
 d|	¡i ¡}| dd¡}d	}|�r4| ¡ }d
|ks°d|ks°d|kr¶d}n~zbd|k�rt | dd¡¡}|jd krêtj |¡}| |¡}| ¡ |k�rd}n||k�rd}W n   ||k�r.d}Y nX |rT|
 d|	¡}| dd¡}t |i ¡ |d¡}|
 dd¡}|
 d¡�p”d|› d|
 d|	¡› d�}|dk�r¦d}n2|dk�rÈ|�pÄ|�pÄ|�pÄ|}n|�pÖ|�pÖ|}t||	|
ƒ}| d|	› d|› d|› �¡ |dk�r$| d|› d |	› d!�¡ qT| d|› d |› d"|	› d!�¡ qTqBtd# |¡d$d%id&�S |  d'd¡}|tk�r†|d(k�r†td)d*�‚|d(k�r”tn|g}|D ]Ð}t	|  
¡ D ]¼\}	}
|dk�rÚ|
 d¡�pÖ|
 dd+¡}nd|› d|
 d|	¡› d�}t||	|
ƒ}| d|	› d|› d,| ¡ › d-|› �¡ |dk�rJ| d|› d |	› d!�¡ n| d|› d |› d"|	› d!�¡ �q®�qž|d(k�r~d.n|› d'�}td# |¡d$d/|› �id&�S )0NrK   ú51.81.243.2:8005rÁ   z#EXTM3Uztoday_playlist.m3ur�   r  rƒ   Fú24/7ÚLIVEõ   ðŸ”´TÚTr,  r-  r  r·   r¶   r4  r5  r`   r6  r7  r8  r9  z#EXTINF:-1 tvg-id="z" tvg-logo="z" group-title="CARTELERA HOY",rT   rà   ú/live/r*  r  r•  zContent-Dispositionz&attachment; filename=Cartelera_Hoy.m3u)rF   z_playlist.m3uÚallé”  )rD   z6https://a.espncdn.com/i/teamlogos/leagues/500/espn.pngz" group-title="z VIP",zMaster_Hermes_Nexus.m3uzattachment; filename=)rF   rÕ   rÂ   rÃ   r   rÄ   r  r1   rë   rÖ   r×   r>  rù   rB  rÒ   rC  rD  rE  rF  rã   rÿ   r„  r   rÐ   r   )rN  rO  rH   rK   rÆ   Útoday_date_objÚtoday_iso_strr£  r^   rå   r(   rÊ  r  Úis_todayÚmatch_upperr¨  r©  r�   r;  r<  r=  r>  r?  Zdisplay_nameZtarget_leaguesÚlræ   Úreal_filenamer#   r#   r$   Údownload_playlistK  sz    








&


"

&
&r^  z/live/{league}/{team}.m3u8z/live/{league}/{team}.ts)r^   rQ   rO  c                 Ã   s  |j j}t d¡r.|t dg ¡kr.tddd�‚| tkrBtddd�‚| ¡  dd	¡ ¡ }|t	|  krntdd
d�‚| dkr–ddl
m} ||ƒs–tddd�‚|j dd¡}|t|  kr¼i t|  |< t ¡ |dœt|  | |< t| |ƒ}|søt	|  |  dd	¡}t|dd�S )Nr   r   i“  z.Acceso Denegado: IP no autorizada en Whitelist)rD   rE   rW  zLiga no soportadarÎ   rƒ   zEquipo no encontradorZ   r   )Úaccess_allowedzLMP fuera de ventana autorizadar  ZDesconocido)rè   Ú
user_agentr   i.  )r?   rD   )rK  rK   r  rÕ   r   rë   rÏ   rÒ   rr  rÖ   rã  r_  rF   rí   rè   r  r   )r^   rQ   rO  Z	client_ipr  r_  r`  rò  r#   r#   r$   Úresolve_team_streamž  s(    
ra  z/live/{team}.m3u8z/live/{team}.ts©rQ   rO  c                 Ã   s   t d| |ƒI d H S )NrT   )ra  rb  r#   r#   r$   Úresolve_nfl_legacy_stream¹  s    rc  z/api/today_events)rO  rH   c                 C   s�  | j  dd¡}t d¡}t |¡ ¡ }t|ƒ}g }tD �]:}t	|  
¡ D �]&\}}	t |i ¡ |	 d|¡i ¡}
|
 dd¡}d}|�r$| ¡ }d|ks¤d	|ks¤d
|krªd}nzz^d|krøt | dd¡¡}|jd krÜtj |¡}| |¡}| ¡ |kröd}n||k�rd}W n   ||k�rd}Y nX |rH|
 dd¡}|dk�rHt|ƒ}n|�s^|
 d¡�r^d}|	 d|¡}|
 dd¡}t |i ¡ |d¡}|	 dd¡}|	 d¡�pºd|› d|	 d|¡› d�}|dk�rÌd}n2|dk�rî|�pê|�pê|�pê|}n|�pü|�pü|}|dk�rd|› d|› d�}nd|› d|› d |› d�}t|  |d¡}| ||t|||	ƒ|
 d!d¡||||d"œ¡ qHq6d#d$„ }|j|d%� d&|iS )'NrK   rP  rÁ   r�   r  rƒ   FrQ  rR  rS  TrT  r,  r-  r  rV   r
  r  r·   r¶   r4  r5  r`   r6  r7  r8  r9  rT   rà   rU  r*  r  r  )r^   rå   r   r  rè   r  Ú
hermes_urlr0  c                 S   s0   | d }d|  ¡ ks(d|  ¡ ks(d|kr,dS |S )Nrè   rQ  rR  rS  z
0000-00-00rø   )r…  rÓ   r#   r#   r$   Úsort_key  s     z"get_today_events.<locals>.sort_key)Úkeyr  )rF   rÕ   rÂ   rÃ   r   rÄ   r  r1   rë   rÖ   r×   r>  rù   rB  rÒ   rC  rD  rE  rF  rý   rã   rÉ  r„  rÿ   Úsort)rO  rH   rK   rÆ   rX  rY  Z
today_listr^   rå   r(   rÊ  r  rZ  r[  r¨  r©  r:  r�   r;  r<  r=  r>  r?  rd  r0  re  r#   r#   r$   Úget_today_events¾  sx    








&




ørh  Ú__main__z0.0.0.0iE  )rK   Úport)F)F)F)rM   N)F)N)ŠZhermes_vaultr   Z hermes_player_v4_final_candidater   Zplayer_routerZ
hermes_apir   Zhermes_routerr:   Úuvicornr   rG   rè   r    r  rÈ   rœ  r   rÂ   Zhermes_footballr   rë  r   r  Útypingr	   Zfastapir
   r   r   r   Zfastapi.responsesr   r   r   Zfastapi.securityr   r   Zfastapi.staticfilesr   Z!apscheduler.schedulers.backgroundr   Zpydanticr   ÚappÚsecurityZmountr   rÐ   rn  ro  r   r%   r)   r  rþ  r+   r3   r5   r6   rB   rJ   r  r  r  r™  rù  rû  rø  rú  r   r  rÿ  rü  rý  rR   rS   rë   r>  rÉ  rí   rÖ   r=  rÀ   rã   rÇ   rÔ   rÙ   rç   rî   rû   rý   rÿ   r[  rw  r‡  rª  rÅ  r1   rÈ  rË  Z	schedulerZadd_jobrß  rä  rï  rö  Zon_eventr÷  r  Zdependency_overridesZinclude_routerZfootball_stage2_routerr  rÕ   r  r  r  r;   r  r   r#  r&  r+  r@  rA  rD  rE  rF  rG  rI  rL  rM  r^  ra  rc  rh  r,   r#   r#   r#   r$   Ú<module>   s  (	þþþ÷à#â!â ÂBú	ú	ú	ú	ú	ú×3ö€ ž gû3		u8Kh Y:.ú
   ÿ
	.
þ





& !

 


 
 
 

 
"R




 P