U
    g1                     @   sh   d dl Z ddlmZ ddlmZmZmZmZmZm	Z	 G dd deZ
G dd	 d	e
ZG d
d de
ZdS )    N   )InfoExtractor   )ExtractorErrordetermine_extint_or_noneparse_iso8601traverse_objvariadicc                   @   s$   e Zd ZdZdZdd Zdd ZdS )OpencastBaseIEa  (?:
                            opencast\.informatik\.kit\.edu|
                            electures\.uni-muenster\.de|
                            oc-presentation\.ltcc\.tuwien\.ac\.at|
                            medien\.ph-noe\.ac\.at|
                            oc-video\.ruhr-uni-bochum\.de|
                            oc-video1\.ruhr-uni-bochum\.de|
                            opencast\.informatik\.uni-goettingen\.de|
                            heicast\.uni-heidelberg\.de|
                            opencast\.hawk\.de:8080|
                            opencast\.hs-osnabrueck\.de|
                            video[0-9]+\.virtuos\.uni-osnabrueck\.de|
                            opencast\.uni-koeln\.de|
                            media\.opencast\.hochschule-rhein-waal\.de|
                            matterhorn\.dce\.harvard\.edu|
                            hs-harz\.opencast\.uni-halle\.de|
                            videocampus\.urz\.uni-leipzig\.de|
                            media\.uct\.ac\.za|
                            vid\.igb\.illinois\.edu|
                            cursosabertos\.c3sl\.ufpr\.br|
                            mcmedia\.missioncollege\.org|
                            clases\.odon\.edu\.uy
                        )zF[\da-fA-F]{8}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{4}-[\da-fA-F]{12}c                 K   s   | j | j||f |f|S )N)Z_download_json	_API_BASE)selfhostvideo_idkwargs r   =/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/opencast.py	_call_api(   s    zOpencastBaseIE._call_apic           
      C   sH  | d}|d krtdg }tt|dp,g D ]}| d}|d krJq0t|d }| d}|dksn|dkr|| j||dd	d
 q0|dks|dkr|| j||ddd	d q0|dks|dkr|| j||dd	d q0|dkr|| j	||dd	d q0|dkr$|| j
||d	d q0||| dt|dtt|dtt|ddd| drjt|dnd tt|d!ddtt|d"| d#rt|d$nd d%
}|d&krtd'|}	|	sq0||	d(|	d)|	d)d* |	d+ d,d-d. || q0||| d/| d0| d1t|d2t| d3t|d4d	d5d6S )7NidzVideo id was not found)Zmediatrackurl	transportZDASHZmpdZdashF)Zmpd_idfatalZHLSZm3u8ZhlsZm3u8_native)Zm3u8_idZentry_protocolr   ZHDSZf4mZhds)Zf4m_idr   ZSMOOTHZsmooth)Zism_idr   Zsmil)r   )video
resolution)r   Z	framerate)r   bitratei  )Zscaler   )r   encodertypenone)audior   )r   Zsamplingrater   )r   r   r   )
r   extZformat_noter   ZfpsZvbrZvcodecZabrZasrZacodecZRTMPz<(?:rtmp://[^/]+/(?P<app>[^/]+))/(?P<ext>.+):(?P<playpath>.+)appr    :ZplaypathT)r!   r    Z	play_pathZ	rtmp_liveZ
preferencetitleZseriestitleseries)Zcreatorscreatorstart)attachments
attachment.r   )get_all)r   formatsr$   r%   	season_idr&   	timestamp	thumbnail)getr   r
   r	   r   extendZ_extract_mpd_formatsZ_extract_m3u8_formatsZ_extract_f4m_formatsZ_extract_ism_formatsZ_extract_smil_formatsr   researchupdategroupappendr   )
r   r   r   r+   r   hrefr    r   Z	track_objZm_objr   r   r   _parse_mediapackage+   st    



    



z"OpencastBaseIE._parse_mediapackageN)__name__
__module____qualname___INSTANCES_RE_UUID_REr   r7   r   r   r   r   r      s   r   c                   @   sP   e Zd Zdej dej dZdZddddd	d
dddddd	dgZdd Z	dS )
OpencastIE(?x)
        https?://(?P<host>z7)/paella/ui/watch\.html\?
        (?:[^#]+&)?id=(?P<id>)z$https://%s/search/episode.json?id=%szahttps://oc-video1.ruhr-uni-bochum.de/paella/ui/watch.html?id=ed063cd5-72c8-46b5-a60a-569243edcea8Z 554c8e99a90f7be7e874619fcf2a3bc9z$ed063cd5-72c8-46b5-a60a-569243edcea8Zmp4z11 - Kryptographie - 24.11.2015zre:^https?://.*\.jpg$i˼_Z20201124$cf68a4a1-36b1-4a53-a6ba-61af5705a0d0Kryptographie - WiSe 15/16zAlexander May)	r   r    r$   r.   r-   Zupload_dater,   r%   r&   )r   md5	info_dictc                 C   s4   |  |dd\}}| | ||d d d S )Nr   r   search-resultsresultmediapackage)_match_valid_urlr4   r7   r   )r   r   r   r   r   r   r   _real_extract   s    zOpencastIE._real_extractN
r8   r9   r:   r   r;   r<   Z
_VALID_URLr   Z_TESTSrH   r   r   r   r   r=   k   s*   r=   c                   @   sb   e Zd Zdej dej dZdZddddd	d
ddddd	d
dddddd
gZdd Z	dS )OpencastPlaylistIEr>   z)(?:
            /engage/ui/index\.html\?(?:[^#]+&)?epFrom=|
            /ltitools/index\.html\?(?:[^#]+&)?series=
        )(?P<id>r?   z%https://%s/search/episode.json?sid=%szehttps://oc-video1.ruhr-uni-bochum.de/engage/ui/index.html?epFrom=cf68a4a1-36b1-4a53-a6ba-61af5705a0d0r@   rA   )r   r$      )r   rC   Zplaylist_mincountzzhttps://oc-video1.ruhr-uni-bochum.de/ltitools/index.html?subtool=series&series=cf68a4a1-36b1-4a53-a6ba-61af5705a0d0&lng=dezjhttps://electures.uni-muenster.de/engage/ui/index.html?e=1&p=1&epFrom=39391d10-a711-4d23-b21d-afd2ed7d758cz$39391d10-a711-4d23-b21d-afd2ed7d758cz;021670 Theologische Themen bei Hans Blumenberg WiSe 2017/18   c                    sP     |dd\}} fddt ||d d D } ||t|dS )Nr   r   c                    s$   g | ]}| d r |d  qS )rF   )r/   r7   ).0Zepisoder   r   r   
<listcomp>   s   
z4OpencastPlaylistIE._real_extract.<locals>.<listcomp>rD   rE   )r   r%   )rG   r4   r
   r   Zplaylist_resultr	   )r   r   r   r   entriesr   rN   r   rH      s
    
z OpencastPlaylistIE._real_extractNrI   r   r   r   r   rJ      s4   		rJ   )r1   commonr   utilsr   r   r   r   r	   r
   r   r=   rJ   r   r   r   r   <module>   s
    
]