o
    i1                     @   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]+)?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$20210624i`i
  z&Members of the Berliner Philharmonikeru   Simon Rössler)
idextcomposertitle	thumbnailupload_date	timestampdurationalbum_artists	composersskip_downloadm3u8)noteurl	info_dictparamsz+Concert with several works and an interviewz3https://www.digitalconcerthall.com/en/concert/5378553785zBerliner PhilharmonikerzKirill Petrenkoz5Kirill Petrenko conducts Mendelssohn and Shostakovich)r   r   r   r      )r   r   r    r!   playlist_countz.https://www.digitalconcerthall.com/en/film/388388z6The Berliner Philharmoniker and Frank Peter Zimmermannz$md5:cfe25a7044fa4be13743e5089b5b5eb2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-TypeOriginReferer
User-AgentNr   c                 C   s   | j d tt kS )N   )_access_token_expiryinttimeself r3   W/home/ubuntu/.local/lib/python3.10/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.   )r2   valuer3   r3   r4   _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_MACHINEr7   _refresh_tokenr1   r3   r3   r4   _cache_tokensc   s   z"DigitalConcertHallIE._cache_tokensFc                 C   sf  |r|  d | d  | jsd S | js'| d  |   td| j dd| jpE| j| j	d ddt
ddd	d	| jd
d| jd| jdd }z"| j| j	d ddt
d| j| j| jdi | jdd| id}W n+ ty } zt|jtr|jjdkr| d  d | _|   tddd d }~ww | |d  t|dthf }r| 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nonedeviceunknown
berlinphilz1.95.0)	affiliate
grant_typedevice_vendordevice_modelapp_idapp_distributorapp_versionclient_secret)dataheadersr;   zRefreshing tokenzUnable to refresh tokenr<   )rI   r<   	client_idrO   AuthorizationBearer   z!Your tokens have been invalidatedzNew refresh token granted)report_warningr9   r5   r@   rA   r   _REFRESH_HINTr7   _download_json
_OAUTH_URLr   
_CLIENT_ID_CLIENT_SECRET_OAUTH_HEADERS
isinstancecauser   statusr   strwrite_debug)r2   
invalidatebearer_tokenresponseer<   r3   r3   r4   _fetch_new_tokensi   sv   









z&DigitalConcertHallIE._fetch_new_tokensc                 C   s  |    |dkr|| _|   |dkr,t|ths#td| j dd| | |   |dv rJ| 	ddurH|dkr=d	nd}| 
d
| d d S |dkr\td| j d| j dd| jj| jdi d}| |d |d| _| jsyd S | jdd d S )Nrefreshtokenz0The access token passed to yt-dlp is not valid. TrB   )rg   rh   cachedirFaccesszYour zr token has been cached to disk. To use the cached token next time, pass  --username cache  along with any passwordr=   zGLogin with username and password is no longer supported for this site. , r:   )defaultr;   r<   rb   )report_loginr@   rf   r   r   r   _LOGIN_HINTr9   rA   	get_param	to_screenrW   r=   loadr?   getr5   )r2   usernamepassword
token_typecached_tokensr3   r3   r4   _perform_login   s>   
z#DigitalConcertHallIE._perform_loginc                 C   s,   | j s| jd| j d| j d d d S d S )NzAAll content on this site is only available for registered users. rk   )method)r7   raise_login_requiredro   rW   r1   r3   r3   r4   _real_initialize   s   
z%DigitalConcertHallIE._real_initializec                 k   s   |D ]}|d }dD ]H}| j | d z| j| |d d d |dd| j || jd	d
}W  n! tyS }	 z|rNt|	jtrN|	jj	dkrNW Y d }	~	q d }	~	ww g }
t
|dddddthfD ]N}t|}|dkr| j||dddd}|D ]}|dr|ddkr|t|d  qx|
| qb|dkr|
| j||ddd qb| d| d qb||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   )TFrm   _linksstreamshrefr(   rT   )r)   rS   Accept-Languager,   rQ   rU   channel.streamr   r   r   hlsF)m3u8_idfatalformat_notevcodecrD   mpddash)mpd_idr   z'Skipping unsupported format extension ""r   name_composerduration_total)date	publishedshort_description)r   r   r   formatsr   r   r'   chapters	cuepointsconcertc                 S   s.   g | ]}| d t|dd | ddqS )r0   c                 S   s   | d | d  S )Nr0   r   r3   xr3   r3   r4   <lambda>   s    z:DigitalConcertHallIE._entries.<locals>.<listcomp>.<lambda>text)
start_timeend_timer   )rs   r
   ).0chapterr3   r3   r4   
<listcomp>   s    
z1DigitalConcertHallIE._entries.<locals>.<listcomp>)rf   rX   _proto_relative_urlr7   _USER_AGENTr   r]   r^   r   r_   r   r   r   _extract_m3u8_formatsrs   updater	   extend_extract_mpd_formatsrV   )r2   itemslanguagetype_kwargsitemvideo_idshould_retrystream_infoerrorr   fmt_urlr   fmtsfmtr3   r3   r4   _entries   sl   
	
zDigitalConcertHallIE._entriesc              
   C   s   |  |dddd\}}}}|sd}|dkrdn|}| jd| d	| |d
|| jdd}|dkr5|gnt|d}|dkrG|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 )Nr   typer   partenworkr   z&https://api.digitalconcerthall.com/v2//r(   )r)   r   r,   r   film)	_embedded..r   r|   artist.nameimagec                 S   s   | j dddS )Nr   )widthheight)formatr   r3   r3   r4   r     s    z4DigitalConcertHallIE._real_extract.<locals>.<lambda>playlistr   )r   r   )_typer   r   entriesr   r   )_match_valid_urlgrouprX   r   r   r/   r`   r   r   anyrs   r   )r2   r   r   r   r   r   api_typevid_infovideosr   r   r3   r3   r4   _real_extract   s8   

z"DigitalConcertHallIE._real_extract)F)__name__
__module____qualname__IE_DESC
_VALID_URLr?   _TESTSro   rW   rY   rZ   r[   r   r\   r7   r.   r@   propertyr5   r9   rA   rf   rx   r{   r   r   r3   r3   r3   r4   r      s    
4

:$2r   )r0   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   utils.traversalr   r   r3   r3   r3   r4   <module>   s    $	