o
    Ikc                     @   s   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ eeZeedejG dd de
ZeZdS )z
$description Live TV channels and video on-demand service from france.tv, a French public, state-owned broadcaster.
$url france.tv
$url francetvinfo.fr
$type live, vod
$region France, Andorra, Monaco
    N)datetime)urlparse)LOCAL)PluginPluginErrorpluginmatcher)
useragentsvalidate)
DASHStream)	HLSStream)
update_qsdzc
    https?://(?:
        (?:www\.)?france\.tv/
        |
        (?:.+\.)?francetvinfo\.fr/
    )
c                   @   s    e Zd ZdZdZdZdd ZdS )Pluzzz5.51.35z/https://geoftv-a.akamaihd.net/ws/edgescape.jsonzDhttps://player.webservices.francetelevisions.fr/v1/videos/{video_id}c           
      c   s   | j jjdtji tdtj	d}| j jj
| jtt dddtiiit
dd}td	|  d }zW| j jj
| jtt tttd
tttdtjt
dt dtigt
dttdtttdt
dttdtttdtd}W n	 ty   Y nw |sd S td|  t| jj|d|dd| jt| jjdd|dt j!t"d#dd
}| j jj
|tt tddtd d!t t d"d#tid$t$d%d&d'd(d\}}}| _%t|d)|i}| j jj
|tt d)t it
d)d}	|d kr,t&'| j |	( E d H  d S |d!kr?t)*| j |	( E d H  d S d S )*Nz
User-AgentzChrome/(\d+)   reponsegeo_infocountry_code)r   r   r   )schemaz	Country: z>.//script[contains(text(),'window.FTVPlayerVideos')][1]/text()z@window\.FTVPlayerVideos\s*=\s*(?P<json>\[{.+?}])\s*;\s*(?:$|var)jsonvideoId)r   r   z8.//script[contains(text(),'new Magnetoscope')][1]/text()zQplayer\.load\s*\(\s*{\s*src\s*:\s*(?P<q>['"])(?P<video_id>.+?)(?P=q)\s*}\s*\)\s*;video_idz<.//*[@id][contains(@class,'francetv-player-wrapper')][1]/@idz,.//*[@data-id][@class='magneto'][1]/@data-idz
Video ID: )r   i  i8  mobilechromeios)tzz%z)
r   whplayer_versiondomaindevice_typebrowserbrowser_versionosgmtztoken-akamaidaidashhls)workflowformattokenurltitle)videometa)r+   r'   )r+   r(   )r+   r)   )r,   r*   r)   )+sessionhttpheadersupdater   CHROMErecompilesearchgroupgetGEO_URLr	   Schema
parse_jsonstrlogdebugr)   
parse_htmlanyallxml_xpath_stringregexDOTALLr   r   API_URLr'   PLAYER_VERSIONr   netlocr   nowLOCALTIMEZONEstrftime	union_getr*   r
   parse_manifestitemsr   parse_variant_playlist)
selfCHROME_VERSIONr   r   api_urlvideo_format	token_urlr)   data_url	video_url rT   :/usr/lib/python3/dist-packages/streamlink/plugins/pluzz.py_get_streams%   s   
!





zPluzz._get_streamsN)__name__
__module____qualname__rD   r7   rC   rV   rT   rT   rT   rU   r      s
    r   )__doc__loggingr2   r   urllib.parser   isodater   rG   streamlink.pluginr   r   r   streamlink.plugin.apir   r	   streamlink.stream.dashr
   streamlink.stream.hlsr   streamlink.utils.urlr   	getLoggerrW   r;   r3   VERBOSEr   
__plugin__rT   rT   rT   rU   <module>   s"    
o