o
    j                     @   sz   d Z ddlZddl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]  
Mediaset EPG Scraper — fetches schedule data from Mediaset Infinity API.

Endpoint: https://api-ott-prod-fe.mediaset.net/PROD/play/feed/allListingFeedEpg/v2.0
Params: byListingTime={epoch_start}~{epoch_end}&byCallSign={channel_id}
Returns entries with listings containing: epgTitle, startTime, endTime (epoch ms),
program.thumbnails, description
    N)datedatetime)List)ZoneInfo)EPGEntry)BaseScraperzEurope/Romec                	   @   s`   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dS )MediasetScraperreturnc                 C   s   dS )Nmediaset selfr   r   I/var/www/addictedbytheproject.nl/epg_general/scrapers/mediaset_scraper.pyget_provider_name   s   z!MediasetScraper.get_provider_namec                 C   s   t jS )N)configMEDIASET_CHANNELSr   r   r   r   get_channels   s   zMediasetScraper.get_channels
channel_idchannel_nametarget_datec                 C   s  ddl m} t |j|j|jdddtd|dd }||dd }t| d }t| d }tj	j
|||d}	| |	}
|
d	i }|d
g }|sNg S |d dg }g }|D ]2}z| ||}|rj|| W qZ ty } ztd|dd d|  W Y d }~qZd }~ww |S )Nr   )	timedelta)tzinfo   )hours    i  )epoch_start	epoch_endr   responseentrieslistingsz#[mediaset] Errore parsing listing 'mediasetlisting$epgTitle?z': )r   r   yearmonthdayROME_TZint	timestampr   MEDIASET_BASE_URLformat_make_requestget_parse_listingappend	Exceptionloggerdebug)r   r   r   r   r   start_dtend_dtr   r   urldatar   entries_listr   r   listingentryer   r   r   fetch_channel_schedule   sP   


z&MediasetScraper.fetch_channel_scheduler6   Nc              	   C   sx  | dd}|s| dd}|sd S | d}| d}|s d S t|}|r,t|nd}d}| di }	|	 di }
dD ]}|
 D ]\}}||rX| d	rX|d	 } nqD|r] nq>| dd }|sp|	 dd }d}|	r|	 d
g }|r|d }n0|	 dg }|D ]}| ddkr| dd} nq|s|D ]}| ddkr| dd} nqt|||||||dS )Nr     description	startTimeendTimeprogram
thumbnails)image_horizontal_coverimage_keyframe_posterimage_header_posterimage_verticalimg_s_master_boxartr3   zmediasetprogram$genresr   tagsschemeprimaryGenretitlecategory)rH   imagechannelstartendr;   rI   )r+   r   epoch_ms_to_isoitems
startswithstrip)r   r6   r   rH   start_msend_ms	start_isoend_isorJ   r>   r?   prefixkeythumbr;   rI   genresrE   tagr   r   r   r,   M   sh   



zMediasetScraper._parse_listing)__name__
__module____qualname__strr   dictr   r   r   r   r9   r,   r   r   r   r   r      s    

.r   )__doc__loggingr   r   typingr   zoneinfor   modelsr   r   scrapers.base_scraperr   	getLoggerr[   r/   r%   r   r   r   r   r   <module>   s    
