a
    h,                     @   sp   d dl Z d dlZd dlZd dlZddlmZ ddlmZmZm	Z	m
Z
mZmZ ddlmZmZ G dd deZdS )	    N   )InfoExtractor   )ExtractorErrorint_or_nonejoin_nonemptyparse_qsupdate_url_queryurlencode_postdata)traverse_objunpackc                   @   s  e Zd ZdZdZddddddd	d
dddddd
dddddddd	dddgdgg ddddddddd d!d!d"d#gd$gd%dd&d'd(d)d*dd+ddd!dd*d	d,id'd-d.d/d0d1ddd!dd/d	d,id'd2d3d4d5d6ddd!dd4d	d,igd7gZd8Zd9Zd:Zd;Z	d<d= Z
dDd>d?Zd@dA ZdBdC Zd;S )EPlaySuisseIEZ
playsuissezYhttps?://(?:www\.)?playsuisse\.ch/(?:watch|detail)/(?:[^#]*[?&]episodeId=)?(?P<id>[0-9]+)z(https://www.playsuisse.ch/watch/763211/0T)urlZonly_matchingz7https://www.playsuisse.ch/watch/763182?episodeId=763211Z e20d1ede6872a03b41905ca1060a1ef2Z763211mp4ZKnochenz$md5:3bdd80e2ce20227c47aab1df2a79a519i  ZWilderzSeason 1r   z(re:https://playsuisse-img.akamaized.net/)idexttitledescriptiondurationseriesseasonseason_numberepisodeepisode_number	thumbnail)r   md5	info_dictz(https://www.playsuisse.ch/detail/2573198Z 1f115bb0a5191477b1a5771643a4283dZ2573198ZAzorz$md5:d41d8cd98f00b204e9800998ecf8427eZFictionzAndreas Fontana)zFabrizio Rongioneu   Stéphanie CléauzGilles PrivatzAlexandre TrockizFrance; Argentinei  i]  )r   r   r   r   genrescreatorscastlocationrelease_yearr   r   z(https://www.playsuisse.ch/detail/1115687Z1115687zThey all came out to Montreuxz$md5:0fefd8c5b4468a0bb35e916887681520ZDocumentaryzOliver MurrayZSwitzerland)r   r   r   r   r   r   r    r!   r   z$md5:f2462744834b959a31adc6292380cda2il  zFolge 1Z1112663)r   r   r   r   r   r   r   r   r   r   r   z$md5:9dfd308699fe850d3bce12dc1bad9b27iw  zFolge 2r   Z1112661z$md5:14a93a3356b2492a8f786ab2227ef602i  zFolge 3   Z1112664)r   r   playlista  
        query AssetWatch($assetId: ID!) {
            assetV2(id: $assetId) {
                ...Asset
                episodes {
                    ...Asset
                }
            }
        }
        fragment Asset on AssetV2 {
            id
            name
            description
            descriptionLong
            year
            contentTypes
            directors
            mainCast
            productionCountries
            duration
            episodeNumber
            seasonNumber
            seriesName
            medias {
                type
                url
            }
            thumbnail16x9 {
                ...ImageDetails
            }
            thumbnail2x3 {
                ...ImageDetails
            }
            thumbnail16x9WithTitle {
                ...ImageDetails
            }
            thumbnail2x3WithTitle {
                ...ImageDetails
            }
        }
        fragment ImageDetails on AssetImage {
            id
            url
        }z$1e33f1bf-8bf3-45e4-bbd9-c9ad934b5fcazhttps://account.srgssr.chNc           	      C   s  t  jt  j t  j }tt|  	 
d}t| j| j dd d| jddd|ddd	d
jd d }zF| j| j dd ddditd|dd|d dd d d }W n ty   tdddY n0 z<| j| j dd dddit||d|d dd }W n  ty<   tdddY n0 t| j| j dd d t||d d d|d! |d" dd#d#d$d%jd d }| j| j d&d d'd(| jd||d)d*d+d, | _| jstd-d S ).N=z/authz-srv/authzzRequesting session IDzhttps://www.playsuisse.ch/authz#email profile openid offline_accesscodeZS256login)	client_idredirect_uriZscopeZresponse_typecode_challengeZcode_challenge_methodZ	view_type)query	requestIdr   z3/verification-srv/v2/authenticate/initiate/passwordzSubmitting usernamezcontent-typeapplication/jsonZINITIAL_AUTHENTICATIONZPASSWORDpassword)Z
usage_type
request_idZ	medium_idtype
identifier)headersdatar2   exchange_idzInvalid usernameT)expectedz7/verification-srv/v2/authenticate/authenticate/passwordzSubmitting password)r+   r3   r/   r-   zInvalid passwordz/login-srv/verification/loginz
Logging insub	status_id )r+   r3   ZverificationTyper5   r6   Z
rememberMeZlatZlon)r2   z/proxy/tokenzDownloading token    authorization_code)r'   r(   r%   code_verifierZ
grant_type)r2   r*   id_tokenzLogin failed)uuiduuid4hexbase64urlsafe_b64encodehashlibsha256encodedigestdecoderstripr   Z_request_webpage_LOGIN_BASE
_CLIENT_IDr   _download_jsonjsondumpsr   r
   	_ID_TOKEN)	selfusernamer-   r:   r)   r.   r3   Z
login_datar9    rO   P/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/playsuisse.py_perform_login   s    		
	

	zPlaySuisseIE._perform_loginc              	   C   s@   | j d|td| jd|id d|p*ddd}|d	 d
 S )Nz%https://www.playsuisse.ch/api/graphqlZ
AssetWatchZassetId)ZoperationNamer*   	variablesr,   de)zContent-Typelocale)r2   r1   r2   ZassetV2)rI   rJ   rK   _GRAPHQL_QUERYrC   )rM   media_idrT   responserO   rO   rP   _get_media_data   s    
	zPlaySuisseIE._get_media_datac                 C   sf   | j s| jdd | |}| |tt|d}| |}|drb|dt	| j|d d |S )Nr-   )method)rT   r   Zepisodesr#   )_typeentries)
rL   Zraise_login_requiredZ	_match_idrX   r   r   _extract_singlegetupdatemap)rM   r   rV   
media_datainforO   rO   rP   _real_extract   s    


zPlaySuisseIE._real_extractc                    s<  t  dd }g i  }}t  dg dD ]b}|dr&|ddkrDq&| jt|d d| ji d	 d
ddd\}}|| | j||d q&|||dt  d	thfdthfdthtfddthfddthfddthfddtht	t
tddhtfdthdd hthfdthfdthfdthfdth fddhfdthfdS ) Nc                 S   s
   |  dS )Nr   )
startswith)k_rO   rO   rP   <lambda>  r8   z.PlaySuisseIE._extract_single.<locals>.<lambda>Zmedias)defaultr   r/   ZHLSr;   r   r   F)Zm3u8_idfatal)target)
thumbnailsformats	subtitlesname)ZdescriptionLongr   ZcontentTypes.Z	directorsZmainCastZproductionCountriesz; )delimyearc                 S   s   | d d S )N   rO   xrO   rO   rP   rf     r8   r   Z
seriesNameZseasonNumberc                    s    d d ur| S d S )NepisodeNumberrO   rq   r`   rO   rP   rf   !  r8   rs   )r   r   r   r   r   r   r    r!   r   r   r   r   r   )r   r]   Z#_extract_m3u8_formats_and_subtitlesr	   rL   extendZ_merge_subtitlesstranyallr   r   filterr   )rM   r`   rj   rk   rl   ZmediafsubsrO   rt   rP   r\     s>    






zPlaySuisseIE._extract_single)N)__name__
__module____qualname__Z_NETRC_MACHINEZ
_VALID_URLZ_TESTSrU   rH   rG   rL   rQ   rX   rb   r\   rO   rO   rO   rP   r      s   c,B
r   )r?   rA   rJ   r<   commonr   utilsr   r   r   r   r	   r
   Zutils.traversalr   r   r   rO   rO   rO   rP   <module>   s    