U
    ¯(ÙjY} ã                G   @   sÀ  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 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( )ej( *e+¡d¡d�dd� ej( )ej( *e+¡d¡Z,dd„ Z-dd„ Z.e-ƒ a/ddiZ0G dd„ de$ƒZ1G dd„ de$ƒZ2dZ3dZ4dd„ Z5ee&ƒfedœd d!„Z6e 7¡ a8e
 
¡ a9d"d#d$œd%d&d$œd'd(d$œd)œZ:d*Z;d+Z<d,Z=d-Z>d.Z?d/Z@d0ZAd1ZBd2ZCd3d4„ ZDd5d6„ ZEd7d8d9d:d;d<d=d>gZFd?d@„ eFD ƒaGdAd@„ eFD ƒZHdBd@„ eFD ƒZIdCdDdEdFœdGdHd/dFœdIdJdKdFœdLdMdNdFœdOdPdQdFœdRdSdTdFœdUdVdWdFœdXdYdZdFœd[d\d]dFœd^d_d`dFœdadbdcdFœdddededFœdfdgdhdFœdidjdkdFœdldmdndFœdodpdqdFœdrdsdtdFœdudvdwdFœdxdvdwdFœdydzd{dFœd|d}d~dFœdd€d�dFœd‚dƒd„dFœd…d†d‡dFœdˆd‰dŠdFœd‹d‰dŠdFœdŒd�dŽdFœd�d�d‘dFœd’d“d”dFœd•d–d—dFœd˜d™dšdFœd›dœd�dFœdžœ dCeDdŸƒd œdGeDd¡ƒd œdIeDd¢ƒd œd£eDd¤ƒd œd¥eDd¦ƒd œd§eDd¨ƒd œdUeDd©ƒd œdXeDdªƒd œd«eDd¬ƒd œdaeDd­ƒd œdfeDd®ƒd œdoeDd¯ƒd œd°eDd±ƒd œd²eDd³ƒd œdyeDd´ƒd œdµeDd¶ƒd œd|eDd·ƒd œd¸eDd¹ƒd œdºeDd»ƒd œd¼eDd½ƒd œdŒeDd¾ƒd œd�eDd¿ƒd œdÀeDdÁƒd œd’eDdÂƒd œd•eDdÃƒd œdÄeDdÅƒd œd˜eDdÆƒd œdÇeDdÈƒd œdÉeDdÊƒd œdËeDdÌƒd œdÍœdGdÎeEdÏƒdÐœd£dÎeEdÑƒdÐœdÒdÎeEdÓƒdÐœdÔdÎeEdÕƒdÐœdRdÎeEdÖƒdÐœdXdÎeEd×ƒdÐœd[dÎeEdØƒdÐœd^dÎeEdÙƒdÐœdadÎeEdÚƒdÐœdÛdÎeEdÜƒdÐœdfdÎeEdÝƒdÐœdidÎeEdÞƒdÐœdxdÎeEdßƒdÐœdàdÎeEdáƒdÐœdâdÎeEdãƒdÐœdydÎeEdäƒdÐœdµdÎeEdåƒdÐœd|dÎeEdæƒdÐœdçdÎeEdèƒdÐœdédÎeEdêƒdÐœdëdÎeEdìƒdÐœdídÎeEdîƒdÐœdŒdÎeEdïƒdÐœdðdÎeEdñƒdÐœdòdÎeEdóƒdÐœdôdÎeEdõƒdÐœdödÎeEd÷ƒdÐœdÉdÎeEdøƒdÐœdùdÎeEdúƒdÐœd›dÎeEdûƒdÐœdüœi d;dýdÎdþdÿ�d œd;dýdÎ�ddÿ�d œdG�ddÎdþ�d�d œdG�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 œdR�d
dÎdþ�d�d œdR�d
dÎ�d�d�d œdU�ddÎdþ�d�d œdU�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 œdf�ddÎdþ�d�d œdf�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 œdy�d"dÎdþ�d#�d œdy�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 œdŒ�d6dÎdþ�d7�d œdŒ�d6dÎ�d�d7�d œdò�d8dÎdþ�d9�d œdò�d8dÎ�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þ�dA�d œ�d?�d@dÎ�d�dA�d œd•�dBdÎdþ�dC�d œd•�dBdÎ�d�dC�d œdÄ�dDdÎdþ�dE�d œdÄ�dDdÎ�d�dE�d œdÉ�dFdÎdþ�dG�d œdÉ�dFdÎ�d�dG�d œ�dH�dIdÎdþ�dJ�d œ�dH�dIdÎ�d�dJ�d œ�dKœ>�dL�dMdÎ�dNdÎ�dO�dPœ�dQ�dRdÎ�dNdÎ�dO�dPœ�dS�dTdÎ�dUdÎ�dV�dPœ�dW�dXdÎ�dYdÎ�dZ�dPœ�d[�d\dÎ�dYdÎ�dZ�dPœ�d]�d]dÎ�dYdÎ�dZ�dPœ�d^œ�d_�d`dÎ�da�dbœ�dc�dddÎ�de�dbœ�df�dgdÎ�dh�dbœ�di�djdÎ�dk�dbœ�dl�dmdÎ�dn�dbœ�do�dpdÎ�dq�dbœ�dr�dsdÎ�dt�dbœ�du�dvdÎ�dw�dbœ�dx�dydÎ�dz�dbœ�d{�d|dÎ�d}�dbœ�d~œ
i �dœZJ�d€�d��d‚�dƒ�d„�d…œZKG �d†�d‡„ �d‡e$ƒZLG �dˆd„ de$ƒZ2�d‰d@„ eFD ƒZM�dŠ�d‹„ ZN�dŒ�d�„ ZO�dŽ�d�„ ZP�d��d‘„ ZQ�d’�d“„ ZR�d”�d•„ ZS�d–�d—„ ZT�d˜�d™„ ZU�dš�d›„ ZV�d�dœ�d�„ZW�d�dž�dŸ„ZX�d�d �d¡„ZY�d�d£�d¤„ZZ�de[e[e[�d¥œ�d¦�d§„Z\�d¨�d©„ Z]e"�dª�d«�Z^e^j_eV�d¬�d­�d®� e^j_eX�d¬�d¯�d®� e^j_eY�d¬�d°�d®� e^j_eR�d¬�d±�d²� e^j_e]�d³�d´�d¯d �dµ� e^j_�d¶�d·„ �d¬�d°�d®� e^j_�d¸�d·„ �d¬�d±�d®� e^j_�d¹�d·„ �d¬�dº�d®� e^j_�d»�d·„ �d¬�d¼�d®� �d½�d¾„ Z`�d¿�dÀ„ Zae^j_ea�d¬�d­�dÁ�dÂ�d�dÃ� e^ b¡  e% c�dÄ¡�dÅ�dÆ„ ƒZd�d	�dÇ�dÈ„Zee6e%jfe< e%jgeee6ƒg�dÉ� e%jgeee6ƒg�dÉ� e% h�dÊ¡ee6ƒfe[�dËœ�dÌ�dÍ„ƒZie% h�dÎ¡ee6ƒfe[�dËœ�dÏ�dÐ„ƒZje% h�dÑ¡d7dee6ƒfe[e[e[�dÒœ�dÓ�dÔ„ƒZke% h�dÕ¡ee6ƒfe[�dËœ�dÖ�d×„ƒZle% m�dÕ¡ee6ƒfe2e[�dØœ�dÙ�dÚ„ƒZne% h�dÛ¡ee6ƒfe[�dËœ�dÜ�dÝ„ƒZoe% h�dÞ¡ee6ƒfe[�dËœ�dß�dà„ƒZpe% m�dÞ¡ee6ƒfe1e[�dØœ�dá�dâ„ƒZqe% m�dã¡ee6ƒfeLe[�dØœ�dä�då„ƒZre% h�dæ¡ee6ƒfe[e[�dçœ�dè�dé„ƒZse% h�dê¡ee6ƒfe[e[�dëœ�dì�dí„ƒZte% h�dî¡ee6ƒfe[ee[�dïœ�dð�dñ„ƒZue% h�dò¡e% h�dó¡e[e[e�dôœ�dõ�dö„ƒƒZve% h�d÷¡e% h�dø¡e[e�dùœ�dú�dû„ƒƒZwe% h�dü¡ee6ƒfee[�dýœ�dþ�dÿ„ƒZxey�d k�r¼ejze%�d�d�d� dS (
  é    )Úrouter)Úobtener_usuario_hermesN©Údatetime)ÚList)ÚFastAPIÚHTTPExceptionÚDependsÚRequest)ÚRedirectResponseÚHTMLResponseÚPlainTextResponse)Ú	HTTPBasicÚHTTPBasicCredentials)ÚStaticFiles)ÚBackgroundScheduler)Ú	BaseModelz/imgZimg)Z	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   únfl_lmp_cron_candidate.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'   1   s   
r'   c                   @   s   e Zd ZU eed< dS ©ÚNBASourceModelr&   N©r(   r)   r*   r-   r,   r   r   r   r    r/   5   s   
r/   z.8287241319:AAHrtt6ja1LbxkoB8HRznABECLnXHM7T0zYZ
1797735602c              
   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: )ÚTELEGRAM_BOT_TOKENÚTELEGRAM_CHAT_IDÚhttpxÚpostÚ	ExceptionÚprint)ÚmensajeÚurlÚpayloadÚer   r   r    Úenviar_alerta_telegram<   s    ýr>   )Úcredentialsc                 C   s<   t  | jd¡}t  | jd¡}|r$|s6tddddid�‚| jS )NZZeusZLaloekmj232023i‘  zAcceso denegadozWWW-AuthenticateZBasic)Ústatus_codeÚdetailÚheaders)ÚsecretsZcompare_digestÚusernameZpasswordr   )r?   Zusuario_correctoZpass_corrector   r   r    Úverificar_credencialesH   s    ýrE   zhttp://23.237.34.58:7070zBasic YWRtaW46TVYzNTJFWlRCM0NP)ÚhostÚauthzhttp://172.111.38.198:2020zëeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjI3Mzc3MjI1NTAsInBhc3N3b3JkIjoiYjM1M2U2NjA4ZjkzZTQ0MTA4NmY1MjA2NzRkNDcyMTlhNjQ4Mjk1MGFmNDc3YzRkZDlmYzU2ZDMyMTZhMmRjNyIsInVzZXJuYW1lIjoiYWRtaW4ifQ.E2PMNGEBMdhE1NwBD7ewhgUAdrYDkX-FA1udOC0rfMczhttp://51.81.107.170:7070zBasic YWRtaW46TzFDNFdUTEYyR1lY)Úpanel_1Úpanel_primeÚpanel_trillerz†http://51.81.107.170:7070/stream/hulumiami/espn/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fz‡http://15.204.107.193:7070/stream/hulumiami/wsvn/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‡http://15.204.107.193:7070/stream/hulumiami/wtvj/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz�http://15.204.107.193:7070/stream/huluatlanta/nflnetwork/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‰http://51.81.107.170:7070/stream/hulumiami/tbseast/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fz‰http://15.204.107.193:7070/stream/huluatlanta/waga/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz…http://51.81.107.170:7070/stream/hulumiami/fs1/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fzƒhttp://51.81.107.170:7070/stream/sling/nbatv/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fzŠhttp://15.204.107.193:7070/stream/hulumiami/tnteast/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddc                 C   s   d| › d�S )Nz%http://15.204.47.5:1234/stream/sling/zW/master.m3u8?u=admin&p=8366d2f479ee25eaecd01b42960c3fe667ac6f49f2fb41d7c236fde115bd64der   ©Úteamr   r   r    Úslingr   s    rM   c                 C   s   d| › d�S )Nz'http://51.81.107.170:7070/stream/sling/zW/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fr   rK   r   r   r    Ú	nba_slingu   s    rN   ÚnflÚmlbÚnbaÚnhlÚmlsÚppvÚlmpÚtrillerc                 C   s   i | ]
}|i “qS r   r   ©Ú.0Úleaguer   r   r    Ú
<dictcomp>{   s      rZ   c                 C   s   i | ]
}|i “qS r   r   rW   r   r   r    rZ   |   s      c                 C   s   i | ]
}|i “qS r   r   rW   r   r   r    rZ   }   s      Zariz‰http://15.204.107.193:7070/stream/huluphoenix/kpho/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‡http://23.237.34.58:7070/stream/huluphoenix/ksaz/master.m3u8?u=admin&p=99dfdd1ac82f455c4de1572a9eca98c29392199d1cd5a912b6cc36f53de8848b)ÚabbrÚCBSÚFOXÚatlz‰http://15.204.107.193:7070/stream/huluatlanta/wupa/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZbalzŠhttp://15.204.107.193:7070/stream/hulubaltimore/wjz/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‹http://15.204.107.193:7070/stream/hulubaltimore/wbff/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZbufz‰http://15.204.107.193:7070/stream/hulubuffalo/wivb/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‰http://15.204.107.193:7070/stream/hulubuffalo/wutv/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZcarz‹http://15.204.107.193:7070/stream/hulucharlotte/wbtv/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‹http://15.204.107.193:7070/stream/hulucharlotte/wjzy/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddÚchizˆhttp://51.81.107.170:7070/stream/huluchicago/wbbm/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fzˆhttp://51.81.107.170:7070/stream/huluchicago/wfld/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fZcinzŒhttp://15.204.107.193:7070/stream/hulucincinnati/wkrc/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddzŒhttp://15.204.107.193:7070/stream/hulucincinnati/wxix/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZclez‹http://15.204.107.193:7070/stream/hulucleveland/woio/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddzŠhttp://15.204.107.193:7070/stream/hulucleveland/wjw/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZdalz†http://23.237.34.58:7070/stream/huludallas/ktvt/master.m3u8?u=admin&p=99dfdd1ac82f455c4de1572a9eca98c29392199d1cd5a912b6cc36f53de8848bz‰http://147.135.104.121:1234/stream/huludallas/kdfw/master.m3u8?u=admin&p=8366d2f479ee25eaecd01b42960c3fe667ac6f49f2fb41d7c236fde115bd64deZdenzˆhttp://15.204.107.193:7070/stream/huludenver/kcnc/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddzˆhttp://15.204.107.193:7070/stream/huludenver/kdvr/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZdetzˆhttp://15.204.107.193:7070/stream/huludetroit/wwj/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‰http://15.204.107.193:7070/stream/huludetroit/wjbk/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZgbzŠhttp://15.204.107.193:7070/stream/hulugreenbay/wfrv/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddÚhouz‰http://15.204.107.193:7070/stream/huluhouston/khou/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‰http://15.204.107.193:7070/stream/huluhouston/kriv/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZindzŽhttp://15.204.107.193:7070/stream/huluindianapolis/wttv/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddzŽhttp://15.204.107.193:7070/stream/huluindianapolis/wxin/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZjaxzŽhttp://15.204.107.193:7070/stream/hulujacksonville/wjax/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddzŽhttp://15.204.107.193:7070/stream/hulujacksonville/wfox/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZkcz‰http://15.204.107.193:7070/stream/huluwichita/kwch/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‰http://15.204.107.193:7070/stream/huluwichita/ksas/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZlvz‹http://147.135.104.121:1234/stream/hululasvegas/klas/master.m3u8?u=admin&p=8366d2f479ee25eaecd01b42960c3fe667ac6f49f2fb41d7c236fde115bd64dez‰http://51.81.107.170:7070/stream/hululasvegas/kvvu/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fZlarz„http://15.204.107.193:7070/stream/hulula/kcbs/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‚http://23.237.34.58:7070/stream/hulula/kttv/master.m3u8?u=admin&p=99dfdd1ac82f455c4de1572a9eca98c29392199d1cd5a912b6cc36f53de8848bZlacÚmiaz…http://23.237.34.58:7070/stream/hulumiami/wfor/master.m3u8?u=admin&p=99dfdd1ac82f455c4de1572a9eca98c29392199d1cd5a912b6cc36f53de8848bzˆhttp://147.135.104.121:1234/stream/hulumiami/wsvn/master.m3u8?u=admin&p=8366d2f479ee25eaecd01b42960c3fe667ac6f49f2fb41d7c236fde115bd64deÚminz�http://15.204.107.193:7070/stream/huluminneapolis/wcco/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz�http://15.204.107.193:7070/stream/huluminneapolis/kmsp/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZtenz‹http://15.204.107.193:7070/stream/hulunashville/wtvf/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‹http://15.204.107.193:7070/stream/hulunashville/wztv/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddÚnez‡http://15.204.107.193:7070/stream/huluboston/wbz/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‡http://51.81.107.170:7070/stream/huluboston/wfxt/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fZnoz‹http://15.204.107.193:7070/stream/huluneworleans/wwl/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‹http://51.81.107.170:7070/stream/huluneworleans/wvue/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fZnygz‹http://15.204.107.193:7070/stream/hulunuevayork/wcbs/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddzŠhttp://51.81.107.170:7070/stream/hulunuevayork/wnyw/master.m3u8?u=admin&p=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fZnyjÚphiz†http://15.204.107.193:7070/stream/huluphili/kyw/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddzˆhttp://147.135.104.121:1234/stream/huluphili/wtxf/master.m3u8?u=admin&p=8366d2f479ee25eaecd01b42960c3fe667ac6f49f2fb41d7c236fde115bd64deZpitzŒhttp://15.204.107.193:7070/stream/hulupittsburgh/kdka/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddzŒhttp://15.204.107.193:7070/stream/hulupittsburgh/wpgh/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddZsfzŽhttp://15.204.107.193:7070/stream/hulusanfrancisco/kpix/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddzŽhttp://15.204.107.193:7070/stream/hulusanfrancisco/ktvu/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddÚseaz‰http://15.204.107.193:7070/stream/huluseattle/kiro/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz‰http://15.204.107.193:7070/stream/huluseattle/kcpq/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddÚtbz‡http://15.204.107.193:7070/stream/hulutampa/wtsp/master.m3u8?u=admin&p=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddz…http://23.237.34.58:7070/stream/hulutampa/wtvt/master.m3u8?u=admin&p=99dfdd1ac82f455c4de1572a9eca98c29392199d1cd5a912b6cc36f53de8848bZwasz�http://147.135.104.121:1234/stream/huluwashington/wusa/master.m3u8?u=admin&p=8366d2f479ee25eaecd01b42960c3fe667ac6f49f2fb41d7c236fde115bd64dez�http://147.135.104.121:1234/stream/huluwashington/wttg/master.m3u8?u=admin&p=8366d2f479ee25eaecd01b42960c3fe667ac6f49f2fb41d7c236fde115bd64de) Ú	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seattlemarinersZ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padresrp   Zmarinersrg   ZraysZrangersZbluejaysZ	nationalsÚ Zatlantahawks)r[   rv   rM   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_namerv   Ú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ÚnycfcZ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ƒ   rv   Ú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ƒ   rv   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)rO   rP   rQ   rR   rS   rT   rU   rV   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)rO   rP   rQ   rR   rS   c                   @   s&   e Zd ZU eed< eed< eed< dS )ÚOverrideModelrY   rL   r;   Nr0   r   r   r   r    rµ   l  s   
rµ   c                   @   s   e Zd ZU eed< dS r.   r0   r   r   r   r    r/   q  s   
c                 C   s   i | ]
}|i “qS r   r   rW   r   r   r    rZ   t  s      c                  C   s   t  d¡} t | ¡ d¡S )NúAmerica/Tijuanaz%Y%m%d)ÚpytzÚtimezoner   ÚnowÚstrftime)Útzr   r   r    Úget_today_strv  s    
r¼   c                 C   sH   | sdS t | ƒ ¡ }d dd„ t d|¡D ƒ¡ dd¡ dd¡ dd¡S )Nry   c                 s   s    | ]}t  |¡d kr|V  qdS )ZMnN)ÚunicodedataÚcategory)rX   Úcr   r   r    Ú	<genexpr>~  s      z!normalize_text.<locals>.<genexpr>ZNFDú Ú.ú-)r-   ÚlowerÚjoinr½   Z	normalizeÚreplace)r1   Útr   r   r    Únormalize_textz  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   ry   ZshortDisplayNameZabbreviationrS   r�   r–   r’   r‰   r†   r�   r—   r™   r¤   r¨   r�   r•   r”   r¢   )ZrbnyZnyrbZ	newyorkrbra   Zintermiamicfr‘   Zsportingkansascityr_   Zchicagofirefcr^   Zatlantaunitedfcr`   Zhoustondynamofcrb   Zminnesotaunitedfcr˜   r™   Zmontrealre   Zseattlesoundersfcr§   ZvancouverwhitecapsfcrŽ   r•   Zlosangelesfootballclubr“   rx   rQ   r   r€   r�   )r   Zphilard   Zblazersrz   r{   Zutar„   Fr[   r|   r}   )rÈ   ÚgetÚSTREAM_DATABASEÚitemsrÄ   )	rY   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)rO   rP   rQ   rS   é   ©r3   Úsportsr   ÚleaguesÚteamsrL   ÚlogosZhrefry   zhttp://úhttps://ú?z?w=500&h=500&transparent=true)	rË   r6   rÉ   r   rÍ   rÆ   ÚsplitÚOFFICIAL_LOGOSr8   )Z	endpointsrY   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   )rX   Úipr$   ©r¹   r   r    rZ   Ó  s       z%clean_old_viewers.<locals>.<dictcomp>)rÜ   ÚLEAGUESÚlistÚactive_viewersrË   )rY   rL   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 )NrV   rƒ   r…   rS   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É   )rY   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�zBt 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 �]L}| d'd
¡}d}|d(k�rLd)}n|d*k�rZd+}| d,d¡}||k�r~|d)k�r~�q&|}|�rÚzDt |d-¡}| |¡}| ¡ }t |¡}|dk�rÊ||k�rÊd)}W n   Y nX | d.d/¡}| d0d1¡}|› d2|› �}t|ƒ‰ t|ƒ‰td"  ¡ D ]T\}} d3d4„ |  d5d¡ d6¡D ƒ}!t‡ ‡fd7d8„|!D ƒƒ�rd9|||ddœ||< �q�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   ry   Ú
broadcastsrÁ   ÚnamesrQ   ÚLOCALÚcompetitorsrL   Ú	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©rB   r3   rU   ÚresponseÚgamesÚ	prevGamesÚ	nextGamesÚ
gameStatusé   Úiné   r7   ÚlocalFullDateú%Y-%m-%d %H:%M:%SÚawayTeamShortÚAwayÚhomeTeamShortÚHomeú vs c                 S   s   g | ]}t |ƒ‘qS r   ©rÈ   ©rX   rî   r   r   r    Ú
<listcomp>S  s     z!sync_schedule.<locals>.<listcomp>rƒ   ú|c                 3   s"   | ]}|o|ˆ kp|ˆkV  qd S ©Nr   ©rX   r   ©Ú
away_cleanÚ
home_cleanr   r    rÀ   T  s     z sync_schedule.<locals>.<genexpr>úLMP TV)r¼   ÚESPN_API_URLSrË   r6   rÉ   r   rÅ   rí   rñ   rÍ   Úcurrent_game_infor8   r·   r¸   r   r¹   rº   Ú
isinstancerà   ÚextendÚstrptimeÚlocalizeÚ	isoformatrÈ   rÊ   rÖ   Úany)#Z	today_strrY   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Úgamer@   rù   Úlocal_date_strÚgame_date_isoÚdtÚdt_awarer¹   Ú	away_nameÚ	home_namer  rÌ   Ú	o11_namesr=   r   r*  r    Úsync_scheduleò  s°    





û
û

 
 

ûrH  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_tokenry   uS   âš ï¸� API Disney+: Falta el archivo 'refreshToken.txt' en la carpeta del servidor.)Nry   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)ZqueryZ	variablesZoperationNameg      $@)r   rB   r3   Úerrorsu*   â�Œ API Disney+: El token expirÃ³. Error: ÚmessageÚ
extensionsZsdkÚtokenZaccessTokenr"   i°6  )rJ  rI  u+   âœ… API Disney+: Token renovado con Ã©xito.u   â�Œ API Disney+: Error HTTP (ú))r   r   rÅ   ÚdirnameÚ__file__r   r   Úloadsr   ÚreadrÜ   rÉ   Ústripr6   r7   ÚwriteÚdumpsr8   r-   )Ú	is_manualZ
token_fileZrefresh_filer$   ÚmsgZrefresh_tokenr;   rB   r<   r   Z
new_accessZnew_refreshr   r=   r   r   r    Úget_disney_tokena  s`    ÷
ý
(
rc  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©Fry   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 rK  rL  rM  rN  )rO  rP  rQ  rR  r  rT   r   ç      .@r  éÈ   r$   ÚsetrË   ZpageZ
containersÚvisualsÚtitleZUnknownry   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.©Try   õD   âš ï¸� API Disney+: ConexiÃ³n exitosa, pero no detectÃ³ los eventos.)Fro  )rc  r/  rÉ   r6   r@   r   r1  ÚappendrÄ   r^  r8   )ra  rX  Z	msj_tokenZurlsrB   r6  Zlogos_encontradosZtitulos_vistosr;   r   Z	data_jsonrË   r¿   Úitemrh  ri  rÚ   ÚpidZ	title_lowrÙ   r   r   r    Úsync_disney_schedule™  s|    þû
 (

X
(ûrs  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 )9NrJ   rF   rG   ú/api/actionú*/*rN  z/config/trillertv?type=liver  )ÚAcceptÚAuthorizationúContent-TyperS  ÚRefererrR  ÚchannelsupdaterequestÚ	trillertv©ZActionZ
ProviderIdre  ©rB   r   r3   é   Úchannelsupdateapplyrf  ú/playlist.m3urw  r  Ú
z'http://51.81.107.170/triller_cache.jsonr2   rÏ   ry   ú#EXTINFÚhttpz\[(\d+)\](.*)r  rV   r  u   ðŸ”œ SCHEDULEDrú   zhttps://img.fite.tv/t/z_wide_554x200.jpgZ4534230r  rm  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ƒ   rv   r«   z
TRILLER TVr  Tu5   âœ… API TrillerTV: SincronizaciÃ³n exitosa con JSON. z eventos mapeados.rn  )Fu.   â�Œ API TrillerTV: El panel o11 no respondiÃ³.rd  Fu,   â�Œ API TrillerTV: Error de conexiÃ³n HTTP (rY  )Ú
O11_PANELSr6   r7   rÜ   Úsleepr@   rÉ   r1   r^  rÖ   r   r8   Ú
startswithÚreÚsearchÚgroupr   r2  r·   r¸   Úutcr3  Ú
astimezoner¹   r4  r/  rÊ   Úlenr-   )ra  rF   rG   Z
url_actionZheaders_o11Ú
resp_applyÚm3u_urlZresp_m3uÚlinesZremote_cacheZ	cache_urlZr_cacher6  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_strrC  Ztz_tjÚdt_tjZnow_tjr=   r   r   r    Úsync_triller_scheduleä  s°    
ú	









  û
	û
   r–  rH   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.
    rF   rG   Fr€  ru  úes-MXr  )rv  úAccept-Languagerw  rR  g      4@r  rf  r�  r  rH   rS   ry   rv   rU   rª   rT   r©   r­   r±   r³   r´   r²   rI   r®   rQ   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  rm  rl  r  )r  r  r  rù   z/stream/sporthubparamount/u   ðŸ”´ EN VIVOzZUFFA BOXINGr°   c                 3   s   | ]}|ˆ kV  qd S r(  r   ©rX   Úk©Zevent_name_cleanr   r    rÀ   ±  s     z parse_o11_m3u.<locals>.<genexpr>)ZespanolZespanaZspanishZ	enespanolu   UFC ESPAÃ‘OLzUFC ENGLISHzLMP:zLMP :ÚLMPc                 S   s   g | ]}t |ƒ‘qS r   r$  r%  r   r   r    r&  Â  s     z!parse_o11_m3u.<locals>.<listcomp>r'  c                 3   s   | ]}|o|ˆ kV  qd S r(  r   r)  r�  r   r    rÀ   Ã  s     c                 3   s   | ]}|ˆ kV  qd S r(  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)ZdayszPRIME VIDEOc                 3   s   | ]}|ˆ kV  qd S r(  r   )rX   Zwordr�  r   r    rÀ   ë  s     )rt   rk   ro   rj   rr   rl   rm   rq   rs   ri   ru   rh   Z
blackhawksZdonetskZredbullsrn   Z	canadiensZ
mapleleafsrR   ZuclZuefaZ	championsz/stream/primemx/z/stream/nbar|   r}   Zbrooklynz\bu   ðŸ”´ NBA LEAGUE PASSr  r  rð   rù   TN)$r…  rÉ   r6   r@   r1   r^  rÖ   r�  rÊ   r‡  rÈ   rˆ  r‰  rŠ  rí   rË   rÄ   r/  Ú
setdefaultÚupdater5  Ú
IGNORECASEÚintr·   r¸   r   r¹   r3  ZyearZmonthZdayr¡  r4  Úkeysrï   r8   )"Ú	panel_keyÚprovider_scoperF   rG   r�  rB   rØ   r�  rÙ   r‘  r’  Zevent_name_fullZ
logo_matchZextracted_logoZis_spanish_streamr$   rƒ   Zis_spanish_ufcZtarget_slugZtarget_networkrG  Z
match_timer”  r“  ÚhourÚminuteZampmr»   r¹   Z	target_dtr¡  Zis_other_sportZ
actual_netr=   r   r�  r    Úparse_o11_m3uL  sP   
ü



"ü

ü
ü&
 
 


ü 
 



r«  )r§  Úprovider_idri  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 )%NrF   rG   rI   z/events/z?server=localz/config/z
?type=liveru  r—  rN  r  )rv  r˜  rw  rx  rS  ry  rR  Fu!   ðŸ”„ <b>REPORTE DE DIAGNÃ“STICO (z)</b>

z/api/provider/getre  r}  rt  rz  r|  r~  r  rf  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ª   ©ra  r�  )r…  rÉ   r6   r7   rÜ   r†  r@   r8   r–  r«  rs  r>   )r§  r¬  ri  ra  rF   rG   r  rB   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 )	NrO   r  ry   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_overridesrp  rí   rÅ   r>   )Zequipos_afectadosrÙ   Úinfor  r:   r   r   r    Úauditar_juegos_prime^  s    ÿr±  r¶   )r¸   Úintervalr  )Úminutesrõ   rÎ   é   )ZsecondsZcronZthu)Zday_of_weekr©  rª  c                   C   s   t ddddƒS )NrH   rS   úMLS Apple TVF©r®  r   r   r   r    Ú<lambda>v  ó    r·  c                   C   s   t ddddƒS )NrH   rª   zPPV / ESPN MX (La Granja)Fr¶  r   r   r   r    r·  w  r¸  c                   C   s   t ddddƒS )NrI   r¯   úPPV / Prime VideoFr¶  r   r   r   r    r·  x  r¸  é   c                   C   s   t ddddƒS )NrH   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_nextrN  r  r  r  )rv  rS  ry  rR  rÎ   )ZparamsrB   r3   úhermes_lmp_epg_live.jsonzHERMES LMP: EPG INVALIDOFzHERMES LMP: EPG ACTUALIZADOTzHERMES LMP EPG ERROR:)Úhermes_lmp_epg_cache_v2r½  r   r·   r6   r¸   r¹   rº   rÉ   Zraise_for_statusr   r9   r8   rø   r(   )
r½  r   r·   r6   r»   Zfechar;   Z	respuestaÚepgr=   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À  rH   zHERMES LMP V5 ERROR:é    )rÁ  r¿  rÂ  Úhermes_lmp_v5_runtimerÃ  r…  rÊ   r8   r9   rø   r(   r-   )rÂ  rÃ  Zregistror=   r   r   r    Úhermes_lmp_tick¬  s    
rÆ  Zhermes_lmp_v5r  )r³  ÚidZmax_instancesZcoalesceZ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   )rH   ©ÚtargetÚargs)rI   )rÛ   rH  rs  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  ry   rO   rã   ræ   rç   rä   rå   ZNFLr\   r]   rQ   rv   rM   ré   rê   rè   rë   r&   rP   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)rY   Ú	team_slugZnetwork_overrider°  r  r$   Z	prime_urlZ	sling_urlr   r   r    Úobtener_url_asignadaÎ  sb        
 


 
 
  
 

 
   rÚ  )Zdependenciesú/©rD   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)Zcontentz<h1>Falta panel.html</h1>)r   r   rÅ   rZ  r[  r   r   r]  )rD   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_memoryZpercentÚroundZusedZtotal)
rD   Zcurrent_net_ioZcurrent_timeZ	time_diffræ  rè  rá  râ  ZcpuZramr   r   r    Úget_system_stats  s*    úrê  z/api/status)rY   r  rD   c           -      C   s<  | t krdg iS |r|ntƒ }t | i ¡}|sJ| tkr:|rJ| dk�rÐ|�sÐi }| tk�rn�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 �nb| dk�rÐ�zH|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�rt|d& tƒ�r| |d& ¡ d'|k�r<t|d' tƒ�r<| |d' ¡ d(|k�rdt|d( tƒ�rd| |d( ¡ t d)¡}|D �]F}| d*d¡}d
}|d+k�r˜d,}n|d-k�r¦d.}| d/d¡}||k�rÊ|d,k�rÊ�qr|}|�r&zDt |d0¡}| |¡}| ¡ }t |¡}|d
k�r||k�rd,}W n   Y nX | d1d2¡}| d3d4¡}|› d5|› �}t|ƒ} t|ƒ}!td  ¡ D ]N\}}"d6d7„ |" d8d¡ d9¡D ƒ}#td:d;„ |#D ƒƒ�rhd<|||ddœ||< �qh�qr|}W n   Y nX g }$t|   ¡ D �]P\}}| d=|¡}%| |%i ¡}&|& d>d¡}'| dk�r"t	|'ƒ}'n|'�s8|& d?¡�r8d}'|& dd¡}(t | i ¡ |%d¡})| d@d¡}*| dA¡�pˆdB| › dC| dD|¡› dE�}+|%dFk�ršdG},n2| dHk�r¼|(�p¸|*�p¸|)�p¸|+},n|(�pÊ|)�pÊ|+},|$ |t| ||ƒ|,t| ||'ƒt|   |d¡tt |   |i ¡ƒ|'|& dId¡|& d?d¡|& d	d
¡dJœ
¡ �qàd|$iS )KNZequiposrU   rô   rõ   rÏ   rö   r÷   rø   rù   rú   rû   r   ry   rü   rÁ   rý   rQ   rþ   rÿ   rL   r   r  r  r  é   rÃ   é   r  r	  r
  r  r  r  r  r  r  r  r  r  r  r¶   r  r  r  r  r7   r  r  r  r   r!  r"  r#  c                 S   s   g | ]}t |ƒ‘qS r   r$  r%  r   r   r    r&  Œ  s     zget_status.<locals>.<listcomp>rƒ   r'  c                 s   s   | ]}|o|t kV  qd S r(  r�  r)  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©rT   rU   rV   r  )
rÙ   r   r  Zassigned_urlÚ
manual_urlZviewersr  r  r  rù   )!rß   r¼   r/  rÉ   r.  r6   r   rÅ   rí   rñ   rÍ   r0  rà   r1  r·   r¸   r   r2  r3  r4  r¹   rÈ   rÊ   rË   rÖ   r5  r×   rp  ró   rÚ  r¯  r�  rá   )-rY   r  rD   Ztarget_dateZinfo_temporalZtemp_mappingrØ   r$   r7  r÷   r8  r9  r:  r;  rÙ   Zlmp_dater<  r=  r>  r?  r»   r@  r@   rù   rA  rB  rC  rD  r¹   rE  rF  r  r+  r,  rÌ   rG  Zequipos_datar…   r°  Únetwork_valÚlogo_apiÚ
logo_cacheÚlogo_dynamicÚlogo_fallbackÚ
logo_finalr   r   r    Ú
get_status+  sô     






û

,û


 
 

  û

&






örú  z/api/nba_sourcec                 C   s   t S r(  )rÕ  rÜ  r   r   r    Úget_nba_source¾  s    rû  ©r$   rD   c                 C   s   | j td< ddiS )Nr&   r÷   Úok)r&   rÕ  rü  r   r   r    Úset_nba_sourceÂ  s    
rþ  z/api/monitorc                 C   sH   i }t  ¡ D ]6\}}| ¡ D ]$\}}||| ¡ › d| ¡ › d�< qq|S )Nz (rY  )rá   rË   rí   )rD   Zflat_viewersrY   rÒ   rL   r   r   r   r    Úget_monitorÇ  s
     rÿ  z/api/securityc                 C   s   t S r(  )Úsecurity_configrÜ  r   r   r    Úget_secÏ  s    r  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   )r^  )rX   rÝ   r   r   r    r&  ×  s      zupdate_sec.<locals>.<listcomp>r   r÷   rý  )r   r   r   r%   rü  r   r   r    Ú
update_secÓ  s    
r  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 )NrO   r÷   rý  )rY   rß   r;   r^  r¯  rL   Úpop)r$   rD   rY   r   r   r    Úset_overrideÛ  s
    
r  z
/api/check)r;   rD   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)Zverifyg      @rÏ   rf  r÷   ZonlineZoffline)r6   ZAsyncClientrÉ   r@   )r;   rD   ÚclientrØ   r   r   r    Úcheck_streamä  s    
,r  z!/api/force_sync_o11/{provider_id})r¬  rD   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   rS   )rH   rS   rµ  TrÈ  r÷   zIniciando MLS...rª   )rH   rª   zPPV / Disney+TzIniciando Disney+...r¯   )rI   r¯   r¹  TzIniciando Prime Video...rU   )rH   rU   rž  TzIniciando LMP...r{  )rJ   r{  zPPV / Triller TVTzIniciando Triller TV...r±   )rH   r±   r»  TzIniciando UFC & Zuffa...zPanel desconocido.)rË  rÌ  r®  rÍ  )r¬  rD   rË  r   r   r    Ú
force_syncï  s(    r  z/download/{filename})ÚfilenameÚrequestrD   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 )0NrF   ú51.81.243.2:8005r¶   z#EXTM3Uztoday_playlist.m3ur…   r  ry   Fú24/7ÚLIVEõ   ðŸ”´TÚTÚZú+00:00r  r¬   r«   rí  rî  r[   rï  rð  rñ  rò  z#EXTINF:-1 tvg-id="z" tvg-logo="z" group-title="CARTELERA HOY",rO   rÔ   ú/live/ú.m3u8rÛ  r�  zContent-Dispositionz&attachment; filename=Cartelera_Hoy.m3u)rB   z_playlist.m3uÚallé”  )r@   z6https://a.espncdn.com/i/teamlogos/leagues/500/espn.pngz" group-title="z VIP",zMaster_Hermes_Nexus.m3uzattachment; filename=)rB   rÉ   r·   r¸   r   r¹   r  r-   rß   rÊ   rË   r/  rí   ÚfromisoformatrÆ   Útzinfor‹  r3  rŒ  r×   ró   rp  r   rÅ   r   )r  r	  rD   rF   r»   Útoday_date_objÚtoday_iso_strr�  rY   rÙ   r$   r°  r  Úis_todayÚmatch_upperrC  r•  r…   rõ  rö  r÷  rø  rù  Zdisplay_nameZtarget_leaguesÚlrÚ   Zreal_filenamer   r   r    Údownload_playlist  sz    








&


"

&
&r  z/live/{league}/{team}.m3u8z/live/{league}/{team}.ts)rY   rL   r	  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)r@   rA   r  zLiga no soportadarÃ   ry   zEquipo no encontradorU   r   )Úaccess_allowedzLMP fuera de ventana autorizadar  ZDesconocido)rÜ   Ú
user_agentrv   i.  )r;   r@   )r  rF   r   rÉ   r   rß   rÄ   rÆ   r^  rÊ   rÅ  r  rB   rá   rÜ   rÚ  r   )rY   rL   r	  Z	client_iprÙ  r  r  rÉ  r   r   r    Úresolve_team_streamY  s(    
r  z/live/{team}.m3u8z/live/{team}.ts©rL   r	  c                 Ã   s   t d| |ƒI d H S )NrO   )r  r   r   r   r    Úresolve_nfl_legacy_streamt  s    r!  z/api/today_events)r	  rD   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 )'NrF   r
  r¶   r…   r  ry   Fr  r  r  Tr  r  r  r  rQ   rþ   r  r¬   r«   rí  rî  r[   rï  rð  rñ  rò  rO   rÔ   r  r  rÛ  r  )rY   rÙ   r   r  rÜ   r  Ú
hermes_urlró  c                 S   s0   | d }d|  ¡ ks(d|  ¡ ks(d|kr,dS |S )NrÜ   r  r  r  z
0000-00-00rì   )rq  rÇ   r   r   r    Úsort_keyÁ  s     z"get_today_events.<locals>.sort_key)Úkeyrö   )rB   rÉ   r·   r¸   r   r¹   r  r-   rß   rÊ   rË   r/  rí   r  rÆ   r  r‹  r3  rŒ  rñ   r×   r¯  rp  ró   Úsort)r	  rD   rF   r»   r  r  Z
today_listrY   rÙ   r$   r°  r  r  r  rC  r•  rô  r…   rõ  rö  r÷  rø  rù  r"  ró  r#  r   r   r    Úget_today_eventsy  sx    








&




ør&  Ú__main__z0.0.0.0iE  )rF   Zport)F)F)F)rH   N)F)N){Z hermes_player_v4_final_candidater   Zplayer_routerZ
hermes_apir   Zhermes_routerr6   Zuvicornr   rC   rÜ   r   rã  r½   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   ZappZsecurityZmountr   rÅ   rZ  r[  r   r!   r%   r   rÕ  r'   r/   r4   r5   r>   rE   rä  rç  rå  r…  rÐ  rÒ  rÏ  rÑ  r×  rØ  rÖ  rÓ  rÔ  rM   rN   rß   r/  r¯  rá   rÊ   r.  rµ   r×   r¼   rÈ   rÍ   rÛ   râ   rï   rñ   ró   rH  rc  rs  r–  r«  r-   r®  r±  Z	schedulerZadd_jobrÁ  rÆ  rÍ  Zon_eventrÎ  rÚ  Zdependency_overridesZinclude_routerrÉ   rÞ  rê  rú  rû  r7   rþ  rÿ  r  r  r  r  r  r  r  r!  r&  r(   Úrunr   r   r   r    Ú<module>   sà  (	þþþ÷































à#â!â ÂBú	ú	ú	ú	ú	ú×3ö€ ž gû3		o8Kh Y:.ú	
	.
þ


& 

 


 
 
 

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