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   
Rai EPG Scraper — fetches schedule data from RaiPlay API.

Endpoint: https://www.raiplay.it/palinsesto/app/{channel_id}/{DD-MM-YYYY}.json
Returns events with: name, hour, duration_in_minutes, image, description
    N)datedatetime	timedelta)List)ZoneInfo)EPGEntry)BaseScraperzEurope/Romec                	   @   sd   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e	dB fddZdS )
RaiScraperreturnc                 C   s   dS )Nrai selfr   r   D/var/www/addictedbytheproject.nl/epg_general/scrapers/rai_scraper.pyget_provider_name   s   zRaiScraper.get_provider_namec                 C   s   t jS )N)configRAI_CHANNELSr   r   r   r   get_channels   s   zRaiScraper.get_channels
channel_idchannel_nametarget_datec                 C   s   g }dD ]W}|t |d }|d}tjj||d}| |}	|	dg }
|
D ]3}z| |||}|r8|| W q' t	yZ } zt
d|dd d	|  W Y d }~q'd }~ww q|S )
N)r   )daysz%d-%m-%Y)r   r   eventsz[rai] Errore parsing evento 'name?z': )r   strftimer   RAI_BASE_URLformat_make_requestget_parse_eventappend	Exceptionloggerdebug)r   r   r   r   entriesoffsetddate_strurldatar   evententryer   r   r   fetch_channel_schedule   s0   


z!RaiScraper.fetch_channel_scheduler,   Nc              	   C   s  | d}| d}| dd}|r|sd S z|d}t|j|j|jt|d t|d td}W n tt	fy>   Y d S w d}	| d	d}
|
rz0|
d}t|d d
 t|d  }t
|dkrm|t|d d
 7 }|t|d }| }	W n tt	fy   Y nw | dd}|r|dstj| }| dd }d}| di }|r| dd}|s| dd}t|||| |	||dS )Nr   hourduration_in_minutes :r      )tzinfoduration<      )minutesimagehttpdescriptiondfpescaped_genre_nameescaped_typology_name)titler:   channelstartendr<   category)r    splitr   yearmonthdayintROME_TZ
ValueError
IndexErrorlenr   	isoformat
startswithr   RAI_IMAGE_PREFIXstripr   )r   r,   r   r   r   r0   duration_str
hour_partsstart_dtend_isor6   partstotal_minutesend_dtr:   r<   rD   r=   r   r   r   r!   7   s^   





zRaiScraper._parse_event)__name__
__module____qualname__strr   dictr   r   r   r   r/   r!   r   r   r   r   r	      s    


r	   )__doc__loggingr   r   r   typingr   zoneinfor   modelsr   r   scrapers.base_scraperr   	getLoggerrY   r$   rJ   r	   r   r   r   r   <module>   s    
