
    j                         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j                  e      Z ed      Z G d	 d
e      Zy)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            	       v    e Zd ZdefdZdefdZdedededee	   fdZ
dedede	d	z  fd
Zededefd       Zy	)
SkyScraperreturnc                      y)Nsky selfs    MC:\Users\Claud\Documents\Epg General Channel - Simple\scrapers\sky_scraper.pyget_provider_namezSkyScraper.get_provider_name   s        c                 "    t         j                  S )N)configSKY_CHANNELSr   s    r   get_channelszSkyScraper.get_channels   s    """r   
channel_idchannel_nametarget_datec           	         |j                  d      }t        |      dk7  rt        j                  d|        g S |\  }}d}|dk(  rd}d}n|dk(  rd	}t	        |j
                  |j                  |j                  d
d
d
t              t        d      z
  }|t        d      z   }	|j                  t        d            }
|	j                  t        d            }|
j                  d      }|j                  d      }t        j                  j                  ||||      }| j!                  |      }|j#                  dg       }g }|D ]  }	 | j%                  ||      }|r|r|j&                  rB	 t	        j(                  |j&                        }|t        d      z   j+                         |_        |j.                  rB	 t	        j(                  |j.                        }|t        d      z   j+                         |_        |j1                  |        |S # t,        $ r Y nw xY w# t,        $ r Y /w xY w# t2        $ r6}t        j5                  d|j#                  dd       d|        Y d }~#d }~ww xY w)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es                          r   fetch_channel_schedulez!SkyScraper.fetch_channel_schedule   sl      %u:?LL@MNI [>) KL-- K k//q!G
 A  )""55	  **8E?;	&&x7 &&';<	""#78!!((#	 ) 
 !!#&(B'E))%># ;;%%-%;%;EKK%H/1IA4F/F.Q.Q.S !99%%-%;%;EII%F-/)!2D-D,O,O,Q	 NN5)# 2 ! $. % $% $. % $%  		,45S= sb   "H+)AH*H+7AH8H+	HH+HH+	H(%H+'H((H++	I*4+I%%I*rN   Nc           	      L   |j                  dd      }|sy |j                  dd      xs |j                  dd      }|j                  dd      xs |j                  dd      }| j                  |      }| j                  |      }|sy d}|j                  di       }	|	r|	j                  dg       }
|
rd }d	D ]5  }|
D ]*  }|j                  d
      |k(  s|j                  di       } n |s5 n |s3t        |
t              r#t	        |
      dkD  r|
d   j                  di       }|r/|j                  d      r|d   }|j                  d      r|}nd| }|s-|j                  dd      }|r|j                  d      r|}nd| }|s?|j                  di       }|j                  dd      }|r|j                  d      r|}nd| }|j                  dd      xs |j                  dd      xs dj                         }d}|j                  dd      }|r|}n<|j                  di       j                  di       j                  d      r|d   d   d   }|j                  dd      }|j                  dd      }|j                  dd      }|r||k7  r| d| }t        |||||||      S )Nr,    	starttimerP   endtimerQ   content	imagesMap)scenescene_key_art
backgroundcoverkeyimgr   rK   httpzhttps://guidatv.sky.it
eventImagechannellogoeventSynopsiseventDescription
eventGenregenrenameeventSeasoneventEpisodeeventSubtitlez - )titleimagerb   r=   rA   descriptioncategory)r;   _parse_sky_datetime
isinstancelistr/   
startswithstripr   )r   rN   r   rl   	start_strend_str	start_isoend_isorm   rX   
images_map	cover_img
key_to_tryimg_itemurl_pathevent_imagech	logo_pathrn   ro   rg   seasonepisodesubtitles                           r   r<   zSkyScraper._parse_eventg   s   		,+ IIk2.E%))D"2E	))Ir*Aeiib.A,,Y7	**73 ))Ir* ["5J 	"SJ$.#<<.*<(0UB(?I! %/ ! #T !Z
D%Ac*oXYFY *1 1 1% <Iu!5(/H**62 ("8
 C ))L"5K))&1'E4[MBE 9b)Bvr*I''/%E4YK@E IIor* yy+R0
%'	 	 		,+HYYy"%))'26::6BY'08H ="-))NB/99_b1E)gS
+E #
 	
r   dt_strc                    | sy	 | j                  d      r&t        j                  | j                  dd            }nt        j                  |       }|j	                  t
              }|j                         S # t        t        f$ r Y yw xY w)z9Parse Sky datetime format to ISO 8601 with Rome timezone.rU   Zz+00:00)	endswithr   r>   replacer6   r5   r?   r@   	TypeError)r   dtdt_romes      r   rp   zSkyScraper._parse_sky_datetime   s|     	s#++FNN3,IJ++F3 mmG,G$$&&I& 		s   A0A6 6BB)__name__
__module____qualname__strr   dictr   r   r   r   rS   r<   staticmethodrp   r   r   r   r   r      s    3 #d #F FC F-1F6:8nFPY
$ Y
c Y
ho Y
v C C  r   r   )__doc__loggingr   r   r   typingr   zoneinfor   modelsr   r   scrapers.base_scraperr	   	getLoggerr   r0   r5   r   r   r   r   <module>r      sN     . .     -			8	$
=
!| |r   