o
    ib                     @   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?d@d/edAd;d<d=	id6dBddCdDd/edEd;d<d=	id6dFddGdHd/edId;d<d=	igdJgZdKdLddMdNdOdPdQdRedS	d1dTdUddVdWd/dXdYdZedS	d1d[d\dd]d^d/d_d`daedS	d1dbdcdddded/dfdgdhedS	d1gZ	e
didj Zd|dldmZd}dodpZd|dqdrZd|dsdtZdudv ZdwZdxdy Zdzd{ ZdkS )~	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/multirequestsrtttmlvtt)r   r      zkaltura:269692:1_1jc2y3e4 3adcbdb3dcc02d647539e53f284ba171
1_1jc2y3e4mp4zStraight from the Heart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   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_l5ye1133
0_l5ye1133zWhat Can You Do With Python?20160221storkenr   )r   r   r   r   r   r   r   	subtitleszaGone. Maybe https://www.safaribooksonline.com/library/tutorials/introduction-to-python-anon/3469/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=hdnetwork
0_c076mna6z$md5:4883e7acbcbf42583a2dddc97dee4855i  zcommons@swinburne.edu.auiZS20140815z"re:https?://cfvod\.kaltura\.com/.+)	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/126428551
1_jovey5nuz00-00 Introduction)r   r   r    
1_b1y5hlvxz%CS7646_00-00 Introductio_Introduction[   ib[20180801djoyner3)	r   r   r   r,   r   r-   r   r   r   
1_jfb7mdpnz2CS7646_00-00 Introductio_Three parts to the course?   ib[
1_8xflxdp7z"CS7646_00-00 Introductio_Textbooks%   ib[
1_3hqew8knz&CS7646_00-00 Introductio_Prerequisites1   ib[)r   r    playlistzShttps://www.cornell.edu/VIDEO/nima-arkani-hamed-standard-models-of-particle-physics
1_sgtvehimz7Our "Standard Models" of particle physics and cosmologyi,  z're:https?://cdnsecakmi\.kaltura\.com/.+iQIN20111113kps1)	r   r   r   r,   r   r   r   r   r-   z<https://www.oreilly.com/ideas/my-cloud-makes-pretty-pictures
0_utuok90b06_matthew_brender_raj_duttiK  i!kW20160622 z@https://fod.infobase.com/p_ViewPlaylist.aspx?AssignmentID=NUN8ZY
0_izeg5utt35871iK  i|P20121217zcplapp@learn360.comzHhttps://www.cns.nyu.edu/~eero/math-tools17/Videos/lecture-05sep2017.html
1_9gzouybzzlecture-05sep2017i3  iiY20170913eps2c                 C   s   t td|pt td|pt td|}g }|D ]D}| }| D ]\}}|r2| ||< q&djdi |}	t|d }
td|
 d|
 d|}|r[t	|	d	|
d
i}	||	 q|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   webpagerL   urlsmobj
embed_infokv	embed_urlescaped_pidservice_mobjrI   rI   L/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/kaltura.py_extract_embed_urls   s>   	"zKalturaIE._extract_embed_urlsNc           	      K   s   |d }| tt|dd  dd | j|p| j| j |ft| dddd|}t|D ]\}}t	|ts<q2|
dd	krOtd
| j|d |q2t|d|d< |S )Nr   r   )startzapplication/jsonzgzip, deflate, br)zContent-TypezAccept-Encoding)dataheaders
objectTypeKalturaAPIExceptionz{} said: {} ({})message)r   objectsr   )updatedict	enumerate_download_json_SERVICE_URL_SERVICE_BASEjsondumpsencode
isinstancegetr   rP   IE_NAMEr   )	selfvideo_idactionsrH   kwargsr)   rb   idxstatusrI   rI   r_   _kaltura_api_call  s.   
zKalturaIE._kaltura_api_callhtml5c                 C   s0   |dv sJ |dkr|  |||S | |||S )N)r{   kwidgetr|   )_get_video_info_kwidget_get_video_info_html5)rt   ru   rG   rH   player_typerI   rI   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   r@   )
apiVersion	clientTagrP   ks	partnerIdQ sessionstartWidgetSessionexpiryserviceactionwidgetIdrJ   redirectFromEntryId	baseentry{1:result:ks}9createdAt,dataUrl,duration,name,plays,thumbnailUrl,userIdtypefieldsr   filterr   r   responseProfilegetbyentryidflavorAssetr   entryIdr   r   caption_captionassetr   zfilter:entryIdEqualr   r   z2Downloading video info JSON (Kaltura html5 player)note_build_widget_idrz   )rt   ru   rG   rH   rv   rI   rI   r_   r~   6  sB   (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 )Nmultirequestz3.1r   zkwidget:v2.89r   null)r   r   r   r   rP   
ignoreNullr   r   r   r   startwidgetsession	   r   )	r   r   r   r   rP   r   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r   z4Downloading video info JSON (Kaltura kwidget player)r   rg   r   r   )rt   ru   rG   rH   rv   header__infoflavor_assetscaptionsinforI   rI   r_   r}   b  s^   8z!KalturaIE._get_video_info_kwidgetc                 C   s   d|v r|S d| S )Nr   rI   )rt   rG   rI   rI   r_   r     s   zKalturaIE._build_widget_idz$window\.kalturaIframePackageData\s*=c              
      s  t |i \}}| |}|ddd\ }d\}}s$d|v r"dnd r:|r:| j| |dd	\}}}	}n|d
d\}
}|
sL|sLtdddi }|rVtj|}|
rv|
	d}|
tt|d d d dd |dd d D  d|v rt|d d d nd|v r|d d  nd|v r|d d  ntdddd|v r|d d }| j| d	\}}}	}nd|v r
d|v r
|d d }| ||}| | j|d|d }|d |d d }}	|d }tt | j| d	\}}}	}W d    n	1 sw   Y  nBd|v rFd |v rF|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 ))NrG   r   r   )NNzhtml5lib/v2r|   r{   rH   )r   pathqueryzInvalid URLT)expected/r   c                 S   s   g | ]}|gqS rI   rI   ).0r[   rI   rI   r_   
<listcomp>  s    z+KalturaIE._real_extract.<locals>.<listcomp>r   widr   r   pentry_id	uiconf_idzflashvars[referenceId]kalturaIframePackageDataentryResultmetacontextDataflavorAssetszflashvars[playlistAPI.kpl0Id]playlistResultrN   .namec                    s   d  d|  d S )Nzkaltura::rI   )xrG   r   rI   r_   <lambda>  s    z)KalturaIE._real_extract.<locals>.<lambda>)iegetterzflashvars[ks])r   _match_valid_urlrS   r   rr   r   urllibparseparse_qssplitrh   ri   zipr	   _download_webpage_search_jsonIFRAME_PACKAGE_DATA_REGEX
contextlibsuppressplaylist_from_matchesr   r   _per_video_extract)rt   r   smuggled_datarX   r   r   r   r   r   r   r   r   r)   splitted_pathreference_idrV   
entry_dataplaylist_idplaylist_datarI   r   r_   _real_extract  sz   
$
2zKalturaIE._real_extractc                    s  | d}|rtdtj|d d  dnd  fdd}|d }	d|	v r5t	
d	d
|	}	g }
i }|D ]}| ddkrEq;| ddkrMq;| dsZ| ddkrZq;| dso| ddkrkd|d< nd|d< |d|	|d }djd=i |}| ddu r| |||sq;d|vr| ddkrdn| d}|
|| dt|d t| dt| ddd | d|t| d!t| d"|d#
 q;d$|	v r||	d%d&}| j||dd'd(d)d*\}}|
| | j||d+ |rG| d,g D ]E}| ddkrq| dsqt| d-}|| d.p(| d/g d0| j|d | dpA| j |pAd1d2 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=rI   )unsigned_urlr   referrerrI   r_   sign_url  s
   z.KalturaIE._per_video_extract.<locals>.sign_urldataUrlz/flvclipper/z/flvclipper/.*z/serveFlavorry   fileExtchunallow_unplayable_formatswvmcontainerFormatqtmovr   z{}/flavorId/{}r   z{fileExt}-{bitrate}
isOriginalTvideoCodecId	frameRater   nonebitratesizei   )invscaleheightwidth)
	format_idr   tbrfpsfilesize_approx	containervcodecr   r   r   z/playManifest/z
format/urlzformat/applehttpm3u8_nativehlsF)m3u8_idfatal)targetrg   rP   languageCodelanguagezE{}/api_v3/service/caption_captionasset/action/serve/captionAssetId/{}r   )r   r   r   r   thumbnailUrlr,   	createdAtuserId)NoneN)ignoreplays)
r   r   formatsr'   r   r   r,   r   r   r-   rI   )rr   base64	b64encodejoinr   r   urlparserp   decoderK   sub	get_paramrP   _is_valid_urlrT   r   replace#_extract_m3u8_formats_and_subtitlesextend_merge_subtitles
setdefaultrl   _CAPTION_TYPESr   r   )rt   r   r   r   r   r   r   r   r   data_urlr   r'   f	video_urlr   r   m3u8_urlfmtssubscaptioncaption_formatrI   r   r_   r     s   






zKalturaIE._per_video_extract)N)Nr{   )__name__
__module____qualname__
_VALID_URLrl   rm   r  int_TESTS_WEBPAGE_TESTSclassmethodr`   rz   r   r~   r}   r   r   r   r   rI   rI   rI   r_   r      sr   
 6

4


,>?r   )r  r   rn   rK   urllib.parser   commonr   utilsr   r   r   r   r	   r
   r   r   r   rI   rI   rI   r_   <module>   s    (