a
    h1                     @   sd   d dl Z ddlmZ ddlmZ ddlmZmZmZm	Z	m
Z
mZmZ ddlmZ G dd	 d	eZdS )
    N   )InfoExtractor   )	HTTPError)ExtractorErrordetermine_extjwt_decode_hs256parse_codecstry_geturl_or_noneurlencode_postdata)traverse_objc                   @   s&  e Zd ZdZdZdZdddddd	d
dddddgdgd
ddiddddddgdd
dddiddddddd d
d!d"g d#d$ddid%dd&dddgdd
dddid'dgZd(Zd)Zd*Z	d+Z
d,Zd-Zd.d/d0d1ed2Zd3Zd4Zd3Zed5d6 Zd7d8 Zd9d: ZdFd<d=Zd>d? Zd@dA ZdBdC ZdDdE Zd3S )GDigitalConcertHallIEzDigitalConcertHall extractorz}https?://(?:www\.)?digitalconcerthall\.com/(?P<language>[a-z]+)/(?P<type>film|concert|work)/(?P<id>[0-9]+)-?(?P<part>[0-9]+)?ZdigitalconcerthallzPlaylist with only one videoz3https://www.digitalconcerthall.com/en/concert/53201z53201-1mp4z
Kurt Weillz[Magic Night]zAre:^https?://images.digitalconcerthall.com/cms/thumbnails.*\.jpg$Z20210624i`i
  z&Members of the Berliner Philharmonikeru   Simon Rössler)
idextcomposertitle	thumbnailupload_date	timestampdurationalbum_artistsZ	composersZskip_downloadm3u8)noteurl	info_dictparamsz+Concert with several works and an interviewz3https://www.digitalconcerthall.com/en/concert/53785Z53785zBerliner PhilharmonikerzKirill Petrenkoz5Kirill Petrenko conducts Mendelssohn and Shostakovich)r   r   r   r      )r   r   r   r   Zplaylist_countz.https://www.digitalconcerthall.com/en/film/388Z388z6The Berliner Philharmoniker and Frank Peter Zimmermannz$md5:cfe25a7044fa4be13743e5089b5b5eb2Z20220714i b)zFrank Peter ZimmermannzBenedikt von BernstorffzJakob von Bernstorff)r   r   r   descriptionr   r   r   r   )r   r   r   z2https://www.digitalconcerthall.com/en/work/53785-1r   zUse  --username token --password ACCESS_TOKEN  where ACCESS_TOKEN is the "access_token_production" from your browser local storagezOor else use a "refresh_token" with  --username refresh --password REFRESH_TOKENz2https://api.digitalconcerthall.com/v2/oauth2/tokenz
dch.webappz
2ySLN+2FwbzuMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15application/jsonz/application/x-www-form-urlencoded;charset=UTF-8z"https://www.digitalconcerthall.comz#https://www.digitalconcerthall.com/)AcceptzContent-TypeZOriginZReferer
User-AgentNr   c                 C   s   | j d tt kS )N   )_access_token_expiryinttimeself r)   X/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/digitalconcerthall.py_access_token_is_expired[   s    z-DigitalConcertHallIE._access_token_is_expiredc                 C   s$   || _ t|thdthfpd| _d S )Nexpr   )_access_tokenr   r   r%   r$   )r(   valuer)   r)   r*   _set_access_token_   s    z&DigitalConcertHallIE._set_access_tokenc                C   s    | j | jd| j| jd d S )Ntokens)access_tokenrefresh_token)cachestore_NETRC_MACHINEr-   _refresh_tokenr'   r)   r)   r*   _cache_tokensc   s    z"DigitalConcertHallIE._cache_tokensFc                 C   sz  |r|  d | d  | js"d S | jsN| d  |   td| j dd| jp| j| j	d ddt
ddd	d	| jd
d| jd| jdd }zD| j| j	d ddt
d| j| j| jdi | jdd| id}W nh ty8 } zNt|jtr"|jjdkr"| d  d | _|   tddd W Y d }~n
d }~0 0 | |d  t|dthf }rn| d || _|   d S )Nz!Access token has been invalidatedzyAccess token has expired or been invalidated. Get a new "access_token_production" value from your browser and try again, TexpectedzObtaining initial tokenzUnable to obtain initial tokennoneZdeviceunknownZ
berlinphilz1.95.0)Z	affiliate
grant_typeZdevice_vendorZdevice_modelZapp_idZapp_distributorZapp_versionclient_secret)dataheadersr1   zRefreshing tokenzUnable to refresh tokenr2   )r<   r2   Z	client_idr=   AuthorizationBearer   z!Your tokens have been invalidatedzNew refresh token granted)report_warningr/   r+   r6   r7   r   _REFRESH_HINTr-   _download_json
_OAUTH_URLr   
_CLIENT_ID_CLIENT_SECRET_OAUTH_HEADERS
isinstancecauser   statusr   strZwrite_debug)r(   
invalidateZbearer_tokenresponseer2   r)   r)   r*   _fetch_new_tokensi   sr    









z&DigitalConcertHallIE._fetch_new_tokensc                 C   s  |    |dkr|| _|   |dkrXt|thsFtd| j dd| | |   |dv r| 	ddur|dkrzd	nd}| 
d
| d d S |dkrtd| j d| j dd| jj| jdi d}| |d |d| _| jsd S | jdd d S )Nrefreshtokenz0The access token passed to yt-dlp is not valid. Tr8   )rR   rS   ZcachedirFaccesszYour zr token has been cached to disk. To use the cached token next time, pass  --username cache  along with any passwordr3   zGLogin with username and password is no longer supported for this site. , r0   )defaultr1   r2   rN   )Zreport_loginr6   rQ   r   r   r   _LOGIN_HINTr/   r7   	get_paramZ	to_screenrD   r3   loadr5   getr+   )r(   usernamepassword
token_typeZcached_tokensr)   r)   r*   _perform_login   s>    
z#DigitalConcertHallIE._perform_loginc                 C   s(   | j s$| jd| j d| j d d d S )NzAAll content on this site is only available for registered users. rU   )method)r-   Zraise_login_requiredrX   rD   r'   r)   r)   r*   _real_initialize   s    z%DigitalConcertHallIE._real_initializec                 k   s  |D ]}|d }dD ]}| j | d z@| j| |d d d |dd| j || jd	d
}W  qW q ty }	 z6|rt|	jtr|	jj	dkrW Y d }	~	q W Y d }	~	qd }	~	0 0 qg }
t
|dddddthfD ]}t|}|dkrF| j||dddd}|D ]4}|dr|ddkr|t|d  q|
| q|dkrj|
| j||ddd q| d| d q||d|d|
|dt
|d |d!p|d!d"|d#|d$r|d%krd&d' |d$ D nd iV  qd S )(Nr   )TFrW   _linksZstreamshrefr    rA   )r!   r@   Accept-Languager"   r?   rB   Zchannel.streamr   r   r   ZhlsF)Zm3u8_idfatalZformat_noteZvcodecr:   ZmpdZdash)Zmpd_idrg   z'Skipping unsupported format extension ""r   Zname_composerZduration_total)dateZ	publishedZshort_description)r   r   r   formatsr   r   r   ZchaptersZ	cuepointsconcertc                 S   s.   g | ]&}| d t|dd | ddqS )r&   c                 S   s   | d | d  S )Nr&   r   r)   xr)   r)   r*   <lambda>       z:DigitalConcertHallIE._entries.<locals>.<listcomp>.<lambda>text)
start_timeZend_timer   )r[   r
   ).0Zchapterr)   r)   r*   
<listcomp>   s
   z1DigitalConcertHallIE._entries.<locals>.<listcomp>)rQ   rE   _proto_relative_urlr-   _USER_AGENTr   rJ   rK   r   rL   r   r   r   Z_extract_m3u8_formatsr[   updater	   extendZ_extract_mpd_formatsrC   )r(   itemslanguagetype_kwargsitemvideo_idZshould_retryZstream_infoerrorrj   Zfmt_urlr   Zfmtsfmtr)   r)   r*   _entries   sb    




	
zDigitalConcertHallIE._entriesc              
   C   s   |  |dddd\}}}}|s&d}|dkr2dn|}| jd| d	| |d
|| jdd}|dkrj|gnt|d}|dkr|t|d  g}t|ddddthf}	t|dd| jhthdd ht	f}
d||
d| j||||
|	d|
|	dS )Nry   typer   partenZworkrk   z&https://api.digitalconcerthall.com/v2//r    )r!   rd   r"   re   Zfilm)Z	_embedded..r   rb   Zartist.nameimagec                 S   s   | j dddS )Nr   )widthheight)formatrl   r)   r)   r*   rn     ro   z4DigitalConcertHallIE._real_extract.<locals>.<lambda>Zplaylistr   )r   r   )_typer   r   entriesr   r   )Z_match_valid_urlgrouprE   ru   r   r%   rM   rt   r   anyr[   r   )r(   r   ry   rz   r}   r   Zapi_typeZvid_infoZvideosr   r   r)   r)   r*   _real_extract   s8    

z"DigitalConcertHallIE._real_extract)F)__name__
__module____qualname__ZIE_DESCZ
_VALID_URLr5   Z_TESTSrX   rD   rF   rG   rH   ru   rI   r-   r$   r6   propertyr+   r/   r7   rQ   r_   ra   r   r   r)   r)   r)   r*   r      s   
4

:$2r   )r&   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r   Zutils.traversalr   r   r)   r)   r)   r*   <module>   s
   $	