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mZmZ d dlmZ d dl	Z	d dl
Z
e d¡Ze
 d¡Ze j dd¡Zdd	d
dddddddœ	ZdZdd„ Zd(dd„Zd)dd„Zd*dd„Zedk�r8d dlZd dlmZ e ¡ Zejdd d!� ejd"d#d$� e ¡ Zeejej�re  ej¡ndd%�Z!e"ej#e!dd&d'�ƒ dS )+é    N)ÚdatetimeÚtimezone)ÚurlparseZhermes_footballzAmerica/TijuanaZHERMES_FOOTBALL_DBz!/var/lib/hermes-nexus/football.db)zLiga MXéd   )zChampions Leagueén   )zPremier LeagueéZ   )ZLaLigar   )zSerie AéP   )Z
Bundesligar   )zLigue 1éF   )zEuropa LeagueéK   )zCopa Libertadoresr
   )	zmex.1zuefa.championszeng.1zesp.1zita.1zger.1zfra.1zuefa.europazconmebol.libertadoreszBhttps://site.api.espn.com/apis/site/v2/sports/soccer/{}/scoreboardc                  C   sl   t jt j t¡dd� tjtdd�} tj| _|  	d¡ dd„ |  	d¡ 
¡ D ƒ}d	|kr`|  	d
¡ |  ¡  | S )NT)Úexist_oké   )Útimeouta4  CREATE TABLE IF NOT EXISTS events(
 id TEXT PRIMARY KEY, league TEXT NOT NULL, league_code TEXT NOT NULL,
 home TEXT NOT NULL, away TEXT NOT NULL, logo TEXT NOT NULL,
 starts_utc TEXT NOT NULL, state TEXT NOT NULL, network TEXT NOT NULL,
 source TEXT NOT NULL, local_day TEXT NOT NULL, updated TEXT NOT NULL)c                 S   s   h | ]}|d  ’qS )é   © ©Ú.0Úrr   r   ú'/var/www/html/NFL_ST/hermes_football.pyÚ	<setcomp>   s     zconnect.<locals>.<setcomp>zPRAGMA table_info(events)Ú	away_logoz@ALTER TABLE events ADD COLUMN away_logo TEXT NOT NULL DEFAULT '')ÚosÚmakedirsÚpathÚdirnameÚDBÚsqlite3ÚconnectZRowZrow_factoryÚexecuteÚfetchallÚcommit)ÚdbZcolsr   r   r   r      s    

r   é   c                 C   sØ  g }g }t  ¡ D �]¤\}\}}�zDtjt |¡|  d¡ddœdddid�}| ¡  | ¡  dg ¡D �]ü}| d	¡ptg }	|	s|qb|	d
 }
|
 d¡p�g }t	|ƒdk r qbt
dd„ |D ƒ|d
 ƒ}t
dd„ |D ƒ|d ƒ}dd„ }| dd¡}|sêqbt | dd¡¡}|jd k�r|jtjd�}| tj¡}| t¡ ¡ | k�r8qb|
 d¡�pFg }ttdd„ |D ƒƒƒ}dd„ }||ƒ}||ƒ}|�s®| di ¡ d¡�p’g }|�rª|d
  dd¡nd}|�rØt|ƒjdk�sÔt|ƒjd k�rØd}t| d!¡�pèdƒ}| ¡ �søqb| t|d" | ||||ƒ||ƒ||| ¡ | d#i ¡ d$i ¡ d%d&¡|�rLd' |¡nd(d)|  ¡ |d*�¡ qbW q tk
�r´ } z0| |d+ t |ƒj! d+ t|ƒd d…  ¡ W 5 d }~X Y qX q|j"d,d-„ d.� |d |… |fS )/Nz%Y%m%dr   )ZdatesÚlimitr!   z
User-AgentzHermesFootball/1.0)Úparamsr   ZheadersÚeventsZcompetitionsr   Zcompetitorsé   c                 s   s    | ]}|  d ¡dkr|V  qdS )ÚhomeAwayÚhomeN©Úget©r   Úxr   r   r   Ú	<genexpr>.   s      zfetch.<locals>.<genexpr>c                 s   s    | ]}|  d ¡dkr|V  qdS )r&   ÚawayNr(   r*   r   r   r   r,   /   s      r   c                 S   s(   |   di ¡  d¡p&|   di ¡  d¡p&dS )NÚteamZdisplayNameÚnameÚ r(   ©r+   r   r   r   r/   0   ó    zfetch.<locals>.nameÚdater0   ÚZz+00:00)ÚtzinfoÚ
broadcastsc                 s   s,   | ]$}|  d g ¡D ]}|rt|ƒV  qqdS )ÚnamesN)r)   Ústr)r   ÚbÚnr   r   r   r,   9   s
        c                 S   sh   |   di ¡}|  d¡pd}|sD|  d¡p*g }|r@|d   dd¡nd}t|ƒ}|jdkrd|jdkrd|S dS )	Nr.   Úlogor0   Úlogosr   ÚhrefÚhttps©za.espncdn.comza1.espncdn.comza2.espncdn.com)r)   r   ÚschemeÚhostname)Zsider.   Úurlr<   Úparsedr   r   r   Ú	team_logo:   s    ÿzfetch.<locals>.team_logor.   r<   r=   r>   r?   Úidú:ÚstatusÚtypeÚstateZprez, zCanal por confirmarZESPN)rE   ÚleagueÚleague_coder'   r-   r;   r   Ú
starts_utcrI   ÚnetworkÚsourceÚ	local_dayÚpriorityz: c                 S   s   | d  | d | d fS )NrP   rL   rE   r   r1   r   r   r   Ú<lambda>S   r2   zfetch.<locals>.<lambda>)Úkey)#ÚLEAGUESÚitemsÚhttpxr)   ÚURLÚformatÚstrftimeZraise_for_statusÚjsonÚlenÚnextr   ÚfromisoformatÚreplacer5   r   ÚutcÚ
astimezoneÚTZr3   ÚsortedÚsetr   r@   rA   r8   ÚisdigitÚappendÚdictÚ	isoformatÚjoinÚ	ExceptionrH   Ú__name__Úsort)Údayr"   ÚfoundÚerrorsÚcoderJ   rP   r   ZevÚcompsÚcompZsidesr'   r-   r/   Zdate_rawZdtr6   ZchannelsrD   r   r;   r<   ZeidÚer   r   r   Úfetch!   sv     ÿ     	ÿ
       ü@rr   Fc                    sÎ   |pt  t¡ ¡ }t|ƒ\}}| r®|r®tƒ }zvt  tj¡ 	¡ }| 
d¡ dd„ | 
d¡D ƒ}|D ]6‰ ˆ d |krrq`| 
dt‡ fdd„d	D ƒƒ|f ¡ q`| ¡  W 5 | ¡  X | 	¡ t| o¼|ƒt|ƒ||d
œS )NzlCREATE TABLE IF NOT EXISTS hermes_football_exclusions (event_id TEXT PRIMARY KEY, deleted_utc TEXT NOT NULL)c                 S   s   h | ]}|d  ’qS )r   r   r   r   r   r   r   ^   s     zrun.<locals>.<setcomp>z/SELECT event_id FROM hermes_football_exclusionsrE   a¯  INSERT INTO events
      (id,league,league_code,home,away,logo,away_logo,starts_utc,state,network,source,local_day,updated)
      VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)
      ON CONFLICT(id) DO UPDATE SET
      league=excluded.league, home=excluded.home,away=excluded.away,
      logo=excluded.logo,away_logo=excluded.away_logo,starts_utc=excluded.starts_utc,state=excluded.state,
      network=excluded.network,updated=excluded.updatedc                 3   s   | ]}ˆ | V  qd S )Nr   )r   Úk©rq   r   r   r,   h   s     zrun.<locals>.<genexpr>)rE   rJ   rK   r'   r-   r;   r   rL   rI   rM   rN   rO   )rk   Z	publishedÚcountrm   r$   )r   Únowr`   r3   rr   r   Úcloser   r^   rf   r   Útupler   ÚboolrZ   )Úpublishrk   Úrowsrm   r    rv   Z	excluidosr   rt   r   ÚrunV   s*    
 ù
  ÿr|   c                 C   s¾   ddl m} tƒ }zœ| dks$| dkr4| d¡ ¡ }njt| tƒrˆ| |  	dd¡dd… d |  	dd¡dd…  d |  	dd¡dd	…  ¡} | d
|  
¡ f¡ ¡ }dd„ |D ƒW ¢S | ¡  X dS )uG   Sin filtro: todas las tarjetas. Con fecha: solo dÃ­a local de Mexicali.r   ©r3   Nr0   z-SELECT * FROM events ORDER BY starts_utc DESCú-é   é   é   z:SELECT * FROM events WHERE local_day=? ORDER BY starts_utcc                 S   s   g | ]}t |ƒ‘qS r   )re   r*   r   r   r   Ú
<listcomp>y   s     zlist_events.<locals>.<listcomp>)r   r3   r   rw   r   r   Ú
isinstancer8   r\   r]   rf   )rk   Z_dater    r{   r   r   r   Úlist_eventsn   s    
Jr„   Ú__main__r}   z	--publishÚ
store_true)Úactionz--datez YYYY-MM-DD, fecha local Mexicali)Úhelp)rz   rk   r%   )Zensure_asciiÚindent)r!   )FN)N)$r   r   rY   ÚreZloggingr   r   Úurllib.parser   rU   ZpytzZ	getLoggerZLOGr`   Úenvironr)   r   rS   rV   r   rr   r|   r„   ri   Úargparser3   ÚArgumentParserÚpÚadd_argumentÚ
parse_argsÚarz   r\   ÚresultÚprintÚdumpsr   r   r   r   Ú<module>   s<   (

    û
5


"