U
    uÕÕj'  ã                   @   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mZ d dl	m	Z	m
Z
 d dlmZ edƒZedƒZdZdZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zedkr¦eƒ  dS )é    N)ÚPath)ÚdatetimeÚtimezone)Ú	iterparsez"/etc/hermes-nexus/epg/sources.jsonz/var/lib/hermes-nexus/epg.dbi   i   @c               	   C   s.   t  t¡�} |  d¡ |  d¡ W 5 Q R X d S )NaM  
            CREATE TABLE IF NOT EXISTS epg_programas (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                fuente TEXT NOT NULL,
                canal TEXT NOT NULL,
                titulo TEXT NOT NULL,
                inicio TEXT,
                fin TEXT,
                descripcion TEXT
            )
        zn
            CREATE INDEX IF NOT EXISTS idx_epg_busqueda
            ON epg_programas(titulo, inicio)
        )Úsqlite3ÚconnectÚDBÚexecute)Údb© r   ú"/var/www/html/NFL_ST/hermes_epg.pyÚ
iniciar_db   s    
r   c              
   C   sÈ   t jj| ddid�}tjdd��ž}t|jƒ}d}zft jj|dd��>}| d	¡}|sTq||t	|ƒ7 }|t
krptd
ƒ‚| |¡ qDW 5 Q R X |W W  5 Q R £ S  tk
r¸   |jdd� ‚ Y nX W 5 Q R X d S )Nz
User-AgentzHermesNexus-EPG/1.0)ZheadersF©Údeleter   é<   )Ztimeouté   u   EPG supera el tamaÃ±o permitidoT©Ú
missing_ok)ÚurllibZrequestZRequestÚtempfileÚNamedTemporaryFiler   ÚnameZurlopenÚreadÚlenÚMAX_DOWNLOADÚ
ValueErrorÚwriteÚ	ExceptionÚunlink)ÚurlZreqÚtmpÚarchivoÚtotalÚrÚbloquer   r   r   Ú	descargar#   s(    þ

r%   c                 C   s$   |   |¡}|d k	r |jpd ¡ S dS )NÚ )ÚfindÚtextÚstrip)ZelementoZetiquetaZnodor   r   r   Útexto@   s    
r*   c                 C   sà  t | d ƒ}d }�z¨| d¡�}| d¡dk}W 5 Q R X |r¸tjdd��d}t|jƒ}d	}t |d¡�>}| d
¡}|svqž|t	|ƒ7 }|t
kr’tdƒ‚| |¡ qfW 5 Q R X W 5 Q R X |}	n|}	tƒ  g }
t t¡�Þ}| d¡ | d| d f¡ tt|	ƒdd�D ]~\}}|jdkrþ|
 | d |j dd¡t|dƒ|j dd¡|j dd¡t|dƒf¡ | ¡  t	|
ƒdkrþ| d|
¡ |
 ¡  qþ|
�r�| d|
¡ | d| d f¡ ¡ d	 }W 5 Q R X |W ¢S |jdd� |�rÚ|jdd� X d S )Nr   Tr   Úrbé   s   ‹Fr   r   r   z"XML descomprimido demasiado grandeZBEGINz(DELETE FROM epg_programas WHERE fuente=?Úid)Úend)ZeventsZ	programmeZchannelr&   ÚtitleÚstartÚstopZdesciè  zÓ
                            INSERT INTO epg_programas
                            (fuente, canal, titulo, inicio, fin, descripcion)
                            VALUES (?, ?, ?, ?, ?, ?)
                        z³
                    INSERT INTO epg_programas
                    (fuente, canal, titulo, inicio, fin, descripcion)
                    VALUES (?, ?, ?, ?, ?, ?)
                z1SELECT COUNT(*) FROM epg_programas WHERE fuente=?)r%   r   Úopenr   r   r   r   r   Úgzipr   ÚMAX_UNCOMPRESSEDr   r   r   r   r   r   r	   r   ÚstrÚtagÚappendZattribÚgetr*   ÚclearZexecutemanyZfetchone)Úfuenter!   Ztemporal_xmlÚfZ
comprimidor    r"   Zentradar$   Zarchivo_xmlZ	registrosr
   ZeventoÚelemÚcantidadr   r   r   Úimportar_fuenteD   sx    

 
þþ
ú	ü
üþýr>   c                  C   sˆ   t  tjdd�¡d } | D ]h}| dd¡s,qzt|ƒ}t|d d|ƒ W q tk
r€ } zt|d dt|ƒj	ƒ W 5 d }~X Y qX qd S )	Nzutf-8)ÚencodingZsourcesZenabledTr-   z
PROGRAMAS:zERROR:)
ÚjsonÚloadsÚCONFIGÚ	read_textr8   r>   Úprintr   ÚtypeÚ__name__)Zfuentesr:   r=   Úer   r   r   Úejecutar–   s    
ÿþrH   Ú__main__)r3   r@   r   r   Zurllib.requestr   ZshutilÚpathlibr   r   r   Zdefusedxml.ElementTreer   rB   r   r   r4   r   r%   r*   r>   rH   rF   r   r   r   r   Ú<module>   s&   R