o
    i,                     @   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PlaySuisseIE
playsuissezYhttps?://(?:www\.)?playsuisse\.ch/(?:watch|detail)/(?:[^#]*[?&]episodeId=)?(?P<id>[0-9]+)z(https://www.playsuisse.ch/watch/763211/0T)urlonly_matchingz7https://www.playsuisse.ch/watch/763182?episodeId=763211 e20d1ede6872a03b41905ca1060a1ef2763211mp4Knochenz$md5:3bdd80e2ce20227c47aab1df2a79a519i  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/2573198 1f115bb0a5191477b1a5771643a4283d2573198Azorz$md5:d41d8cd98f00b204e9800998ecf8427e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/11156871115687zThey all came out to Montreuxz$md5:0fefd8c5b4468a0bb35e916887681520DocumentaryzOliver MurraySwitzerland)r   r   r   r   r'   r(   r*   r+   r"   z$md5:f2462744834b959a31adc6292380cda2il  zFolge 11112663)r   r   r   r   r   r   r   r   r    r   r   z$md5:9dfd308699fe850d3bce12dc1bad9b27iw  zFolge 2r   1112661z$md5:14a93a3356b2492a8f786ab2227ef602i  zFolge 3   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 }z#| j| j dd ddditd|dd|d dd d d }W n tym   tdddw z| j| j dd dddit||d|d dd }W n ty   tdddw 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codeS256login)	client_idredirect_uriscoperesponse_typecode_challengecode_challenge_method	view_type)query	requestIdr   z3/verification-srv/v2/authenticate/initiate/passwordzSubmitting usernamezcontent-typeapplication/jsonINITIAL_AUTHENTICATIONPASSWORDpassword)
usage_type
request_id	medium_idtype
identifier)headersdatarK   exchange_idzInvalid usernameT)expectedz7/verification-srv/v2/authenticate/authenticate/passwordzSubmitting password)r@   rL   rH   rD   zInvalid passwordz/login-srv/verification/loginz
Logging insub	status_id )r@   rL   verificationTyperN   rO   
rememberMelatlon)rK   z/proxy/tokenzDownloading token    authorization_code)r8   r9   r5   code_verifier
grant_type)rK   r?   id_tokenzLogin failed)uuiduuid4hexbase64urlsafe_b64encodehashlibsha256encodedigestdecoderstripr   _request_webpage_LOGIN_BASE
_CLIENT_IDr   _download_jsonjsondumpsr   r
   	_ID_TOKEN)	selfusernamerD   rW   r<   rF   rL   
login_datarV    ro   O/home/ubuntu/.local/lib/python3.10/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/graphql
AssetWatchassetId)operationNamer?   	variablesrA   de)zContent-Typelocale)rK   rJ   rK   assetV2)rh   ri   rj   _GRAPHQL_QUERYra   )rl   media_idrw   responsero   ro   rp   _get_media_data   s   	zPlaySuisseIE._get_media_datac                 C   sf   | j s	| jdd | |}| |tt|d}| |}|dr1|dt	| j|d d |S )NrD   )method)rw   r   episodesr3   )_typeentries)
rk   raise_login_required	_match_idr|   r   r   _extract_singlegetupdatemap)rl   r   rz   
media_datainforo   ro   rp   _real_extract   s   


zPlaySuisseIE._real_extractc                    s<  t  dd }g i }}t  dg dD ]1}|dr!|ddkr"q| 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>  s   
 z.PlaySuisseIE._extract_single.<locals>.<lambda>medias)defaultr   rH   HLSrY   r   r   F)m3u8_idfatal)target)
thumbnailsformats	subtitlesname)descriptionLongr   contentTypes.	directorsmainCastproductionCountriesz; )delimyearc                 S   s   | d d S )N   ro   xro   ro   rp   r     s    r   
seriesNameseasonNumberc                    s    d d ur| S d S )NepisodeNumberro   r   r   ro   rp   r   !  s    r   )r   r   r   r'   r(   r)   r*   r+   r   r   r   r   r   )r   r   #_extract_m3u8_formats_and_subtitlesr	   rk   extend_merge_subtitlesstranyallr   r   filterr   )rl   r   r   r   r   mediafsubsro   r   rp   r     s>   






zPlaySuisseIE._extract_single)N)__name__
__module____qualname___NETRC_MACHINE
_VALID_URL_TESTSry   rg   rf   rk   rq   r|   r   r   ro   ro   ro   rp   r      s    c,
Br   )r]   r_   ri   rZ   commonr   utilsr   r   r   r   r	   r
   utils.traversalr   r   r   ro   ro   ro   rp   <module>   s     