U
    gy                      @   sT   d dl mZ ddlmZ ddlmZmZmZmZm	Z	 ddl
mZ G dd deZdS )	   )InfoExtractor   )	HTTPError)ExtractorErrorparse_codecstry_geturl_or_noneurlencode_postdata)traverse_objc                   @   s   e Zd ZdZd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%d&d'd(gd)ddid*dd+dddgdddddid,dgZ	d-d. Z
d/d0 Zd1d2 Zd3d4 ZdS )5DigitalConcertHallIEzDigitalConcertHall extractorz}https?://(?:www\.)?digitalconcerthall\.com/(?P<language>[a-z]+)/(?P<type>film|concert|work)/(?P<id>[0-9]+)-?(?P<part>[0-9]+)?z2https://api.digitalconcerthall.com/v2/oauth2/tokenzuMozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15NZ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_downloadZ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 bz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   c                 C   s   | j | jd ddtddd| dr$dnddd	d
dddd| jddd }z<| j | jd ddtd||ddddd| | jdd}W nH tk
r } z*t|jtr|jj	dkrtddd W 5 d }~X Y nX |d | _
d S )NzObtaining tokenzUnable to obtain tokennoneZdeviceunknownZprefer_combined_hlsZSafariz
dch.webappZ
berlinphilz1.84.0z
2ySLN+2Fwb)Z	affiliate
grant_typeZdevice_vendorZdevice_modelZapp_idZapp_distributorZapp_versionZclient_secretapplication/jsonz/application/x-www-form-urlencoded;charset=UTF-8)AcceptContent-Type
User-Agent)errnotedataheadersZaccess_tokenz
Logging inzUnable to loginpassword)r   usernamer&   z"https://www.digitalconcerthall.comBearer )r    r!   ZRefererAuthorizationr"   )r   r#   r$   r%   i  zInvalid username or passwordT)expected)_download_json
_OAUTH_URLr	   Z_configuration_arg_USER_AGENTr   
isinstancecauser   status_ACCESS_TOKEN)selfr'   r&   Zlogin_tokenZlogin_responseerror r4   G/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/digitalconcerthall.py_perform_loginI   sZ          
z#DigitalConcertHallIE._perform_loginc                 C   s   | j s| jdd d S )Nr&   )method)r1   Zraise_login_required)r2   r4   r4   r5   _real_initializeo   s    z%DigitalConcertHallIE._real_initializec                 k   s.  |D ]"}|d }| j | |d d d |dd| j || jdd}g }t|d	d
dd
dthfD ]}	|| j|	|dddd qd|D ].}
|
dr|
ddkr|
	t
|
d  q||d|d||dt|d|dp|dd|d|dr|dkrdd |d D nd iV  qd S )Nr   _linksZstreamshrefr   r(   )r    r)   Accept-Languager"   r%   Zchannel.streamr   r   ZhlsF)Zm3u8_idfatalZformat_noteZvcodecr   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 )timec                 S   s   | d | d  S )NrB   r   r4   xr4   r4   r5   <lambda>       z:DigitalConcertHallIE._entries.<locals>.<listcomp>.<lambda>text)
start_timeZend_timer   )getr   ).0Zchapterr4   r4   r5   
<listcomp>   s
   z1DigitalConcertHallIE._entries.<locals>.<listcomp>)r+   _proto_relative_urlr1   r-   r
   r   extendZ_extract_m3u8_formatsrI   updater   )r2   itemslanguagetype_kwargsitemvideo_idZstream_infor@   Zm3u8_urlfmtr4   r4   r5   _entriess   sF    
 

zDigitalConcertHallIE._entriesc              
   C   s   |  |dddd\}}}}|s&d}|dkr2dn|}| jd| d	| |d
|| jd| j dd}|dkrt|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 )NrP   typer   partenZworkrA   z&https://api.digitalconcerthall.com/v2//r   r(   )r    r;   r"   r)   r<   Zfilm)Z	_embedded..r   r9   Zartist.nameimagec                 S   s   | j dddS )N    )widthheight)formatrC   r4   r4   r5   rE      rF   z4DigitalConcertHallIE._real_extract.<locals>.<lambda>Zplaylistr   )r   r   )_typer   r   entriesr   r   )Z_match_valid_urlgroupr+   r-   r1   r
   intstrrL   r   anyrI   rV   )r2   r   rP   rQ   rT   rX   Zapi_typeZvid_infoZvideosr   r   r4   r4   r5   _real_extract   sL     
        z"DigitalConcertHallIE._real_extract)__name__
__module____qualname__ZIE_DESCZ
_VALID_URLr,   r-   r1   Z_NETRC_MACHINEZ_TESTSr6   r8   rV   rg   r4   r4   r4   r5   r      st   
5&"r   N)commonr   Znetworking.exceptionsr   utilsr   r   r   r   r	   Zutils.traversalr
   r   r4   r4   r4   r5   <module>   s   