U
    UÓj7c ã                G   @   s$  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Z*G dd„ deƒZ+G dd„ deƒZ,dZ-dZ.dd„ Z/ee ƒfedœdd„Z0e 1¡ a2e ¡ a3d d!d"œd#d$d"œd%d&d"œd'œZ4d(Z5d)Z6d*Z7d+Z8d,Z9d-Z:d.Z;d/Z<d0Z=d1d2„ Z>d3d4„ Z?d5d6d7d8d9d:d;d<gZ@d=d>„ e@D ƒaAd?d>„ e@D ƒZBd@d>„ e@D ƒZCdAdBdCdDœdEdFd-dDœdGdHdIdDœdJdKdLdDœdMdNdOdDœdPdQdRdDœdSdTdUdDœdVdWdXdDœdYdZd[dDœd\d]d^dDœd_d`dadDœdbdcdcdDœdddedfdDœdgdhdidDœdjdkdldDœdmdndodDœdpdqdrdDœdsdtdudDœdvdtdudDœdwdxdydDœdzd{d|dDœd}d~ddDœd€d�d‚dDœdƒd„d…dDœd†d‡dˆdDœd‰d‡dˆdDœdŠd‹dŒdDœd�dŽd�dDœd�d‘d’dDœd“d”d•dDœd–d—d˜dDœd™dšd›dDœdœœ dAe>d�ƒdžœdEe>dŸƒdžœdGe>d ƒdžœd¡e>d¢ƒdžœd£e>d¤ƒdžœd¥e>d¦ƒdžœdSe>d§ƒdžœdVe>d¨ƒdžœd©e>dªƒdžœd_e>d«ƒdžœdde>d¬ƒdžœdme>d­ƒdžœd®e>d¯ƒdžœd°e>d±ƒdžœdwe>d²ƒdžœd³e>d´ƒdžœdze>dµƒdžœd¶e>d·ƒdžœd¸e>d¹ƒdžœdºe>d»ƒdžœdŠe>d¼ƒdžœd�e>d½ƒdžœd¾e>d¿ƒdžœd�e>dÀƒdžœd“e>dÁƒdžœdÂe>dÃƒdžœd–e>dÄƒdžœdÅe>dÆƒdžœdÇe>dÈƒdžœdÉe>dÊƒdžœdËœdEdÌe?dÍƒdÎœd¡dÌe?dÏƒdÎœdÐdÌe?dÑƒdÎœdÒdÌe?dÓƒdÎœdPdÌe?dÔƒdÎœdVdÌe?dÕƒdÎœdYdÌe?dÖƒdÎœd\dÌe?d×ƒdÎœd_dÌe?dØƒdÎœdÙdÌe?dÚƒdÎœdddÌe?dÛƒdÎœdgdÌe?dÜƒdÎœdvdÌe?dÝƒdÎœdÞdÌe?dßƒdÎœdàdÌe?dáƒdÎœdwdÌe?dâƒdÎœd³dÌe?dãƒdÎœdzdÌe?däƒdÎœdådÌe?dæƒdÎœdçdÌe?dèƒdÎœdédÌe?dêƒdÎœdëdÌe?dìƒdÎœdŠdÌe?díƒdÎœdîdÌe?dïƒdÎœdðdÌe?dñƒdÎœdòdÌe?dóƒdÎœdôdÌe?dõƒdÎœdÇdÌe?döƒdÎœd÷dÌe?døƒdÎœd™dÌe?dùƒdÎœdúœi d9dûdÌdüdýdþœd9dûdÌdÿdýdþœdE�d dÌdü�ddþœdE�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þœdP�ddÌdü�d	dþœdP�ddÌdÿ�d	dþœdS�d
dÌdü�ddþœdS�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þœdd�ddÌdü�ddþœdd�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þœdw�d dÌdü�d!dþœdw�d dÌdÿ�d!dþœdz�d"dÌdü�d#dþœdz�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/�d0dÌdü�d1dþœ�d/�d0dÌdÿ�d1dþœdë�d2dÌdü�d3dþœdë�d2dÌdÿ�d3dþœdŠ�d4dÌdü�d5dþœdŠ�d4dÌdÿ�d5dþœdð�d6dÌdü�d7dþœdð�d6dÌdÿ�d7dþœ�d8�d9dÌdü�d:dþœ�d8�d9dÌ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ü�dAdþœd“�d@dÌdÿ�dAdþœdÂ�dBdÌdü�dCdþœdÂ�dBdÌdÿ�dCdþœdÇ�dDdÌdü�dEdþœdÇ�dDdÌdÿ�dEdþœ�dF�dGdÌdü�dHdþœ�dF�dGdÌdÿ�dHdþœ�dIœ>�dJ�dKdÌ�dLdÌ�dM�dNœ�dO�dPdÌ�dLdÌ�dM�dNœ�dQ�dRdÌ�dSdÌ�dT�dNœ�dUœ�dV�dWdÌ�dX�dYœ�dZ�d[dÌ�d\�dYœ�d]�d^dÌ�d_�dYœ�d`�dadÌ�db�dYœ�dc�dddÌ�de�dYœ�df�dgdÌ�dh�dYœ�di�djdÌ�dk�dYœ�dl�dmdÌ�dn�dYœ�do�dpdÌ�dq�dYœ�dr�dsdÌ�dt�dYœ�duœ
i �dvœZD�dw�dx�dy�dz�d{�d|œZEG �d}�d~„ �d~eƒZFG �dd„ deƒZ,�d€d>„ e@D ƒZG�d��d‚„ ZH�dƒ�d„„ ZI�d…�d†„ ZJ�d‡�dˆ„ ZK�d‰�dŠ„ ZL�d‹�dŒ„ ZM�d��dŽ„ ZN�d��d�„ ZO�d‘�d’„ ZP�dò�d“�d”„ZQ�dó�d•�d–„ZR�dô�d—�d˜„ZS�dõ�dš�d›„ZT�döeUeUeU�dœœ�d��dž„ZV�dŸ�d „ ZWe�d¡�d¢�ZXeXjYeP�d£�d¤�d¥� eXjYeR�d£�d¦�d¥� eXjYeS�d£�d§�d¥� eXjYeL�d£�d¨�d©� eXjYeW�dª�d«�d¦d �d¬� eXjY�d­�d®„ �d£�d§�d¥� eXjY�d¯�d®„ �d£�d¨�d¥� eXjY�d°�d®„ �d£�d±�d¥� eXjY�d²�d®„ �d£�d§�d¥� eX Z¡  e [�d³¡�d´�dµ„ ƒZ\�d÷�d¶�d·„Z]e ^�d¸¡ee0ƒfeU�d¹œ�dº�d»„ƒZ_e ^�d¼¡ee0ƒfeU�d¹œ�d½�d¾„ƒZ`e ^�d¿¡d5dee0ƒfeUeUeU�dÀœ�dÁ�dÂ„ƒZae ^�dÃ¡ee0ƒfeU�d¹œ�dÄ�dÅ„ƒZbe c�dÃ¡ee0ƒfe,eU�dÆœ�dÇ�dÈ„ƒZde ^�dÉ¡ee0ƒfeU�d¹œ�dÊ�dË„ƒZee ^�dÌ¡ee0ƒfeU�d¹œ�dÍ�dÎ„ƒZfe c�dÌ¡ee0ƒfe+eU�dÆœ�dÏ�dÐ„ƒZge c�dÑ¡ee0ƒfeFeU�dÆœ�dÒ�dÓ„ƒZhe ^�dÔ¡ee0ƒfeUeU�dÕœ�dÖ�d×„ƒZie ^�dØ¡ee0ƒfeUeU�dÙœ�dÚ�dÛ„ƒZje ^�dÜ¡ee0ƒfeUeeU�dÝœ�dÞ�dß„ƒZke ^�dà¡e ^�dá¡eUeUe�dâœ�dã�dä„ƒƒZle ^�då¡e ^�dæ¡eUe�dçœ�dè�dé„ƒƒZme ^�dê¡ee0ƒfeeU�dëœ�dì�dí„ƒZneo�dîk�r ejpe�dï�dð�dñ� dS (ø  é    N©Údatetime)Ú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&   .   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.   2   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_telegram9   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ÚusernameÚpasswordr   )r>   Zusuario_correctoZpass_corrector   r   r   Úverificar_credencialesE   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   Úslingo   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_slingr   s    rN   ÚnflÚmlbÚnbaÚnhlÚmlsÚppvÚlmpÚtrillerc                 C   s   i | ]
}|i “qS r   r   ©Ú.0Úleaguer   r   r   Ú
<dictcomp>x   s      rZ   c                 C   s   i | ]
}|i “qS r   r   rW   r   r   r   rZ   y   s      c                 C   s   i | ]
}|i “qS r   r   rW   r   r   r   rZ   z   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=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddÚ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=5f797969be6d73acfc4b2456701fe5269ac6b62ed7745a0890a2397e0d1c6dddÚ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=9b70e03097fa174868df37b951b40959fe67e648dcd5f9c5c346e9873b48597fÚ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=99dfdd1ac82f455c4de1572a9eca98c29392199d1cd5a912b6cc36f53de8848bÚ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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padresrt   Zmarinersrk   ZraysZrangersZbluejaysZ	nationalsÚ Zatlantahawks)r[   rz   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_namerz   Ú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ˆ   rz   Ú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Úprimemx)r¯   r³   r´   Zmxczaguilas|mexicaliz/img/lmp_aguilas.png)r[   rˆ   rz   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:   Nr/   r   r   r   r   r¶   Q  s   
r¶   c                   @   s   e Zd ZU eed< dS r-   r/   r   r   r   r   r.   V  s   
c                 C   s   i | ]
}|i “qS r   r   rW   r   r   r   rZ   Y  s      c                  C   s   t  d¡} t | ¡ d¡S )NúAmerica/Tijuanaz%Y%m%d)ÚpytzÚtimezoner   ÚnowÚstrftime)Útzr   r   r   Úget_today_str[  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)rX   Úcr   r   r   Ú	<genexpr>c  s      z!normalize_text.<locals>.<genexpr>ZNFDú Ú.ú-)r,   ÚlowerÚjoinr¾   Ú	normalizeÚreplace)r0   Ú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abbreviationrS   r£   r›   r—   rŽ   r‹   r•   rœ   rž   rª   r®   r”   rš   r™   r¨   )ZrbnyZnyrbZ	newyorkrbrc   Zintermiamicfr–   Zsportingkansascityr`   Zchicagofirefcr^   Zatlantaunitedfcra   Zhoustondynamofcrd   Zminnesotaunitedfcr�   rž   Zmontrealrh   Zseattlesoundersfcr­   Zvancouverwhitecapsfcr“   rš   Zlosangelesfootballclubr˜   r|   rQ   r„   r…   r†   )r„   Zphilarg   Zblazersr   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_sluge  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   é   ©r2   Úsportsr   ÚleaguesÚteamsrL   ÚlogosZhrefr~   úhttp://zhttps://ú?z?w=500&h=500&transparent=true)	rÍ   r5   rË   r   rÏ   rÈ   ÚsplitÚOFFICIAL_LOGOSr7   )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   r~   Ú
broadcastsrÂ   ÚnamesrQ   ÚLOCALÚcompetitorsrL   Ú	shortNameÚdateÚlogo©ÚnetworkÚ
match_nameÚ
match_daterû   r  r·   z%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/zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/156.0.0.0 Safari/537.36©Úacceptzaccept-languageÚoriginÚrefererú
user-agent©rA   r2   rU   ÚresponseÚgamesÚ	prevGamesÚ	nextGamesÚ
gameStatusé   Úiné   r6   Ú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>8  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Á   9  s     z sync_schedule.<locals>.<genexpr>úLMP TV)r½   ÚESPN_API_URLSrÍ   r5   rË   r   rÆ   rï   ró   rÏ   Úcurrent_game_infor7   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_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   rA   r2   Ú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Ë   Ústripr5   r6   ÚwriteÚdumpsr7   r,   )Ú	is_manualZ
token_fileZrefresh_filer#   ÚmsgZrefresh_tokenr:   rA   r;   r   Z
new_accessZnew_refreshr   r<   r   r   r   Úget_disney_tokenF  s`    ÷
ý
(
rd  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 rK  rL  rM  rN  )rO  rP  rQ  rR  r  rT   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.)Frp  )rd  r/  rË   r5   r?   r   r1  ÚappendrÅ   r_  r7   )rb  rY  Z	msj_tokenZurlsrA   r6  Zlogos_encontradosZtitulos_vistosr:   r   Z	data_jsonrÍ   rÀ   Úitemri  rj  rÜ   ÚpidZ	title_lowrÛ   r   r   r   Úsync_disney_schedule~  s|    þû
 (

X
(ûrt  c           !   
   C   s  dd l }ddlm} td d }td d }|› d�}d|d||› d	�d
dœ}�ztt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¡�rH|}�q&| d¡�r&|�r&t d|¡}|�rt| d¡}d |› �}| d!¡ 
¡ }d"}d#}d$|› d%�}|d&k�r¾d'}d(}d)}d*}nŽ| |i ¡}| d+d¡}|�rLzX|d d,… }| |d-¡}| d.¡}|j |¡ |¡}| |¡}| ¡ }||k�r2d'}W n tk
�rJ   Y nX |||||d/œ||< d0||||d1œ||< d}�q&|�r´|td < |td < | �r®d2d3t|ƒ› d4�fW S W d5S | �rÀW d6S W d7S  tk
�r }  z,| �rúd8d9t| ƒ› d:�f W Y ¢S W Y ¢d7S d } ~ X Y nX d S );Nr   r   rJ   rF   rG   ú/api/actionú*/*rN  z/config/trillertv?type=liveúMozilla/5.0)ÚAcceptÚAuthorizationúContent-TyperS  ÚRefererrR  ÚchannelsupdaterequestÚ	trillertv©ZActionZ
ProviderIdrf  ©rA   r   r2   é   Úchannelsupdateapplyrg  ú/playlist.m3ury  r  Ú
z'http://51.81.107.170/triller_cache.jsonr1   rÑ   r~   ú#EXTINFÚhttpz\[(\d+)\](.*)r  rV   r  u   ðŸ”œ SCHEDULEDrü   zhttps://img.fite.tv/t/z_wide_554x200.jpgZ4534230r  rn  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ˆ   rz   r±   z
TRILLER TVr  Tu5   âœ… API TrillerTV: SincronizaciÃ³n exitosa con JSON. z eventos mapeados.ro  )Fu.   â�Œ API TrillerTV: El panel o11 no respondiÃ³.re  Fu,   â�Œ API TrillerTV: Error de conexiÃ³n HTTP (rZ  )r¸   r   Ú
O11_PANELSr5   r6   rÞ   Úsleepr?   rË   r0   r_  rØ   r   r7   Ú
startswithÚreÚsearchÚgroupr2  r¹   Úutcr3  Ú
astimezonerº   r4  r/  rÌ   Úlenr,   )!rb  r¸   r   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œ}�zFtj||d	d
�}|jdk�rŒ|j ¡  d¡}t|ƒdk rŠW dS dD ]B}t|  	¡ D ]0\}}	|	 dd¡}
|
rž||
krždt| | d< qžqŽd}|D �]¨}| ¡ }| 
d¡rø|}qÚ| 
d¡rÚ|rÚ| d¡d  ¡ }t|ƒ‰ t d|¡}|�r<| d¡nd}| dk�rd|k�sld|k�sld| ¡ k�ràdˆ k�p|dˆ k}td  	¡ D ]T\}}	|	 dd¡}||k�r¬�qŠt|	 dd¡ƒ}|�rŠ|ˆ k�rŠ|td | d< �qŠd D ]¦}ttd! |  dd¡ƒ}|�rä|ˆ k�rä|td! | d< |�r6|td! | d"< |t d!i ¡k�rXi t d!i ¡|< td! |  d#¡�sätd! |  |d$d%d&d'œ¡ �qäd(|k�s²d)| ¡ k�s²d*| ¡ k�r€td+  	¡ D ]N\}}	d,d-„ |	 dd¡ d.¡D ƒ}t‡ fd/d0„|D ƒƒ�r¾|td+ | d< �q¾�nn| d1k�r€t‡ fd2d0„d3D ƒƒ�r||td! d4 d< |�rZ|td! d4 d"< t d5|tj¡}d6}d}|�rPt| d¡ƒ}t| d¡ƒ}| d7¡ ¡ }|d8k�rÀ|d9k �rÀ|d97 }n|d:k�rØ|d9k�rØd;}t d<¡}t |¡}| t|j|j|j||d;ƒ¡}d=ˆ k�sd>ˆ k�r8d;d?lm} ||dd@� }| ¡ }||k�rXd&}nd6}d}t d!i ¡ d4i ¡ ||dA|d'œ¡ t‡ fdBd0„dCD ƒƒ}|�s€dD|k�r®dE|k�r®qÚtdF   ¡ D �]Â}|dGk�râdHˆ k�râdIˆ k�râ�qºt dJ|› dJ�|tj¡�rºd=ˆ k�sºd>ˆ k�r�qº|tdF | d< t d5|tj¡}d6}|�rÞt| d¡ƒ}t| d¡ƒ}| d7¡ ¡ }|d8k�r†|d9k �r†|d97 }n|d:k�rž|d9k�ržd;}t d<¡}t |¡}| t|j|j|j||d;ƒ¡}||k�rÞd&}t dFi ¡ |i ¡ tdF |  d#¡�s&|tdF | d#< dKtdF | dL< tdF |  dMd¡}t!|ƒ�sTdNtdF | dM< tdF |  dO¡d&k�rº|tdF | dO< �qºd}qÚW dPS W dS  t"k
�rº }  z
W Y ¢dS d } ~ X Y nX d S )QNrF   rG   Fr‚  rv  úes-MXrw  )rx  úAccept-Languagery  rR  g      4@r  rg  rƒ  r  )rQ   rS   rT   rU   rz   r~   r„  r…  ú,éÿÿÿÿztvg-logo="([^"]+)"r  rH   zgroup-title="MLS"z[MLS]ZMLSzmls(es)ZmlsesrS   r‰   rˆ   )r¯   r³   rT   r²   r  rn  rm  r  )r  r  r  rû   zLMP:zLMP :ÚLMPrU   c                 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)  ©Zevent_name_cleanr   r   rÁ   |  s     z parse_o11_m3u.<locals>.<genexpr>rI   c                 3   s   | ]}|ˆ kV  qd S r(  r   )rX   Úkrž  r   r   rÁ   €  s     )r´   Z	contenderZdwcsr´   zA\((?: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 r(  r   )rX   Úwordrž  r   r   rÁ   ¦  s     )rx   ro   rs   rn   rv   rp   rq   ru   rw   rm   ry   rl   Z
blackhawksZdonetskZredbullsrr   Z	canadiensZ
mapleleafsrR   ZuclZuefaZ	championsz/stream/primemx/z/stream/nbarQ   r�   r‚   Zbrooklynz\bu   ðŸ”´ NBA LEAGUE PASSr  r  rò   rû   T)#r‡  rË   r5   r?   r0   r_  rØ   r�  rÌ   rÍ   r‰  rÊ   rŠ  r‹  rŒ  rï   r/  Ú
setdefaultÚupdater5  Ú
IGNORECASEÚintr¸   r¹   r   rº   r3  ÚyearÚmonthÚdayr¢  r4  Úkeysrñ   r7   )!Ú	panel_keyrF   rG   r‘  rA   rÚ   r’  rY   rÛ   r#   Zreg_urlr“  r”  Zevent_name_fullZ
logo_matchZextracted_logoZis_spanish_streamZ
is_es_slugrˆ   rG  Z
match_timer–  r•  ÚhourÚminuteZampmr¼   rº   Z	target_dtr¢  Zis_other_sportZ
actual_netr<   r   rž  r   Úparse_o11_m3u4  s   
ü


"
ü&
 
 


ü 
 



r°  )r­  Úprovider_idrj  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	| ƒ}|�szd}|	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=liverv  r™  rN  rw  )rx  rš  ry  rz  rS  r{  rR  Fu!   ðŸ”„ <b>REPORTE DE DIAGNÃ“STICO (z)</b>

z/api/provider/getrf  r  ru  r|  r~  r€  r�  rg  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}  u:   â�Œ <b>MAPEO M3U</b>: Error al descargar lista del panel.
u6   âœ… <b>MAPEO M3U</b>: Links asignados a las tarjetas.
r°   ©rb  rƒ  )r‡  rË   r5   r6   rÞ   rˆ  r?   r7   r˜  r°  rt  r=   )r­  r±  rj  rb  rF   rG   r  rA   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  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_overridesrq  rï   rÆ   r=   )Zequipos_afectadosrÛ   Úinfor  r9   r   r   r   Úauditar_juegos_prime  s    ÿr¶  r·   )r¹   Úintervalr  )Úminutesr÷   rÐ   é   )ÚsecondsÚcronÚ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>1  ó    r¿  c                   C   s   t ddddƒS )NrH   r°   zPPV / ESPN MX (La Granja)Fr¾  r   r   r   r   r¿  2  rÀ  c                   C   s   t ddddƒS )NrI   rµ   úPPV / Prime VideoFr¾  r   r   r   r   r¿  3  rÀ  é   c                   C   s   t ddddƒS )NrH   rU   r�  Fr¾  r   r   r   r   r¿  4  rÀ  Ú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  rt  r˜  Ú	threadingÚThreadr°  Ústart)rÇ  r   r   r   Ústartup_event8  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~   rO   rå   rè   ré   ræ   rç   ZNFLr\   r]   rQ   rz   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_asignadaB  sb        
 


 
 
  
 

 
   rÖ  ú/©rC   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Æ   r[  r\  r   r
   r^  )rC   Z	html_pathr   r   r   r   Ú
show_panelp  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)
rC   Zcurrent_net_ioÚcurrent_timeZ	time_diffrã  rå  rÞ  rß  ZcpuZramr   r   r   Úget_system_statsy  s*    úrë  z/api/status)rY   r  rC   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   r~   rþ   rÂ   rÿ   rQ   r   r  rL   r  r  r  r  é   rÄ   é   r	  r
  r  r  r  r  rw  r  r  r  r  r  r  r·   r  r  r  r  r6   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.  r5   r   rÆ   rï   ró   rÏ   r0  râ   r1  r¸   r¹   r   r2  r3  r4  rº   rÊ   rÌ   rÍ   rØ   r5  rÙ   rq  rõ   rÖ  r´  r�  rã   )-rY   r  rC   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#   rC   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 (rZ  )rã   rÍ   rï   )rC   Zflat_viewersrY   rÔ   rL   r   r   r   r   Úget_monitor3  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&  C  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#   rC   rY   r   r   r   Úset_overrideG  s
    
r  z
/api/check)r:   rC   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Ñ   rg  rù   ZonlineZoffline)r5   ZAsyncClientrË   r?   )r:   rC   ÚclientrÚ   r   r   r   Úcheck_streamP  s    
,r  z!/api/force_sync_o11/{provider_id})r±  rC   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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...zPanel desconocido.)rÇ  rÈ  r³  rÉ  )r±  rC   rÇ  r   r   r   Ú
force_sync[  s"    r	  z/download/{filename})ÚfilenameÚrequestrC   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  r~   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)rA   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=)rA   rË   r¸   r¹   r   rº   r  r,   rá   rÌ   rÍ   r/  rï   ÚfromisoformatrÈ   Útzinfor�  r3  rŽ  rÙ   rõ   rq  r   rÆ   r   )r
  r  rC   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Ü   Úreal_filenamer   r   r   Údownload_playlisto  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�‚|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?   r@   r  zLiga no soportadarÄ   r~   zEquipo no encontrador  ZDesconocido)rÞ   Ú
user_agentrz   i.  )r:   r?   )r  rF   r  rË   r   rá   rÅ   rÈ   r_  rÌ   rA   rã   rÞ   rÖ  r	   )rY   rL   r  Z	client_iprÕ  r   rÅ  r   r   r   Úresolve_team_streamÂ  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_streamÙ  s    r#  z/api/today_events)r  rC   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  r~   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î   )rr  rÉ   r   r   r   Úsort_key&  s     z"get_today_events.<locals>.sort_key)Úkeyrø   )rA   rË   r¸   r¹   r   rº   r  r,   rá   rÌ   rÍ   r/  rï   r  rÈ   r  r�  r3  rŽ  ró   rÙ   r´  rq  rõ   Úsort)r  rC   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_eventsÞ  sx    








&




ør(  Ú__main__z0.0.0.0iE  )rF   Úport)F)F)F)rH   )F)N)qr5   Úuvicornr   rB   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   ÚappÚsecurityZmountr   rÆ   r[  r\  r   r    r$   r  rÑ  r&   r.   r3   r4   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  rd  rt  r˜  r°  r,   r³  r¶  Z	schedulerZadd_jobrÉ  Zon_eventrÊ  rÖ  rË   rÛ  rë  rû  rü  r6   rÿ  r   r  r  r  r  r	  r  r!  r#  r(  r'   Úrunr   r   r   r   Ú<module>   s�  (	þþþ÷































à#â!â ÂBú	ú	úïö€ ¶ Oû3		o8Kk ,:
	.


& 

 


 
 
 

 
"R




 P