U
    g^                     @   sp   d dl Z 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mZmZ G dd deZdS )    N   )InfoExtractor   )ExtractorError
clean_htmlformat_fieldint_or_noneremove_startsmuggle_urltraverse_objunsmuggle_urlc                   @   s  e Zd ZdZdZdZddddZdd	d
ddddddeddddddddddddddddddddddedd digid!d"d#did$d%ddd&ddd'ddd(d)dd*d+d,d-ed.d/d0	d1d2d3d4d5d6d7dd8d9d:ed;d<d=d>	id6d?dd@dAdBedCd<d=d>	id6dDddEdFdGedHd<d=d>	id6dIddJdKdLedMd<d=d>	igdNgZe	dOdP Z
dbdRdSZdcdUdVZdddWdXZdedYdZZd[d\ Zd]Zd^d_ Zd`da ZdQS )f	KalturaIEa  (?x)
                (?:
                    kaltura:(?P<partner_id>\w+):(?P<id>\w+)(?::(?P<player_type>\w+))?|
                    https?://
                        (?:(?:www|cdnapi(?:sec)?)\.)?kaltura\.com(?::\d+)?/
                        (?:
                            (?:
                                # flash player
                                index\.php/(?:kwidget|extwidget/preview)|
                                # html5 player
                                html5/html5lib/[^/]+/mwEmbedFrame\.php
                            )
                        )(?:/(?P<path>[^?]+))?(?:\?(?P<query>.*))?
                )
                zhttp://cdnapi.kaltura.comz/api_v3/service/multirequestZsrtttmlZvtt)r   r      zkaltura:269692:1_1jc2y3e4Z 3adcbdb3dcc02d647539e53f284ba171Z
1_1jc2y3e4mp4zStraight from the HeartZ20131219zmlundberg@wolfgangsvault.comz$The Allman Brothers Band, 12/16/1981zre:^https?://.*/thumbnail/.*)idexttitleupload_dateuploader_iddescription	thumbnail	timestampzNThe access to this service is forbidden since the specified partner is blocked)urlmd5	info_dictskipznhttp://www.kaltura.com/index.php/kwidget/cache_st/1300318621/wid/_269692/uiconf_id/3873291/entry_id/1_1jc2y3e4T)r   Zonly_matchingzbhttps://cdnapisec.kaltura.com/index.php/kwidget/wid/_557781/uiconf_id/22845202/entry_id/1_plr1syf3zhttps://cdnapisec.kaltura.com/html5/html5lib/v2.30.2/mwEmbedFrame.php/p/1337/uiconf_id/20540612/entry_id/1_sf5ovm7u?wid=_243342zkaltura:111032:1_cw786r8qzkaltura:1926081:0_l5ye1133Z
0_l5ye1133zWhat Can You Do With Python?Z20160221Zstorkenr   )r   r   r   r   r   r   r   	subtitleszaGone. Maybe https://www.safaribooksonline.com/library/tutorials/introduction-to-python-anon/3469/Zskip_download)r   r   r   paramszhttps://www.kaltura.com/index.php/extwidget/preview/partner_id/1770401/uiconf_id/37307382/entry_id/0_58u8kme7/embed/iframe?&flashvars[streamerType]=autozhttps://www.kaltura.com:443/index.php/extwidget/preview/partner_id/1770401/uiconf_id/37307382/entry_id/0_58u8kme7/embed/iframe?&flashvars[streamerType]=autozkaltura:513551:1_66x4rg7oaH  https://cdnapisec.kaltura.com/html5/html5lib/v2.46/mwEmbedFrame.php/p/691292/uiconf_id/20499062/entry_id/0_c076mna6?wid=_691292&iframeembed=true&playerId=kaltura_player_1420508608&entry_id=0_c076mna6&flashvars%5BakamaiHD.loadingPolicy%5D=preInitialize&flashvars%5BakamaiHD.asyncInit%5D=true&flashvars%5BstreamerType%5D=hdnetworkZ
0_c076mna6z$md5:4883e7acbcbf42583a2dddc97dee4855i  zcommons@swinburne.edu.auiZSZ20140815zZhttp://cfvod.kaltura.com/p/691292/sp/69129200/thumbnail/entry_id/0_c076mna6/version/100022)	r   r   r   durationr   r   
view_countr   r   )r   r   a  https://cdnapisec.kaltura.com/html5/html5lib/v2.89/mwEmbedFrame.php/p/2019031/uiconf_id/40436601?wid=1_4j3m32cv&iframeembed=true&playerId=kaltura_player_&flashvars[playlistAPI.kpl0Id]=1_jovey5nu&flashvars[ks]=&&flashvars[imageDefaultDuration]=30&flashvars[localizationCode]=en&flashvars[leadWithHTML5]=true&flashvars[forceMobileHTML5]=true&flashvars[nextPrevBtn.plugin]=true&flashvars[hotspots.plugin]=true&flashvars[sideBarContainer.plugin]=true&flashvars[sideBarContainer.position]=left&flashvars[sideBarContainer.clickToClose]=true&flashvars[chapters.plugin]=true&flashvars[chapters.layout]=vertical&flashvars[chapters.thumbnailRotator]=false&flashvars[streamSelector.plugin]=true&flashvars[EmbedPlayer.SpinnerTarget]=videoHolder&flashvars[dualScreen.plugin]=true&flashvars[playlistAPI.playlistUrl]=https://canvasgatechtest.kaf.kaltura.com/playlist/details/{playlistAPI.kpl0Id}/categoryid/126428551Z
1_jovey5nuz00-00 Introduction)r   r   r   Z
1_b1y5hlvxz%CS7646_00-00 Introductio_Introduction[   z\http://cfvod.kaltura.com/p/2019031/sp/201903100/thumbnail/entry_id/1_b1y5hlvx/version/100001ib[Z20180801Zdjoyner3)	r   r   r   r    r   r!   r   r   r   Z
1_jfb7mdpnz2CS7646_00-00 Introductio_Three parts to the course?   z\http://cfvod.kaltura.com/p/2019031/sp/201903100/thumbnail/entry_id/1_jfb7mdpn/version/100001ib[Z
1_8xflxdp7z"CS7646_00-00 Introductio_Textbooks%   z\http://cfvod.kaltura.com/p/2019031/sp/201903100/thumbnail/entry_id/1_8xflxdp7/version/100001ib[Z
1_3hqew8knz&CS7646_00-00 Introductio_Prerequisites1   z\http://cfvod.kaltura.com/p/2019031/sp/201903100/thumbnail/entry_id/1_3hqew8kn/version/100001ib[)r   r   Zplaylistc                 C   s   t td|p.t td|p.t td|}g }|D ]}| }| D ]\}}|rL| ||< qLdjf |}	t|d }
td|
 d|
 d|}|rt	|	d	|
d
i}	||	 q8|S )Naz  (?xs)
                    kWidget\.(?:thumb)?[Ee]mbed\(
                    \{.*?
                        (?P<q1>['"])wid(?P=q1)\s*:\s*
                        (?P<q2>['"])_?(?P<partner_id>(?:(?!(?P=q2)).)+)(?P=q2),.*?
                        (?P<q3>['"])entry_?[Ii]d(?P=q3)\s*:\s*
                        (?P<q4>['"])(?P<id>(?:(?!(?P=q4)).)+)(?P=q4)(?:,|\s*\})
                aK  (?xs)
                    (?P<q1>["'])
                        (?:https?:)?//cdnapi(?:sec)?\.kaltura\.com(?::\d+)?/(?:(?!(?P=q1)).)*\b(?:p|partner_id)/(?P<partner_id>\d+)(?:(?!(?P=q1)).)*
                    (?P=q1).*?
                    (?:
                        (?:
                            entry_?[Ii]d|
                            (?P<q2>["'])entry_?[Ii]d(?P=q2)
                        )\s*:\s*|
                        \[\s*(?P<q2_1>["'])entry_?[Ii]d(?P=q2_1)\s*\]\s*=\s*
                    )
                    (?P<q3>["'])(?P<id>(?:(?!(?P=q3)).)+)(?P=q3)
                a  (?xs)
                    <(?:iframe[^>]+src|meta[^>]+\bcontent)=(?P<q1>["'])\s*
                      (?:https?:)?//(?:(?:www|cdnapi(?:sec)?)\.)?kaltura\.com/(?:(?!(?P=q1)).)*\b(?:p|partner_id)/(?P<partner_id>\d+)
                      (?:(?!(?P=q1)).)*
                      [?&;]entry_id=(?P<id>(?:(?!(?P=q1))[^&])+)
                      (?:(?!(?P=q1)).)*
                    (?P=q1)
                zkaltura:{partner_id}:{id}
partner_idz<<script[^>]+src=(["\'])(?P<id>(?:https?:)?//(?:(?!\1).)+)/p/z/sp/z00/embedIframeJsservice_urlr   )listrefinditer	groupdictitemsstripformatescapesearchr
   groupappend)clsr   webpager*   urlsmobjZ
embed_infokvZ	embed_urlZescaped_pidZservice_mobj r9   </tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/kaltura.py_extract_embed_urls   s<    	"zKalturaIE._extract_embed_urlsNc           	      K   s   |d }| tt|dd  dd | j|p2| j| j |ft| dddd|}t|D ]:\}}t	|tsxqd|
dd	krdtd
| j|d |qdt|d|d< |S )Nr   r   )startzapplication/jsonzgzip, deflate, br)zContent-TypezAccept-Encoding)dataheadersZ
objectTypeZKalturaAPIExceptionz{} said: {} ({})message)r   objectsr   )updatedict	enumerateZ_download_json_SERVICE_URL_SERVICE_BASEjsondumpsencode
isinstancegetr   r.   ZIE_NAMEr   )	selfvideo_idactionsr'   kwargsr   r=   idxstatusr9   r9   r:   _kaltura_api_call   s,    
zKalturaIE._kaltura_api_callhtml5c                 C   s0   |dkst |dkr"| |||S | |||S )N)rR   kwidgetrS   )AssertionError_get_video_info_kwidget_get_video_info_html5)rK   rL   r&   r'   player_typer9   r9   r:   _get_video_info  s    zKalturaIE._get_video_infoc              	   C   sf   dddd|dddd|  |d	d
d|iddddddd|dddd
|dddg}| j|||ddS )Nz3.3.0zhtml5:v3.1.0r    )
apiVersion	clientTagr.   ksZ	partnerIdQ sessionstartWidgetSessionexpiryserviceactionwidgetIdr(   redirectFromEntryId	baseentry{1:result:ks}9createdAt,dataUrl,duration,name,plays,thumbnailUrl,userIdtypefieldsrc   filterrb   r\   ZresponseProfilegetbyentryidflavorAssetrc   ZentryIdrb   r\   caption_captionassetrc   zfilter:entryIdEqualrb   r\   z2Downloading video info JSON (Kaltura html5 player)Znote_build_widget_idrQ   )rK   rL   r&   r'   rM   r9   r9   r:   rV     sH    (   zKalturaIE._get_video_info_html5c                 C   s   ddddddddddd	|  |d
ddd|  |dddddd	dd|iddddddd|dddd|dddg}| j|||dd\}}}}}	|d d }
||
||	fS )NZmultirequestz3.1r]   zkwidget:v2.89r   null)rb   rZ   ra   r[   r.   
ignoreNullrc   r^   r_   r`   Zstartwidgetsession	   rg   )	ra   rb   rc   rd   r.   rZ   r[   rw   r\   r(   re   rf   rh   ri   rl   rn   ro   rp   rq   rr   z4Downloading video info JSON (Kaltura kwidget player)rs   r@   r   rt   )rK   rL   r&   r'   rM   header__infoflavor_assetscaptionsinfor9   r9   r:   rU   ;  sd    8   z!KalturaIE._get_video_info_kwidgetc                 C   s   d|kr|S d| S )Nrz   r9   )rK   r&   r9   r9   r:   ru   y  s    zKalturaIE._build_widget_idz$window\.kalturaIframePackageData\s*=c              
      s  t |i \}}| |}|ddd\ }d\}}sHd|krDdnd rt|rt| j| |dd	\}}}	}n*|d
d\}
}|
s|stdddi }|rtj|}|
r|
	d}|
tt|d d d dd |dd d D  d|kr
t|d d d n<d|kr"|d d  n$d|kr:|d d  ntdddd|krx|d d }| j| d	\}}}	}nd|krd|kr|d d }| ||}| | j|d|d }|d |d d  }}	|d }tt | j| d	\}}}	}W 5 Q R X nd|krd |kr|d  d }| ||}| | j|d|d! }| jt||d"d#df|t||d$ft fd%d&d'S tddd|d(d gd }| |||||	|S ))Nr&   r   rW   )NNzhtml5lib/v2rS   rR   r'   )rW   pathqueryzInvalid URLT)expected/r   c                 S   s   g | ]
}|gqS r9   r9   ).0r8   r9   r9   r:   
<listcomp>  s     z+KalturaIE._real_extract.<locals>.<listcomp>r   Zwidr   rz   pentry_idZ	uiconf_idzflashvars[referenceId]ZkalturaIframePackageDataZentryResultmetaZcontextDataZflavorAssetszflashvars[playlistAPI.kpl0Id]ZplaylistResultr,   .namec                    s   d  d|  d S )Nzkaltura::r9   )xr&   rW   r9   r:   <lambda>      z)KalturaIE._real_extract.<locals>.<lambda>)Ziegetterzflashvars[ks])r   Z_match_valid_urlr1   rX   rJ   r   urllibparseparse_qssplitrA   rB   zipr	   Z_download_webpageZ_search_jsonIFRAME_PACKAGE_DATA_REGEX
contextlibsuppressZplaylist_from_matchesr   r   _per_video_extract)rK   r   smuggled_datar6   r   r\   r}   rz   r~   r|   r   r   r   Zsplitted_pathZreference_idr4   Z
entry_dataZplaylist_idZplaylist_datar9   r   r:   _real_extract~  s    
$
2



        zKalturaIE._real_extractc                    s  | d}|r:tdtj|d d  dnd  fdd}|d }	d|	krjt	
d	d
|	}	g }
i }|D ]2}| ddkrqv| ddkrqv| ds| ddkrqv| ds| ddkrd|d< nd|d< |d|	|d }djf |}| ddkr"| |||s"qvd|kr@| ddkr@dn| d}|
|| dt|d t| dt| ddd | d|t| d!t| d"|d#
 qvd$|	kr||	d%d&}| j||dd'd(d)d*\}}|
| | j||d+ |r| d,g D ]}| ddkr"q
| ds2q
t| d-}|| d.pX| d/g d0| j|d | dp| j |pd1d2 q
||d3 |
|t| d4| d5| d6| d7t|d8d9d:t| d;d<
S )=N
source_urlz://r   zutf-8c                    s(    r| d  7 } r$| d 7 } | S )Nz/ks/z
?referrer=r9   )Zunsigned_urlr\   Zreferrerr9   r:   sign_url  s
    z.KalturaIE._per_video_extract.<locals>.sign_urlZdataUrlz/flvclipper/z/flvclipper/.*z/serveFlavorrP   ZfileExtZchunZallow_unplayable_formatsZwvmZcontainerFormatZqtZmovr   z{}/flavorId/{}r   z{fileExt}-{bitrate}Z
isOriginalTZvideoCodecIdZ	frameRater   noneZbitratesizei   )Zinvscaleheightwidth)
	format_idr   ZtbrZfpsZfilesize_approx	containervcodecr   r   r   z/playManifest/z
format/urlzformat/applehttpZm3u8_nativeZhlsF)Zm3u8_idfatal)targetr@   r.   ZlanguageCodelanguagezE{}/api_v3/service/caption_captionasset/action/serve/captionAssetId/{}r   )r   r   r   r   ZthumbnailUrlr    Z	createdAtZuserId)NoneN)ignoreZplays)
r   r   formatsr   r   r   r    r   r   r!   )rJ   base64	b64encodejoinr   r   urlparserH   decoder)   sub	get_paramr.   Z_is_valid_urlr2   r   replaceZ#_extract_m3u8_formats_and_subtitlesextendZ_merge_subtitles
setdefaultrD   _CAPTION_TYPESr   r   )rK   r   r   r~   r\   r|   r}   r   r   Zdata_urlr   r   fZ	video_urlr   r   Zm3u8_urlZfmtssubscaptionZcaption_formatr9   r   r:   r     s    



  



     

zKalturaIE._per_video_extract)N)NrR   )N)N)__name__
__module____qualname__Z
_VALID_URLrD   rE   r   intZ_TESTSclassmethodr;   rQ   rX   rV   rU   ru   r   r   r   r9   r9   r9   r:   r      s  
   
4


,
>?r   )r   r   rF   r)   urllib.parser   commonr   utilsr   r   r   r   r	   r
   r   r   r   r9   r9   r9   r:   <module>   s   (