o
    j                     @   s~   d Z ddlZddlmZmZmZ ddlmZ ddlmZ ddl	m
Z
 ddlZddlmZ eeZedZG d	d
 d
eZdS )u#  
Sky EPG Scraper — fetches schedule data from Sky Italia's GTV API.
Also covers Eurosport 1 and Eurosport 2 channels.

Endpoint: https://apid.sky.it/gtv/v1/events
Params: from, to, pageSize, pageNum, env, channels
Returns events with: eventTitle, eventSynopsis, start/end times, image URL
    N)datedatetime	timedelta)List)ZoneInfo)EPGEntry)BaseScraperzEurope/Romec                	   @   sv   e Zd ZdefddZdefddZdedededee	 fd	d
Z
dedede	dB fddZededefddZdS )
SkyScraperreturnc                 C   s   dS )Nsky selfr   r   D/var/www/addictedbytheproject.nl/epg_general/scrapers/sky_scraper.pyget_provider_name   s   zSkyScraper.get_provider_namec                 C   s   t jS )N)configSKY_CHANNELSr   r   r   r   get_channels   s   zSkyScraper.get_channels
channel_idchannel_nametarget_datec                 C   s  | d}t|dkrtd|  g S |\}}d}|dkr$d}d}n|dkr*d	}t|j|j|jd
d
d
td}|t	dd }	|
td}
|	
td}|
d}|d}tjj||||d}| |}|dg }g }|D ]r}zO| ||}|r|r|jrzt|j}|t	dd  |_W n	 ty   Y nw |jrzt|j}|t	dd  |_W n	 ty   Y nw || W qp ty } ztd|dd d|  W Y d }~qpd }~ww |S )N#   z%[sky] Formato channel_id non valido: FzSky Uno Plus9115TzSky Collection9047r   )tzinfo   )hoursUTCz%Y-%m-%dT%H:%M:%SZ)	date_fromdate_toenvchannel_numevents   z[sky] Errore parsing evento '
eventTitle?z': )splitlenloggererrorr   yearmonthdayROME_TZr   
astimezoner   strftimer   SKY_BASE_URLformat_make_requestget_parse_eventstartfromisoformat	isoformat
ValueErrorendappend	Exceptiondebug)r   r   r   r   partsr!   r"   is_timeshiftlocal_start	local_end	utc_startutc_endr   r    urldatar#   entriesevententrysteter   r   r   fetch_channel_schedule   s|   





z!SkyScraper.fetch_channel_schedulerG   Nc              	   C   s@  | dd}|s
d S | ddp| dd}| ddp!| dd}| |}| |}|s0d S d}| di }	|	r|	 dg }
|
rd }d	D ]}|
D ]}| d
|kr[| di } nqJ|r` nqF|svt|
trvt|
dkrv|
d  di }|r| dr|d }|dr|}nd| }|s| dd}|r|dr|}nd| }|s| di }| dd}|r|dr|}nd| }| ddp| ddpd }d}| dd}|r|}n| di  di  dr|d d d }| dd}| dd}| dd}|r||kr| d| }t|||||||dS )Nr%    	starttimerI   endtimerJ   content	imagesMap)scenescene_key_art
backgroundcoverkeyimgr   rD   httpzhttps://guidatv.sky.it
eventImagechannellogoeventSynopsiseventDescription
eventGenregenrenameeventSeasoneventEpisodeeventSubtitlez - )titleimagerZ   r6   r:   descriptioncategory)r4   _parse_sky_datetime
isinstancelistr(   
startswithstripr   )r   rG   r   rd   	start_strend_str	start_isoend_isore   rP   
images_map	cover_img
key_to_tryimg_itemurl_pathevent_imagech	logo_pathrf   rg   r_   seasonepisodesubtitler   r   r   r5   g   s   








zSkyScraper._parse_eventdt_strc              	   C   s^   | sdS z|  drt| dd}nt| }|t}| W S  ttfy.   Y dS w )z9Parse Sky datetime format to ISO 8601 with Rome timezone.rM   Zz+00:00)	endswithr   r7   replacer/   r.   r8   r9   	TypeError)r|   dtdt_romer   r   r   rh      s   



zSkyScraper._parse_sky_datetime)__name__
__module____qualname__strr   dictr   r   r   r   rL   r5   staticmethodrh   r   r   r   r   r	      s    

H[r	   )__doc__loggingr   r   r   typingr   zoneinfor   modelsr   r   scrapers.base_scraperr   	getLoggerr   r)   r.   r	   r   r   r   r   <module>   s    
