o
    E7g                     @   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	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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  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-Z-d dl.Z.d dl/Z/d dl0Z0d dl1Z1d dl2Z2d dl3Z3d dl4m5Z5m6Z6m7Z7m8Z8m9Z9 d dl m:Z:m;Z; d dl<m=Z= d dl>m?Z? d dlm@Z@mAZAmBZB d dl%m%Z%mCZCmDZDmEZE d d	lFmGZG d d
lHmIZImJZJmKZKmLZLmMZM d dlmNZN d dlOmPZPmQZQmRZRmSZS d dlTmUZU d dlVmWZW d dlXmYZY d dlZm[Z[ d dl\Z\d dl\m]Z] d dl^T d dl_T d dl`m`Z` d dlambZbmcZc d dldmeZe d dlfT d dlgmhZh d dlimjZj d dlkmlZl d dl_Z_e&mde&n Zoe&mde&n Zpe%q mdZre%q ZqdZsdZteuetZvg ZwG dd dZxdd  Zyd!d" Zzd#d$ Z{dd%d&Z|dd'd(Z}d)d* Z~d+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zdd6d7Zd8d9 Zd:d; Zd<d= Zd>d? Zd@dA ZdBdC ZdDdE ZdFedGefdHdIZdJedGefdKdLZdMdN ZdOdP ZdQdR ZdSdT ZdUdV ZdWdX ZdYdZ Zd[d\ Zd]d^ Zd_d` Zdadb Zdcdd Zdedf Zdgdh Zdidj Zdkdl Zdmdn Zdodp Zdqdr Zdsdt ZddudvZdwdx Zdydz Zd{d| Zd}d~ Zdd Zdd ZdddZdddZdddZdS )    N)minidom)FlaskrequestResponseredirectjsonify)systemgetenv)Path)parser)urlparseurljoinquote)datetime	timedeltadatetimezone)BeautifulSoup)CursorinitForeBackStyle)	b64encode)Bot
DispatcherRoutertypes)	ParseMode)CommandStart)Message)hbold)set_globals)*)
nexifykeys)cdmdeviceconfig)	WvDecrypt)Cdm)Device)PSSH%Y-%m-%d %H:%Mz%Y-%m-%d %H:%M:%Sz#EXTM3Uz\http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsdc                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	Colorsz[0mz[91mz[92mz[93mz[94mz[95mz[96mN)
__name__
__module____qualname__RESETREDGREENYELLOWBLUEMAGENTACYAN r7   r7   0/var/www/html/ott/movistar/keys/config_reader.pyr,   ;   s    r,   c                  C   s    t jsdd l} | d d S d S )Nr   ignore)syswarnoptionswarningssimplefilter)r<   r7   r7   r8   clear_warningsD   s   r>   c                   C   s"   t t jdkrd d S d d S )Nntclsclear)osr   namer7   r7   r7   r8   clear_terminalI   s   "rD   c                  C   s    t j} tj| | gt jR   d S N)r:   
executablerB   execlargv)pythonr7   r7   r8   restart_scriptL   s   rJ   c                 C   sp   t  j}t  | r6t| d\}}d||}|t| d }td| | dd td | d8 } | s
d S d S )N<   {:02d}:{:02d}    end   )	shutilget_terminal_sizecolumnsprintdivmodformatlentimesleep)segundostextoancho_terminalminssecstiempoespaciosr7   r7   r8   cuenta_atrasP   s   

rc   c                 C   sD   t | ddD ]}tjd| d| d tj  td qd S )Nr   rO   z en z segundos...rR   )ranger:   stdoutwriteflushrZ   r[   )r\   r]   ir7   r7   r8   cuenta_atras_mensaje[   s
   
rj   c              	   C   sP  t | }d}d}t  tdtjtj td |dkrt	|d\}}d
||}|  \}	}
| }|
t| d }|	d }|   | |||td t| d}|	t| d	 }t|D ]\}}|
t| d }| || ||td qh|   td |d8 }|dks!|   | |||td |   d S )
NrR   Z   r   rK   rL   rM   
   
   )pyfigletfiglet_formatuppercursesstart_color	init_pair
COLOR_CYANCOLOR_BLACKcurs_setrW   rX   getmaxyxrY   rA   addstr
color_pairtextwrapdedentstripsplit	enumeraterefreshrZ   r[   )stdscrimagenr]   imagen_asciir\   anchor_   r`   ra   heightwidthmensaje	x_mensaje	y_mensajeimagen_linesy_imagenidxlinex_imagenr7   r7   r8   salvapantallasa   s6   

r   c                 C      d}| d| }t  j}t  |dD ])}|t| d }ttjtj	 d|  dd |D ]}t|ddd	 t
d
 q0qd S )NrK   <rm   rM   rN    rP   TrQ   rh   Mb`?rB   rT   rU   rV   r~   rY   r   BRIGHTr,   r6   rZ   r[   textancho_minimoformat_textterminal_widthwordpaddingcharr7   r7   r8   print_centered~      
r   c                 C   r   )N   r   rm   rM   rN   r   rP   Tr   r   r   r   r7   r7   r8   print_centrado   r   r   c                  C   sd   t d t d tj } t| }zt|  tjd W t	| tj
| d S t	| tj
| w )Nr   z*PRESIONA CUALQUIER TECLA PARA CONTINUAR...rR   )r   r:   stdinfilenotermios	tcgetattrttysetrawread	tcsetattr	TCSADRAIN)	file_descold_settingsr7   r7   r8   presionar_tecla_para_continuar   s   


&r   c                 C   sT   | dkr(t jd t j  td t j  td | d8 } | dksd S d S )Nr   .g?rR   )r:   rf   rg   rh   rZ   r[   )durationr7   r7   r8   print_loading_dots   s   



r   c                 C   s&   t  | }t tj| }||k S rE   )r   utcnowutcfromtimestamprB   pathgetmtime)	filelogindeltacutoffmtimer7   r7   r8   	time_file   s   r   rM   c                 C   s"   t | }|t|d }|dS )N)hoursr+   )r   fromtimestampr   strftime)	timestampr   	time_strp
time_deltar7   r7   r8   convert_timestamp   s   

r   c                 C   sd   d| v r(|  d\}}|d}t|dk r |d7 }t|dk s|d | d } t| d}| S )Nr   Z   0z%Y-%m-%dT%H:%M:%S.%fZ)r~   rstriprY   r   strptimer   )time_str	main_time
fractionalr   r7   r7   r8   convert_to_time   s   
r   c              
   C   sJ   zt | }| }|W S  ty$ } ztd| W Y d }~d S d }~ww )Nz"Error al analizar la fecha y hora:)r   parser   
ValueErrorrV   )r   r   r   er7   r7   r8   convert_to_time2   s   

r   c                 C   s   t | d}|dS )N%Y-%m-%dT%H:%M:%SZz%Y%m%d%H%M%S%z)r   r   r   r   utc_timer7   r7   r8   format_epg_time   s   
r   c                 C   s   t | d}|S )Nr   )r   r   r   r7   r7   r8   format_daemon_time   s   r   c                 C   s8   zt | }t|ddW S  ty   Y d S w )Nzutf-8=)	bytearrayfromhexbase64r   decoder   r   )
hex_stringbytesr7   r7   r8   hex_to_base64   s   
r   c                 C   s   |  d}t|dkr|\}}n	|d |d }}tddd |D }tddd |D }|d urE|d urEd	| d
 | d }|S d S )N:rM   r   rd   r   c                 s       | ]	}|  r|V  qd S rE   isalnum.0cr7   r7   r8   	<genexpr>       z%process_key_string.<locals>.<genexpr>c                 s   r   rE   r   r   r7   r7   r8   r      r   z{"keys":[{"kty":"oct", "k":"z
", "kid":"z"}],"type":"temporary"})r~   rY   r   join)
key_string	key_partskey_idkey
key_base64key_id_base64keys_base64r7   r7   r8   process_key_string   s   

r   c                 C   s   t dd}| D ]}||dd qW d    n1 sw   Y  t dd}| }|D ]}|dd} q/W d    n1 sBw   Y  td | S )Nzarchivotmp.txtw[r   r])openrg   replace	readlinesrB   remove)keysfiler   lineaslinear7   r7   r8   process_key_format   s   
r   	hex_valuereturnc                 C   s   t t|  ddS )z(Converts a hex value to Base64 encoding.r   r   )r   r   r   r   r   )r   r7   r7   r8   hex_pair_to_b64   s   r   hex_pairc                 C   s2   d| vrt d| d\}}dt|t|dS )z(Converts a hex key pair to a dictionary.r   z7Invalid input format. Please enter in "kid:key" format.oct)ktykkid)r   r~   r   )r   r  r   r7   r7   r8   convert_hex_pair_to_dict   s   r  c           	         s   dg }t |   fddtdt D }t|dD ]D\}}t|dddddd	d
d}|s: n)zt|}|| |rHW qW q t	yb } zt
d|  W Y d }~qd }~ww |dd}|S )NrR   c              	      s&   g | ]}t t  || qS r7   )dict	itertoolsisliceitems)r   ri   	data_dict
group_sizer7   r8   
<listcomp>  s   & z+process_hex_pair_string.<locals>.<listcomp>r   {r   }z: r   'zInvalid input: 	temporary)r   type)jsonloadsre   rY   r   strr   r  appendr   rV   )	keys_stringr   groupsr   groupr   key_dictr   resultr7   r  r8   process_hex_pair_string   s(   
 (

r  c              	   C   s   t | d3}t|}t |d}tj||dd W d    n1 s#w   Y  W d    d S W d    d S 1 s;w   Y  d S )Nr   r   rn   indent)r   r  loaddump)file_infile_outentradajsondatasalidar7   r7   r8   
arbol_json  s   
"r$  c                 C   s2   t jd| std| d|  d S d S )Nz{0}r   )rB   r   existsrX   r   rg   )archivor   r7   r7   r8   
file_exist  s   r'  c                 C   s   t j| st |  d S d S rE   )rB   r   r%  makedirs)carpetar7   r7   r8   
path_exist"  s   r*  c                 C   6   t | d}| W  d    S 1 sw   Y  d S Nr   )r   r   r&  r   r7   r7   r8   
read_lines&     $r.  c                 C   :   t | d}|| W d    d S 1 sw   Y  d S Nr   r   
writelinesr&  r   r   r7   r7   r8   
save_lines*     "r5  c                 C   r0  Nar2  r4  r7   r7   r8   append_lines.  r6  r9  c                 C   r+  r,  )r   r   r-  r7   r7   r8   	read_file2  r/  r:  c                 C   r0  r1  r   rg   r4  r7   r7   r8   	save_file6  r6  r<  c                 C   r0  r7  r;  r4  r7   r7   r8   append_file:  r6  r=  c                 C   s8   t | d}t|W  d    S 1 sw   Y  d S r,  )r   r  r  r-  r7   r7   r8   	read_json>  s   $r>  c                 C   @   t | d}tj||dd W d    d S 1 sw   Y  d S )Nr   rn   r  r   r  r  r&  datosr   r7   r7   r8   	save_jsonB     "rC  c                 C   r?  )Nr8  rn   r  r@  rA  r7   r7   r8   append_jsonF  rD  rE  c              
   C   s>   t d| dD ]\}}tdtt|ttd  d  qd S )Nr      	rC   )r   rV   r   mapr  ri   )listar   canalr7   r7   r8   mostrar_listaJ  s   &rK  c                 C   sP  t | d}t|} W d    n1 sw   Y  g }t  t  tt t| t| t  d}|  D ]\}}t| d|	   |
| |d7 }q7d| }	td|	D ]}
t  qYtd td t  td tt }td ||v r}|S |d	krt  tt|d
 t  |dkrt  tt|d
 t  d S td d S )Nr   rR   z.    z33. RESET SCRIPTz00. EXIT SCRIPTz   INTRODUCE TU ELECCION:     rm   !   zREINICIANDO EL SCRIPTr   zINVALIDA ELECCION)r   r  r  rD   rV   r   time_scriptimer  r   rq   r  re   intinputrr   wrapperr   rJ   r:   exit)data_globaltext1text2	proveedorr   selectindexnum_conexionconfig
num_lineaslinea_vaciachosen_indexr7   r7   r8   seleccion_manualN  sH   


r^  c                  C   sT   t j } t| }zt|  t jd}W t| tj	| |S t| tj	| w )NrR   )
r:   r   r   r   r   r   r   r   r   r   )file_descriptorr   r   r7   r7   r8   get_keyu  s   


r`  c                 C   s   g }	 t  }z`tjd tjd tjd tjd |dkr*t  t  n;|dkr1W |S t|d }d|  krCt| k ren n | | }|| t	|d  tjd tjd t
d	 W n tyv   td
d Y nw q)NT[K[1ArN   rR   r   Idg      ?{:<52}zNSelecciona un Dispositivo o .... (Escape para salir, Espacio para continuar): )r`  r:   rf   rg   rD   rJ   rO  rY   r  r   rZ   r[   r   r   rX   rI  seleccionadoseleccionindiceseleccionador7   r7   r8   seleccion_lista  s6   

rk  c                 C      g }	 t  }z^tjd tjd tjd tjd |dkr*t  t  n9|dkr1W |S t|}d|  krAt| k rcn n | | }|| t	|d  tjd tjd t
d W n tyt   td	d
 Y nw q)NTra  rb  rc  rN   r   display_name皙?re  VSelecciona un Canal dentro de rango o .... (Escape para salir, Espacio para continuar)rP  r:   rf   rg   rD   rJ   rO  rY   r  r   rZ   r[   r   r   rX   rf  r7   r7   r8   seleccion_canales_euskaltel  6   

rq  c                 C   rl  )NTra  rb  rc  rN   r   rC   rn  re  ro  rp  rf  r7   r7   r8   seleccion_canales_orange  rr  rs  c                 C   rl  )NTra  rb  rc  rN   r   Nombrern  re  ro  rp  rf  r7   r7   r8   seleccion_canales_movistar  rr  ru  c                 C   sh   t tj}|d D ]"}|d }| |  krq	| |  kr+ttj}||d d< q	ttj| d S )N	basedatosnombrecabeceratoken)r>  config_readermaster_jsonlowerr:  	token_txtrC  )
plataformar"  labelsproviderry  r7   r7   r8   Movistar_token_json  s   

r  c                  C   sB  t tjD ]} | ds| drt jtj| }t|}g }d}d}|D ]_}| t	kr0d}|rY|
drYtd|}|d}ttjdd	}	||	krY|||	}d}d}
|r|
d
r|dd  }ttjdd	}	||	kr|||	}d}d}
|| q&|rt|| t d|  }ttjd|  qqd S )N.php.m3u8FT#EXTHTTP:{"X-TCDN-token":"+(#EXTHTTP:\{\"X-TCDN-token\":\")(.*?)(\"\})rM   access_tokenr   z;#KODIPROP:inputstream.adaptive.stream_headers=x-tcdn-token=zx-tcdn-token=rR   z - Token cambiado en archivo: rm   )rB   listdirrz  dirproviderendswithr   r   r.  r}   start_indicator
startswithresearchr  r>  
json_tokengetr   r~   r  r5  current_timer=  	log_token)r&  canal_masterr   nueva_lineatoken_changedindicador_movistarr   matchtoken_existentetoken_actualizadocorrectr   r7   r7   r8   Movistar_token_listas  sB   

r  c                  C   s   t tD ]d} | ds| drig }t jt| }t jt| }t|}d}d}|D ]6}| t	kr5d}|r\|
dr\td|}|d}	ttjdd	}
|	|
kr\||	|
}d}|| q+|rit|| qd S )
Nr  r  FTr  r  rM   r  r   )rB   r  path02r  r   r   path03r.  r}   r  r  r  r  r  r>  rz  r  r  r   r  r5  )r&  r  r  canal_actualr   r  r  r   r  r  r  r7   r7   r8   Movistar_token_masters  s.   

r  c            
      C   s   t tD ]X} | ds| dr]g }t jt| }t jt| }t|}d}|D ],}|drPt	d|}|
d}ttjdd}	||	krP|||	}d	}|| q)|r]t|| qd S )
Nr  r  Fr  r  rM   r  r   T)rB   r  path04r  r   r   r.  r  r  r  r  r>  rz  r  r  r   r  r5  )
r&  r  r  r  r   r  r   r  r  r  r7   r7   r8   Movistar_token_proxy0  s(   


r  c               
   C   s|  d} d}t  }tdd}|d|  }|d|  }||}||}ttD ]}|drtj	t|}	tj	t
|}
g }t|	do}| }|D ]F}td	|}td
|}|rc|| d} qK|r| dkrtd|}|rv|dnd}d| d| d| d}|| d} qK|| qKt|
d}|| W d    n1 sw   Y  W d    n1 sw   Y  q(d S )Nr   r   i  )secondsrM      r  r   z(provider="Movistaru7D")z(WIDEVINE&start_time=2)1z(cutv-wp21.cdn.telefonica.com/(.*?)/vxfmtrR   r   z%https://cutv-wp21.cdn.telefonica.com/zB/vxfmt=dp/Manifest.mpd?device_profile=DASH_TV_WIDEVINE&start_time=z
&end_time=rm   r   )r   nowr   r   rB   r  r  r  r   r   r  r   r   r  r  r  r  r3  )variable_u7dformator  una_horacanariasasturiasahora_canariasahora_asturiasr&  r  r  r  r!  r   r   match1match5match_id
channel_idnueva_fechar#  r7   r7   r8   Movistar_fecha_u7dD  sH   





r  c                  C   s   d} d}d}d}d}t j| dd td t j|dd td t j|dd td t j|dd td t j|dd d S )	Nzfscp -P 442 /opt/scripts/wks/movistar/*.php root@10.158.25.1:/opt/scripts/wks/movistar > /dev/null 2>&1zjscp -P 442 /opt/scripts/wks/movistar/token.txt root@10.158.25.1:/opt/scripts/wks/movistar > /dev/null 2>&1ztscp -P 30022 /opt/scripts/wks/movistar/token.txt root@10.158.25.8://home/scripts/o11/config/scripts > /dev/null 2>&1zascp /opt/scripts/wks/movistar/token.txt root@10.158.25.10:/var/local/o11/scripts > /dev/null 2>&1zjscp -P 441 /opt/scripts/wks/movistar/token.txt root@10.158.25.14:/home/o11/config/scripts > /dev/null 2>&1T)shellrR   )
subprocessrunrZ   r[   )
comando_00
comando_01
comando_08
comando_10
comando_14r7   r7   r8   Movistar_token_copyi  s   



r  c                  C   st   t tjD ]1} | dr7t jtj| }t jtj| }t jd	|r+t 
| t|| t |d qd S )Nr  z{}i  )rB   r  rz  rutacanalesr  r   r   
rutamasterr%  rX   r   rS   copy2chmod)r&  r  r  r7   r7   r8   copia_canales_masterz  s   

r  c                 C   s  t tjd}t|}W d    n1 sw   Y  d}d}d}|  dkr)|}|  dkr2|}n|}t tjd}|d D ]}	|	d	 }| |  krNq?| |  kr&td
dD ]}
z|j|	d |
 d 	 |	d |
 d d |	d |
 d d 
dd
dd
dd
dd
dd|	d |
 d d  |	d |
 d d 	 |	d |
 d d |	d |
 d d 	 
dd|	d |
 d d 	 |	d  d! |	d  d" |	d  d# d$|	d  d%  d& |	d  d#  d' |	d  d"  d( |	d |
 d d) 
d*d+|	d |
 d d, d-d.}|| W q\ ty   Y  n
 ty%   Y q\w q?W d    n	1 s2w   Y  td/tj  d S )0Nr   aL  
#EXTINF:-1 ch-number="{ch_number}" tvg-id="{tvg_id}" tvg-name="{tvg_name}" group-title="{group_title}" provider="{provider}" tvg-logo="{tvg_logo}",{ch_name}
#EXTGRP: {grupo}
#KODIPROP:inputstream=inputstream.adaptive
#KODIPROP:inputstream.adaptive.manifest_type=mpd
#KODIPROP:inputstream.adaptive.license_type=clearkey
#KODIPROP:inputstream.adaptive.stream_headers=Origin={origin}
#KODIPROP:inputstream.adaptive.stream_headers=Referer={referer}
#KODIPROP:inputstream.adaptive.stream_headers=User-Agent={useragent}
#EXTHTTP:{token}
#KODIPROP:inputstream.adaptive.license_key={keys}
{url}
a8  
#EXTINF:-1 tvg-id="{tvg_id}" group-title="{provider}" ch-number="{ch_number}" tvg-logo="{tvg_logo}",{ch_name}
#KODIPROP:inputstream=inputstream.adaptive
#KODIPROP:inputstream.adaptive.manifest_type=mpd
#KODIPROP:inputstream.adaptive.license_type=clearkey
#KODIPROP:inputstream.adaptive.license_key={keys}
{url}
a  
#EXTINF:-1 ch-number="{ch_number}" tvg-id="{tvg_id}" tvg-name="{tvg_name}" group-title="{group_title}" provider="{provider}" tvg-logo="{tvg_logo}" catchup-type="default" catchup-source="{url}{clictvu7d}" catchup-days="7",{ch_name}
#EXTGRP: {grupo}
#KODIPROP:inputstream=inputstream.adaptive
#KODIPROP:inputstream.adaptive.manifest_type=mpd
#KODIPROP:inputstream.adaptive.license_type=clearkey
#KODIPROP:inputstream.adaptive.stream_headers=Origin={origin}
#KODIPROP:inputstream.adaptive.stream_headers=Referer={referer}
#KODIPROP:inputstream.adaptive.stream_headers=User-Agent={useragent}
#KODIPROP:inputstream.adaptive.license_key={keys}
{url}
movistarclictvr   rv  rw  r     canalestvg-idrB  	ch-numbertvg-nameDaznDAZNBarBARTvTVLaligaLaLigaFefFEFgroup-titler  tvg-logoch-namegruporx  originreferer	useragent{"X-TCDN-token":"ry  ", "User-Agent":"", "Referer":""}r   rN   r   urlz?begin=${start}&end=${end})tvg_id	ch_numbertvg_namegroup_titler  tvg_logoch_namer  r  r  r  ry  r   r  	clictvu7dzArchivo m3u8 creado como )r   rz  r{  r  r  r|  	lista1m3ure   rX   titler   rg   
IndexErrorKeyErrorr   )rV  r  r!  r"  formato1formato2formato3templater#  r  xfilled_templater7   r7   r8   
lista_m3u8  s\   	:


2!r  c                 C   s  t tjd}t|}W d    n1 sw   Y  d}d}d}|  dkr)|}|  dkr2|}n|}t tjd3}|d |d	 D ] }	|	d
 }| |  krUqE| |  krf||	d  tddD ]}
z|	d |
 d d }|	d |
 d d 	dd}t d| d}|| W d    n1 sw   Y  |j
|	d |
 d  |	d |
 d d |	d |
 d d 	dd	dd	dd	dd	dd |	d |
 d d! |	d |
 d d"  |	d |
 d d# |	d |
 d d$  	dd|	d |
 d d%  |	d& d' |	d& d( |	d& d) d*|	d& d+  d, |	d& d)  d- |	d& d(  d. |	d |
 d d 	dd|	d |
 d d/ d0}|| W qj ty\   Y  n
 tye   Y qjw qEW d    n	1 srw   Y  td1tj  d S )2Nr   a  
#EXTINF:-1 ch-number="{ch_number}" tvg-id="{tvg_id}" tvg-name="{tvg_name}" group-title="{grupo}" provider="{provider}" tvg-logo="{tvg_logo}",{ch_name}
#KODIPROP:inputstream=inputstream.adaptive
#KODIPROP:inputstream.adaptive.drm_legacy=org.w3.clearkey|http://redott.ath.cx/ott/key/{ch_number}
#KODIPROP:inputstream.adaptive.play_timeshift_buffer=false
#KODIPROP:inputstream.adaptive.manifest_headers=User-Agent={useragent}
#KODIPROP:inputstream.adaptive.stream_headers=User-Agent={useragent}
#EXTHTTP:{token}
{url}
a  
#EXTINF:-1 tvg-id="{tvg_id}" group-title="{provider}" ch-number="{ch_number}" group-title="{grupo}" tvg-logo="{tvg_logo}",{ch_name}
#KODIPROP:inputstream=inputstream.adaptive
#KODIPROP:inputstream.adaptive.drm_legacy=org.w3.clearkey|http://redott.ath.cx/ott/key/{ch_number}
#KODIPROP:inputstream.adaptive.play_timeshift_buffer=false
#KODIPROP:inputstream.adaptive.manifest_headers=User-Agent={useragent}
#KODIPROP:inputstream.adaptive.stream_headers=User-Agent={useragent}
{url}
a  
#EXTINF:-1 tvg-id="{tvg_id}" group-title="{provider}" ch-number="{ch_number}" group-title="{grupo}" tvg-logo="{tvg_logo}",{ch_name}
#KODIPROP:inputstream=inputstream.adaptive
#KODIPROP:inputstream.adaptive.drm_legacy=org.w3.clearkey|{keys}
#KODIPROP:inputstream.adaptive.play_timeshift_buffer=false
#KODIPROP:inputstream.adaptive.manifest_headers=User-Agent={useragent}
#KODIPROP:inputstream.adaptive.stream_headers=User-Agent={useragent}
{url}
r  oranger   z	#EXTM3U

rv  rw  inicior   r  r  rB  r  r   rN   r   z/var/www/html/ott/key/r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rx  r  r  r  r  ry  r  r  r  r  )r  r  r  r  r  r  r  r  r  r  r  ry  r   r  zArchivo kodi creado como )r   rz  r{  r  r  r|  	listakodirg   re   r   rX   r  r  r  r   )rV  r  r!  r"  r  r  r  r  r#  r  r  r  r   r   r  r7   r7   r8   
lista_kodi  sh   

:


2$r  c                 C   s(  t tjd}t|}W d    n1 sw   Y  d}d}|d D ]m}|d }| |  kr3q#| |  krtddD ]N}z7|d | d	 d
 }t d| dd$}	|j|d | d	 d |d | d	 d d}
|	|
 W d    n1 sw   Y  t d| dd}|jd7i d|d | d 	 d|d | d	 d
 d|d | d	 d d|d | d	 d 
dd
dd
dd
dd d!|d | d	 d"  d#|d | d	 d# 	 d$|d | d	 d% d&|d | d	 d' d(|d | d	 d 	 
dd d)|d | d	 d) 	 d*|d | d	 d+ d,|d- d. d/|d- d0 d1|d- d1 d2|d- d2 d3|d- d3 d4d5d6|d | d	 d6 d|d | d	 d }|| W d    n	1 svw   Y  W qA ty   Y  n
 ty   Y qAw q#d S )8Nr   u   
<?php
// Redirección a la URL de transmisión en alta calidad del canal {nombre_canal}
header("Location: {playing_url}");
exit();
    a  
<?php

$token_file = '/opt/scripts/wks/movistar/token.txt';
$lastModifiedTime = filemtime($token_file);
$timeElapsed = time() - $lastModifiedTime;
$maxTime = 22 * 60 * 60;
if ($timeElapsed >= $maxTime) 
    shell_exec('python3 /opt/scripts/wks/movistar_bot.py 2 2>&1');
$token_new = file_get_contents($token_file);

echo "#EXTINF:-1 ch-number=\"{ch_number}\" index-number=\"{index_number}\" "
    . "tvg-id=\"{tvg_id}\" tvg-name=\"{tvg_name}\" group-title=\"{group_title}\" "
    . "provider=\"{provider}\" tvg-logo=\"{tvg_logo}\" "
    . "catchup-type=\"{catchup_type}\" catchup-days=\"{catchup_days}\" "
    . "catchup-source=\"{catchup_u7d}\" "
    . ",{ch_name} {provider}\n";
echo "#EXTGRP: {grupo}\n";
echo "#KODIPROP:inputstream=inputstream.adaptive\n";
echo "#KODIPROP:inputstream.adaptive.manifest_type=mpd\n";
echo "#KODIPROP:inputstream.adaptive.license_type=clearkey\n";
echo "#KODIPROP:inputstream.adaptive.stream_headers=Origin={origin}\n";
echo "#KODIPROP:inputstream.adaptive.stream_headers=Referer={referer}\n";
echo "#KODIPROP:inputstream.adaptive.stream_headers=User-Agent={useragent}\n";
echo "#EXTHTTP:{token}\n";
echo "#KODIPROP:inputstream.adaptive.license_key={keys}\n";
echo "http://redott.ath.cx:1515/proxy?id={ch_number}&index=1\n";
        rv  rw  r   r  r  rB  r  z/var/www/html/ott/movistar/url/r  r   r  r  )playing_urlnombre_canalz/var/www/html/ott/movistar/r  r  r  index_numberzindex-numberr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  id_providerzid-providerr  r  catchup_u7dzcatchup-u7dcatchup_typerx  zcatchup-typecatchup_dayszcatchup-daysr  r  r  ry  z#{\"X-TCDN-token\":\"{$token_new}\"}r   r7   )r   rz  r{  r  r  r|  re   rX   rg   r  r   r  r  )rV  r  r!  r"  templatephpr  r  r  r  salida2contenido_phpr#  r  r7   r7   r8   lista_proxy3  s   
4 	
r  rE   )rM   )NN)rB   r  r:   statwgetioglobr  r   binasciidaemonuuidrS   signalnumpyrequestsr  schedulehttpxgetpassrr   r{   ro   random	xmlschemaconfigparserurllib.parseurlliburllib.requestxml.etree.ElementTreeetreeElementTreeETxml.domr   undetected_chromedriverucr   rZ   pytzlocaler   r   string	xmltodictasynciologging	threadingsqlite3cmdr  rW  flaskr   r   r   r   r   r   r	   pathlibr
   dateutilr   r   r   r   r   r   r   bs4r   coloramar   r   r   r   r   r   aiogramr   r   r   r   aiogram.enumsr   aiogram.filtersr   aiogram.typesr    aiogram.utils.markdownr!   rz  r"   dblistastelegramr$   pywidevine.L3.cdmr%   r&   %pywidevine.L3.decrypt.wvdecryptcustomr'   pywidevine.L3.getPSSHpywidevine.L3.wvd.cdmr(   pywidevine.L3.wvd.devicer)   pywidevine.L3.wvd.psshr*   r   	localtimerN  time_localtimer  r  r  xsd_url	XMLSchemaschemabase_get_urlsr,   r>   rD   rJ   rc   rj   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r  r  r$  r'  r*  r.  r5  r9  r:  r<  r=  r>  rC  rE  rK  r^  r`  rk  rq  rs  ru  r  r  r  r  r  r  r  r  r  r  r7   r7   r7   r8   <module>   s   8   (     
	

	

	'

"%


XW