a
    h                    @   s  d dl Z d dlZ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 ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z- G d	d
 d
e	Z.G dd de.Z/G dd de/Z0G dd de.Z1G dd de1Z2G dd de.Z3G dd de1Z4G dd de.Z5G dd de1Z6G dd de1Z7G dd de.Z8G dd  d e.Z9G d!d" d"e.Z:dS )#    N   )InfoExtractor   )HEADRequestRequest)	HTTPError)ExtractorErrorOnDemandPagedList
clean_htmldetermine_extfilter_dictget_element_by_classint_or_nonejoin_nonempty
js_to_jsonjwt_decode_hs256merge_dictsmimetype2extparse_filesizeparse_iso8601parse_qs	qualitiessmuggle_urlstr_or_nonetry_calltry_getunified_timestampunsmuggle_urlurl_basenameurl_or_noneurlencode_postdataurlhandle_detect_exturljoin)requiretraverse_objc                	   @   s  e Zd ZdZdZdZdZdZdZdddZ	d	d
dddddddd
dddddddd
d
ddddZ
i ZdZedd Zdd Zdd Zd<ddZedd  Zd!d" Zd#d$ Zd%d& Zd=d'd(Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd>ddd3d4d5Zd?d6d7Zed8d9 Zd:d; Z dS )@VimeoBaseInfoExtractorvimeoFzhttps://vimeo.com/log_inz{Cannot download embed-only video without embedding URL. Please call yt-dlp with the URL of the page that embeds this video.webz,application/vnd.vimeo.*+json; version=3.4.10en)AcceptzAccept-Languagezoauth-token-androidTzNzRmYTg5YjgxMWExY2JiNzUwZDg1MjhkMTYzZjQ4YWYyOGEyZGJlMTp4OGx2NFd3QnNvY1lkamI2UVZsdjdDYlNwSDUrdm50YzdNNThvWDcwN1JrenJGZC9tR1lReUNlRjRSVklZeWhYZVpRS0tBcU9YYzRoTGY2Z1dlVkJFYkdJc0dMRHpoZWFZbU0reDRqZ1dkZ1diZmdIdGUrNUM5RVBySlM0VG1qcw==zxcom.vimeo.android.videoapp (OnePlus, ONEPLUS A6003, OnePlus, Android 14/34 Version 11.8.1) Kotlin VimeoNetworking/3.12.0)%urinamedescriptiontypelinkplayer_embed_urldurationwidthlanguageheightembedcreated_timemodified_timerelease_timecontent_ratingcontent_rating_classrating_mod_lockedlicenseprivacypicturestagsstats
categoriesuploadermetadatauserfilesdownloadappplaystatusresource_keybadgeupload	transcodeis_playable	has_audio)	CACHE_KEY
CACHE_ONLY
VIEWER_JWTREQUIRES_AUTHAUTH
USER_AGENTVIDEOS_FIELDSzoauth-token-ioszMTMxNzViY2Y0NDE0YTQ5YzhjZTc0YmU0NjVjNDQxYzNkYWVjOWRlOTpHKzRvMmgzVUh4UkxjdU5FRW80cDNDbDhDWGR5dVJLNUJZZ055dHBHTTB4V1VzaG41bEx1a2hiN0NWYWNUcldSSW53dzRUdFRYZlJEZmFoTTArOTBUZkJHS3R4V2llYU04Qnl1bERSWWxUdXRidjNqR2J4SHFpVmtFSUcyRktuQw==zbVimeo/11.10.0 (com.vimeo; build:250424.164813.0; iOS 18.4.1) Alamofire/5.9.0 VimeoNetworking/5.0.0)'r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   
config_urlZembed_player_config_urlr<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   N)rV   r5   r,   r;   z#metadata.connections.comments.totalz metadata.connections.likes.totalr7   zstats.plays)rP   rQ   rR   rT   rU   )ZandroidZiosr'   c                 C   s   t | d|iS )Nreferer)r   )urlZreferrer_url rY   K/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/vimeo.py_smuggle_referreri   s    z(VimeoBaseInfoExtractor._smuggle_referrerc                 C   s:   t |i \}}| d }d|v r0|d |d< |||fS )z&@returns (url, smuggled_data, headers)http_headersrW   Referer)r   	get_paramcopy)selfrX   dataheadersrY   rY   rZ   _unsmuggle_headersm   s
    z)VimeoBaseInfoExtractor._unsmuggle_headersc                 C   s   t |d t  dk S )Nexpx   )r   time)r`   tokenrY   rY   rZ   _jwt_is_expiredu   s    z&VimeoBaseInfoExtractor._jwt_is_expiredc                 C   s<   | j r| | j d s| j S | jd|ddddid| _ | j S )Njwtzhttps://vimeo.com/_next/viewerzDownloading web token infoz!Failed to download web token infor)   application/jsonrb   )_viewer_inforh   _download_json)r`   
display_idrY   rY   rZ   _fetch_viewer_infox   s    z)VimeoBaseInfoExtractor._fetch_viewer_infoc                 C   s   d|  dv S )Nr&   https://vimeo.com)Z_get_cookies)r`   rY   rY   rZ   _is_logged_in   s    z$VimeoBaseInfoExtractor._is_logged_inc              
   C   s   | j r
d S |  }d||d|d d}z&| j| jd dt|d| jdd W nP ty } z8t|jtr|jj	d	v rtd
ddtdW Y d }~n
d }~0 0 d | _
d S )Nloginr&   xsrft)actionemailpasswordZservicerg   z
Logging in!application/x-www-form-urlencoded)Content-Typer]   ra   rb   )  i    z*Unable to log in: bad username or passwordTexpectedzUnable to log in)rq   ro   _download_webpage
_LOGIN_URLr    r   
isinstancecauser   rH   rl   )r`   usernamerv   viewerra   erY   rY   rZ   _perform_login   s2    
z%VimeoBaseInfoExtractor._perform_loginc                 C   s   | j r
d S | jr|   | jdkr&d S | j D ]r\}}|d sBq0|d }|| jvrr| j| j	| }rr|| j|< | j
|r0|| _| d| d| d  d S q0d S )Nr'   rP   rO   zFound cached z token; using z as default API client)rq   _LOGIN_REQUIREDraise_login_required_DEFAULT_CLIENT_CLIENT_CONFIGSitems_oauth_tokenscacheload_NETRC_MACHINEgetwrite_debug)r`   Zclient_nameclient_config	cache_keyrg   rY   rY   rZ   _real_initialize   s&    


z'VimeoBaseInfoExtractor._real_initializec                 C   s"   |  d}|d u rtddd|S )NvideopasswordzFThis video is protected by a password, use the --video-password optionTr|   )r^   r   )r`   rv   rY   rY   rZ   _get_video_password   s    
z*VimeoBaseInfoExtractor._get_video_passwordc              
   C   s   |   }| |d }td||dd}z<| j| d|dtj||ddd	 d
d|ddd W nJ ty } z2t|j	t
r|j	jdkrtddd W Y d }~n
d }~0 0 d S )Nrs   rp   /delimz	/passwordzSubmitting video passwordrv   rg   ),:)
separatorsz*/*rj   )r)   rx   r]   T)ra   rb   impersonater{   Wrong passwordr|   )r   ro   r   _request_webpagejsondumpsencoder   r   r   r   rH   )r`   video_idpathZvideo_passwordrg   rX   errorrY   rY   rZ   _verify_video_password   s,    


z-VimeoBaseInfoExtractor._verify_video_passwordc                 K   s   | j d|dfi |S )Nz\bdata-config-url="([^"]+)"z
config URL)_html_search_regex)r`   webpagekwargsrY   rY   rZ   _extract_config_url   s
    z*VimeoBaseInfoExtractor._extract_config_urlc                 O   s0   | j d|dg|R i |}|r,| ||S d S )Nz<vimeo\.config\s*=\s*(?:({.+?})|_extend\([^,]+,\s+({.+?})\));zvimeo config)_search_regex_parse_json)r`   r   r   argsr   vimeo_configrY   rY   rZ   _extract_vimeo_config   s    z,VimeoBaseInfoExtractor._extract_vimeo_configc           &         sL  |d }| d}| dpi }ddddd | d}|dk}| d	pNi }g }	i }
| d
pn| d
pni }| dp|g D ]b}| d}|sq~|	|d| ddt| dt| dt| dt| dd q~d}t|}d}dD ] t| fddpi  D ]\}}| d}|s6q  d| }g }t||rdD ].\}}||| t	|d| d|f qZn
||fg}|D ]\}} dkr.| j
||d||d| d d!d"\}}|D ]<}td#d$| d%|d&  }r||d'|d< q|	| | j||
d( nz d)krd*|v rh| j||d!d+pVi  d}|rh|}| j|d,d-||d| d.d!d+\}}|	| | j||
d( qqq| d/pi }| d0}|r| dd1kr|	d2|dd3 | d4pg D ],} |
| d5 g d6td7| d d8 qg }!|s| d9pJi  D ] \}"}#|!|"t|"|#d: qP|!t|d;dthif | d<pi }$|$ d}%t| d=p|||$ d>|%r|%dd? nd |%|!t| d@tt|dAdBdCd dthfdDthfdEfdFd dGp d |	|
|t|dHdIthfdJthfftfdKdLS )MNvideotitle
live_eventis_upcomingis_live	post_live)pendingactivestartedZendedrH   requestrD   progressiverX   zhttp-{}quality
   r1   r3   fpsZbitrate)rX   	format_idZsource_preferencer1   r3   r   tbr)lowZmediumhighz/sep/video/)hlsdashc                    s   |   d S )NZcdnsrY   xZ
files_typerY   rZ   <lambda>      z6VimeoBaseInfoExtractor._parse_config.<locals>.<lambda>-)) r   )Z_sepz	sep/videor   r   mp4Downloading z m3u8 informationF)livem3u8_idnotefatalzaudio-(|)r   r   targetr   zjson=1r   z/master.jsonz/master.mpdz MPD informationarchive
source_urldonezlive-archive-source)r   rX   r   text_trackslangvttzhttps://player.vimeo.com/)extrX   Zthumbs)idr1   rX   )	thumbnailZthumbnail_urlownerr   r+   r0   r4   chaptersc                 S   s   t |d d uS )Ntimecode)int_vrY   rY   rZ   r   R  r   r   )r   
start_timec                 S   s   | d S )Nr   rY   )crY   rY   rZ   r   U  r   )keyZingestscheduled_start_timer   )r   resr   zhdr:12source)r   r   rA   uploader_iduploader_url
thumbnailsr0   r   formats	subtitleslive_statusrelease_timestamp_format_sort_fields)r   appendformatr   r   r   r   researchsub#_extract_m3u8_formats_and_subtitlesjoingroupextend_merge_subtitlesrm   "_extract_mpd_formats_and_subtitlesreplace
setdefaultr"   r$   r   r   splitsortedstrr   any)&r`   configr   Z
video_datavideo_titler   r   r   r   r   r   config_filesf	video_urlZ	QUALITIESr   Zsep_patternZcdn_nameZcdn_dataZmanifest_urlr   Zsep_manifest_urlssuffixreplZf_idZm_urlfmtssubsmobjZ
real_m_urlZlive_archiveZlive_archive_source_urlttr   r   Zthumbr   Zvideo_uploader_urlrY   r   rZ   _parse_config   s    



&





$








z$VimeoBaseInfoExtractor._parse_configc              
   C   s   | j | }|d r$d|  d  S |d }| j|sN| j| j|| j|< | j|s|d rvtd| ddd	| jd
d d| dd| dd|d  |d d| j	t
dddtjjddd | j|< | j| j|| j|  d| j|  S )NrQ   jwt ri   rO   rP   The zf client is unable to fetch new OAuth tokens and is only intended for use with previously cached tokensTr|   z,https://api.vimeo.com/oauth/authorize/clientz	Fetching z OAuth tokenzFailed to fetch zBasic rS   rT   Authorizationz
User-AgentZclient_credentialszMprivate public create edit delete interact upload purchased stats video_files)Z
grant_typeZscope)	quote_via)rb   ra   Zaccess_tokenzBearer )r   ro   r   r   r   r   r   r   rm   _CLIENT_HEADERSr    urllibparsequotestore)r`   clientr   r   rY   rY   rZ   _fetch_oauth_tokenb  s>    



z)VimeoBaseInfoExtractor._fetch_oauth_tokenc                 C   sp   | j dd gtdd  }r^|| jvrDtd| dd| j dd| jd	| d
dd |S | jrj| jS | jS )Nr  ie_keyr   zUnsupported API client "z$" requested. Supported clients are: z, Tr|   zUsing z. API client as specified by extractor argument)Z	only_once)	_configuration_argVimeoIEr   r   r   r   rq   _DEFAULT_AUTHED_CLIENTr   )r`   r  rY   rY   rZ   _get_requested_client  s    

z,VimeoBaseInfoExtractor._get_requested_clientforce_clientqueryc          	      K   s   |p
|   }| j| }|d r6| js6| d| d | jtdt||dd|dd|d| d	d
| d	ft| ||d d| jdd	|d i|pi d|S )NrR   r  z! client only works when logged-inzhttps://api.vimeo.com/videosr   r   r   r   z	 API JSONzUnable to download rT   r  fieldsr   rU   rb   r&  )
r#  r   rq   r   rm   r   r   r  r  r   )	r`   r   unlisted_hashr   r%  r&  r   r  r   rY   rY   rZ   _call_videos_api  s2    
z'VimeoBaseInfoExtractor._call_videos_apic                 C   s  | j s
d S | jddgtdd }|dkr,d S z(| j||dtd|dd	d
dd}W n: ty } z"| d|j  d }W Y d }~n
d }~0 0 t|dt	hfpi }t|dt
hf}|rL|dsL|dsL|dd}	| |||	 drLt|dd tpt|d pd }
||
t|dt|dt|d|	ddS z| j||dddid }W n: ty } z | d!|j  W Y d }~d S d }~0 0 t|dd"thfs| d#}|d$kr| | d% d S | | d& | j||ddd"id'd(}t|d"d)t	hfD ]}|d*}|r|d+d,kr@qtt|d-d.gd  d d/}
|
s| jt||d'd0d1}|ot|}
||
pd2|ddt|dt|dt|d3t|ddd4  S d S )5NZoriginal_format_policyautor  r   neverzLoading download config JSONZload_download_config)rt   r)  rj   XMLHttpRequest)r)   X-Requested-Withr&  rb   z%Unable to load download config JSON: source_filedownload_urlZis_coldZis_defrostingpublic_nameZOriginalz videoc                 S   s   | d S )N	extensionrY   r   rY   rY   rZ   r     r   zAVimeoBaseInfoExtractor._extract_original_format.<locals>.<lambda>r   r1   r3   sizer   )rX   r   r1   r3   filesizer   r   r'   r'  r<   r$  z!Unable to download privacy info: rE   z+: Vimeo says this video is not downloadablealwaysz, so yt-dlp is not attempting to extract the original/source format. To try anyways, use --extractor-args "vimeo:original_format_policy=always"z6; attempting to extract original/source format anywaysF)r%  r&  r   .r.   r   r   filenamer   )Zdefault_extzDetermining source extension)r   r   Zunknown_videor   )rX   r   r   r1   r3   r   r5  r   )rq   r   r!  rm   r   r   r   r   r$   dictr   r   Z_is_valid_urlr   r  r   lowerr   r   r*  boolr   r   r   r!   )r`   rX   r   r)  policyZdownload_datar   r0  r1  Zsource_namer   Zprivacy_infomsgoriginal_responseurlhrY   rY   rZ   _extract_original_format  s    




"
z/VimeoBaseInfoExtractor._extract_original_formatc                 C   s(   | rdnd|r | r t j|jnddS )Ntruefalser   )is_embedreferrer)r  r  urlparsehostname)rB  rW   rY   rY   rZ   _get_embed_params  s    
z(VimeoBaseInfoExtractor._get_embed_paramsc           
   
   C   s   |  |}|d }| jd| |d| ddi | ||ddid}d }t|d	d
kr| d}|srtdddz6| jd| d|dt||d dddidd }W nJ ty }	 z2t|	jt	r|	jj
dkrtddd W Y d }	~	n
d }	~	0 0 ||fS )Nri   https://api.vimeo.com/albums/r  rj   r  r)   r'  zdescription,name,privacyr(  )r<   viewrv   r   zFThis album is protected by a password, use the --video-password optionTr|   https://vimeo.com/showcase//authVerifying the passwordrs   r   r.  r-  ry   hashed_pass  r   )ro   rm   rF  r$   r^   r   r    r   r   r   rH   )
r`   album_idrB  rW   r   ri   albumrM  rv   r   rY   rY   rZ   _get_album_data_and_hashed_pass   s@    


z6VimeoBaseInfoExtractor._get_album_data_and_hashed_pass)N)N)NN)N)!__name__
__module____qualname__r   r   r   _REFERER_HINTr   r"  r  r   r   rl   staticmethodr[   rc   rh   ro   propertyrq   r   r   r   r   r   r   r  r  r#  r*  r?  rF  rQ  rY   rY   rY   rZ   r%   ,   sp   ,




 
R
r%   c                .       sF  e Zd ZdZdZdZg dZ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!ddid"gd#d$d%d&d'dd(d)d*d)d*d+d,d-deed d.dd/d0d"gd#d1d2d3dd4d5d6d7d8d9d:d;d<d=d eeed>dd?id"gd@dAdBdCddDedEdFdEdFdGdHdIdJeed dKdKdKdKdLdMdNd"gdOdPdQdRddSdTdUdVdWd d!d"gdOdXdYddZd[d\d]d^d_d`daed ed^d_dbd"gdcdddedfddgdhdidjdkdld dmeedgdkdnd"gdodpdqddrdsdtdudvdwdxdyedzeed{d ed|d}d~id"gdddddddddddd	d}d~idddd%d'dd(d+d,d-dd ddd/d0d"gd@dd~dddd~ddd~ddd~dddddd	ddeddd dedeeddd/d0d"gddd~ddddddddddddded edddd}d~id"gddddddddddd ddeedddd}d~id"gddddddddddddeed eddddŜd}did"gddd~ddddddded edddddddќd}d~id"gddddddddd dddddۜddddۜddddۜddddۜddddۜddddۜddddۜddddۜddddۜddddۜddddۜddddۜgd	ddiddd"gddddddddddddddeed dd"gdcd dddddddd d!d"gd}diddd~dgZ	d	d
dddd ddddd"gdddddddd ddddd"gdddgiidƐddgZ
e fddZed d! Zd"d# Zd$d% Zd-d'd(Zd.d)d*Zd+d, Z  ZS (/  r!  z$Information extractor for vimeo.com.al  (?x)
                     https?://
                         (?:
                             (?:
                                 www|
                                 player
                             )
                             \.
                         )?
                         vimeo\.com/
                         (?:
                             (?P<u>user)|
                             (?!(?:channels|album|showcase)/[^/?#]+/?(?:$|[?#])|[^/]+/review/|ondemand/)
                             (?:(?!event/).*?/)??
                             (?P<q>
                                 (?:
                                     play_redirect_hls|
                                     moogaloop\.swf)\?clip_id=
                             )?
                             (?:videos?/)?
                         )
                         (?P<id>[0-9]+)
                         (?(u)
                             /(?!videos|likes)[^/?#]+/?|
                             (?(q)|/(?P<unlisted_hash>[\da-f]{10}))?
                         )
                         (?:(?(q)[&]|(?(u)|/?)[?]).*?)?(?:[#].*)?$
                 r&   )zP<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//player\.vimeo\.com/video/\d+.*?)\1zV<embed[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?vimeo\.com/moogaloop\.swf.+?)\1zJ<video[^>]+src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?vimeo\.com/[0-9]+)\1zhttp://vimeo.com/56015672#at=0Z 8879b6cc097e987f02484baf890129e5Z56015672r   u.   youtube-dl test video '' ä↭𝕐-BaW jenozKcz$md5:2d3305bad981a06ff79f027f19865021iPZ20121220z,re:https?://(?:www\.)?vimeo\.com/user7108434Zuser7108434zFilippo Valsordar   zby-sa)r   r   r   r,   	timestampupload_dater   r   rA   r0   r;   r   best[protocol=https]zNo longer available)rX   md5	info_dictparamsskipz'https://player.vimeo.com/video/54469442Z 619b811a4417aa4abe78dc653becf511z,Videos that embed the url in the player pageZ54469442zIKathy Sierra: Building the minimum Badass User, Business of Software 2012zBusiness of SoftwareZbusinessofsoftwarez$https://vimeo.com/businessofsoftwarei  %re:https?://i\.vimeocdn\.com/video/.+r   r   r   rA   r   r   r0   r   $Failed to parse XML: not well-formedrX   r[  r   r\  r]  expected_warningszhttp://vimeo.com/68375962Z aaf896bdb7ddd6476df50007a0ac0ae7zVideo protected with passwordZ68375962z(youtube-dl password protected test videoiQZ20130614Zuser18948128zhttps://vimeo.com/user18948128u   Jaime Marquínez Ferrándiz)r   r   r   rX  rY  r   release_dater   r   rA   r0   comment_count
like_countr   
youtube-dl)r   r   z+http://vimeo.com/channels/keypeele/75629013Z 2f86a05afe9d7abc0b9126d229bbe15dZ75629013z$Key & Peele: Terrorist Interrogationz$md5:6173f270cd0c0119f22817204b3eb86cZatenciozhttps://vimeo.com/atenciozPeter AtencioZkeypeelez#https://vimeo.com/channels/keypeeleiOFRZ20130928   )r   r   r   r,   r   r   rA   
channel_idchannel_urlrX  rY  r0   r   
view_countre  rf  z
http-1080prX   r[  r\  r]  rc  zhttp://vimeo.com/76979871zVideo with subtitlesZ76979871z+The New Vimeo Player (You Know, For Videos)i]RZ20131015Zstaffzhttps://vimeo.com/staffVimeo>   zcount:2)der(   esfr)r   r   r   r,   rX  rY  r   rd  r   r   rA   r0   re  rf  r   r   z2Ignoring subtitle tracks found in the HLS manifest)rX   r   r\  rc  z'https://player.vimeo.com/video/98044508zCThe js code contains assignments to the same variable as the configZ98044508z Pier Solar OUYA Official Traileru   Tulio GonçalvesZuser28849593zhttps://vimeo.com/user28849593v   zhttps://vimeo.com/33951933Z33951933z1FOX CLASSICS - Forever Classic ID - A Full MinutezThe DMCIZdmcizhttps://vimeo.com/dmcii(NZ20111220z$md5:f37b4ad0f3ded6fa16f38ecde16c3c44<   )r   r   r   rA   r   r   rX  rY  r,   r0   re  r   rf  r   rd  rX   r\  rc  z0Contains source format not accessible in webpagezhttps://vimeo.com/393756517Z	393756517iyU^Zframeworklaz#Straight To Hell - Sabrina: NetflixzFramework StudioZ20200225   zhttps://vimeo.com/frameworkla)r   r   rX  r   r   rA   rY  r0   r   r   re  rf  r   rd  )r   rX   r\  rc  z+https://vimeo.com/channels/tributes/6213729Z6213729zVimeo Tribute: The ShiningzCasey DonahueZcaseydonahuezhttps://vimeo.com/caseydonahuetributes#https://vimeo.com/channels/tributesiJZ20090821iA  zcount:4)r   r   r   rA   r   r   ri  rj  rX  rY  r,   r0   re  rk  r>   r   rf  skip_downloadTrX   r\  r]  rc  zhttps://vimeo.com/73445910Z73445910zThe Reluctant Revolutionaryz
10Ft Filmszhttps://vimeo.com/tenfootfilmsZtenfootfilmsz$md5:0fa704e05b04f91f40b7f3ca2e801384Z20130830i_ R)	r   r   r   rA   r   r   r,   rY  rX  z!this page is no longer available.)rX   r\  r]  r^  z'https://player.vimeo.com/video/68375962)r   r   r   r   r   rA   r0   r   z.http://vimeo.com/moogaloop.swf?clip_id=2539741rX   only_matchingzhttps://vimeo.com/109815029z4Video not completely processed, "failed" seed status)rX   r   r{  z1https://vimeo.com/groups/travelhd/videos/22439234z.https://vimeo.com/album/2632481/video/79010983z2https://vimeo.com/showcase/3253534/video/119195465z0A video in a password protected album (showcase)Z	119195465zPhilipp HagemeisterZuser20132939Z20150209ic*Tzhttps://vimeo.com/user20132939)r   r   r   rA   r   r,   rY  rX  r   r0   rf  r   rk  re  )rX   r   r\  r]  rc  zhttps://vimeo.com/7809605zDirect URL with hashz&https://vimeo.com/160743502/abd0e13fb4Z	160743502zJulian TrybaZaliniamediazHarrisville New HampshireiVZ20160329zby-nc   zhttps://vimeo.com/aliniamedia)r   r   rA   r   r   rX  rY  r   r;   r0   re  r   rf  r   rd  )r   rX   r\  r]  rc  zhttps://vimeo.com/138909882Z	138909882z3Eastnor Castle 2015 Firework Champions - The Promo!z$md5:9441e6829ae94f380cc6417d982f63acZfireworkchampionszFirework ChampionsZ20150910iUz#https://vimeo.com/fireworkchampions   )r   r   r   r,   r   rA   rY  rX  r   r   r0   rf  re  r   rd  z/https://vimeo.com/channels/staffpicks/143603739Z	143603739zKarim Huu Doi-VZ20151026z+The Shoes - Submarine Feat. Blaine HarrisonZkarimhdz$md5:8e2eea76de4504c2e8020a9bcfa1e843Z
staffpicksiP  zhttps://vimeo.com/karimhdz%https://vimeo.com/channels/staffpickszcount:6)r   r   rA   rX  rY  r   r   r,   ri  r0   re  rk  r   rf  r   rj  r>   m3u8z&https://vimeo.com/392479337/a52724358ez&https://vimeo.com/581039021/9603038895Z	581039021iai  zhttps://vimeo.com/txwestcapitalZ20210730zChristopher Inksz0Thursday, July 29, 2021 BMA Evening Video UpdateZtxwestcapital)r   r   rX  r   r0   re  r   rf  r   rd  rA   r   r   rY  z(https://player.vimeo.com/video/756714419Z	756714419z8Dr Arielle Schwartz - Therapeutic yoga for optimum sleepzAlex HowardZuser54729178zhttps://vimeo.com/user54729178iL
  r   z<Untitled Chapter 1>)r   Zend_timer   j   zWelcoming Dr Arielle Schwartzi1  zWhat is therapeutic yoga?iR  zVagal toning practicesix  z Trauma and difficulty letting goi#  z Dr Schwartz' insomnia experiencei  z#A strategy for helping sleep issuesi  z
Yoga nidraiI  zWisdom in stillnessiR	  z%What helps us be more able to let go?i	  z Practical tips to help ourselveszWhere to find out more)	r   r   r   rA   r   r   r   r0   r   r]   z https://sleepsuperconference.com)r\   rx  z&https://vimeo.com/144579403/ec02229140Z	144579403ZSALESMANSHIPz$md5:4338302f347a1ff8841b4a3aecaa09f0zOff the Picture PicturesZoffthepicturepicturesz'https://vimeo.com/offthepicturepicturesi  Z20151104iLy9V)r   r   r   r,   rA   r   r   r0   rY  rX  rd  r   rf  re  r   z(https://player.vimeo.com/video/859028877Z	859028877z3Ariana Grande - Honeymoon Avenue (Live from London)z
Raja VirdiZ	rajavirdizhttps://vimeo.com/rajavirdii,  )rX   r\  rc  r]  z0https://vimeo.com/user26785108/newspiritualguidez*https://gettingthingsdone.com/workflowmap/Z	105375912zWORKFLOW MAPi  ZGTDZgettingthingsdonez#https://vimeo.com/gettingthingsdoner   r   r   r0   r   rA   r   r   Password protected)rX   r\  rc  r^  zChttps://www.gsd.harvard.edu/event/i-m-pei-a-centennial-celebration/Z	855172304z#I. M. Pei: A Centennial Celebrationi  zHarvard GSDZ
harvardgsdzhttps://vimeo.com/harvardgsdZgenericr   Zchrome)Zextractor_argsrx  c                 #   s&   t  ||D ]}| ||V  qd S Nsuper_extract_embed_urlsr[   clsrX   r   Z	embed_url	__class__rY   rZ   r  ,  s    zVimeoIE._extract_embed_urlsc                 C   s   t | ||d S r  )nextr  )r  rX   r   rY   rY   rZ   _extract_url1  s    zVimeoIE._extract_urlc                 C   sr   |   }tdt| i}t|ddi}| jtj	|j
d d  d|d||d}|du rntd	d
d|S )Nrv   rx   rw   )r&  z/check-passwordrL  ry   FWrong video passwordTr|   )r   r    base64	b64encoder   r   rm   r  r  urlsplit_replacegeturlr   )r`   rX   r   rb   rv   ra   checkedrY   rY   rZ   _verify_player_video_password5  s    z%VimeoIE._verify_player_video_passwordc                 C   sj   i }| j ||ddddddd}t|dd	d
 fD ].}||dg |d d|dd q6|S )N
texttracksr@  r   )r   display_languager   r2   r.   r+   r-   r*   )Zinclude_transcriptr'  F)r   r&  r   ra   c                 S   s   t |d S Nr.   r   r   rY   rY   rZ   r   M  r   z(VimeoIE._get_subtitles.<locals>.<lambda>r2   r.   r   r  )rX   r   r+   )r*  r   r$   r  r   r   )r`   r   r)  r  r   r  rY   rY   rZ   _get_subtitlesD  s    
zVimeoIE._get_subtitlesNc                    sJ  g i  }}t  }t|dthf t|ddd fD ]Z}|d }||v rJq2|| |d}	t|}
|	dksv|
dkr| j||d	dd
d\}}n|	dks|
dkr| j||dd
d\}}|D ]8tg d 	ddd d tdR  d< qnt|dt
d	dhfdtjhfdthfdthfdthfdthfd|tdt|dd|	t fddd | q2|| | j||d  q2t|d!d"d#d$thfr| j| |||d  i t|d%thfd&d%thfd&dthfd&dthfd'd(thfd)d*d+d ddthfdthfd,fd-| ||d.d/d0t|d'd1thfd2S )3Nr0   ))rG   )Nr   rD   rE   c                 S   s   t |d S r  r  r   rY   rY   rZ   r   [  r   z-VimeoIE._parse_api_response.<locals>.<lambda>r.   r   r   r~  r   F)r   r   r   Zmpd)Zmpd_idr   r   r   r   r   r-   defaultcodecr1   r3   r4  r   )r   Zvcodecr1   r3   r5  r   httpr2  Z	renditionc                      s   d d   d S )Nr5     i   rY   rY   r0   fmtrY   rZ   r   y  r   )rX   r   r   r   rB   connectionsr  totalr+   rC   r   r   r=   sizesc                 S   s   t |d S r  r  r   rY   rY   rZ   r     r   )rX   r1   r3   )r   rA   r   r   r   r   r   was_live)	streamingr   rH   )r   r0   r   r   r   )setr$   r   addr   r   r   r   r   r  r   r  r9  updater   r   r   r   r   Zextract_subtitlesr   r   )r`   r   r   r)  r   r   Z	seen_urlsfileZ
format_urlr   r   r  r  rY   r  rZ   _parse_api_responseU  s    












zVimeoIE._parse_api_responsec                    s  dD ]}z|  ||W  qW q ty
 } zt|jtsB t| j|jj|jjj|ddt	j
hthfppi }|s|jjdkrdt|dv r| | nZ|jjdkr|dd	kr| jtt|d
tjhfddd|  dd   ddd d n W Y d }~qd }~0 0 qtdthf }r:| | |||}n| ||}| d| ||}|rp|d | fdd}	|dd|	d|	dttdd d tdd tpi }
dD ]$ tt|
 fdd| d  < q|S )!NFTFr     rv   )Zinvalid_parameters.fieldrz   
error_codeiT  r   z2Authentication may be needed due to your location.zHIf your IP address is located in Europe you could try using a VPN/proxy,z	or else ur    r   )methodrV   https://vimeo.com/r   c                    s   t  | d S )N_time)r   r   r   )r   rY   rZ   r     r   z+VimeoIE._extract_from_api.<locals>.<lambda>r,   r;   releasecreatedc                 S   s   | d d S )Nr?   ZplaysrY   r   rY   rY   rZ   r     r   )r,   r;   r   rX  rk  c                 S   s   | d d S )NrB   r  rY   r   rY   rY   rZ   r     r   )commentlikec                    s   |  d  d S )Nsr  rY   r   )krY   rZ   r     r   _count)r*  r   r   r   r   r$   Z_webpage_read_contentresponserX   r   loadsr8  rH   r   r   r   r   r  stripZ_login_hintr   r  rm   r  r?  r   r  r   r   )r`   r   r)  retryr   r  rV   infosource_formatZget_timestampr  rY   )r  r   rZ   _extract_from_api  sn    


"zVimeoIE._extract_from_apic           &         s  |  \}}d|vr |d< |  }|d |d }}|rR| ||S tfdddD rpd| | jdd	d d
}|r| |dd  tj	
}|jdk}	z | j|||	d\}
|
j}W n ty } zt|jtr|jjdvr |jj }d|v rt| jdd|jj}d}|jjjd }rXtd| d| d| n|	svtd| d| ddtd| jdd d| dddW Y d }~n
d }~0 0 |jdkr"| dd|  d d!kr| ||| |  |}| d| ||}|r|d" | |S | j|d d
}|rr|d#pFi }|d$d%krrtd& | j!|d' ddd }d }d }i }d }| jd(d)d d
}|r| j"d d
}t#t$d*}|%|d+| d, |sL| j&| jd-d.d/d
|dd0}|s| |S |d1 d2 }|d3}|d4p&i }|d5}t#|d*pH|d6}| '||  d7pfi }|d8pvi  fd9d:}| rֈd;rֈd<}|r|d=ds| (t)d>| d=did?S |s| j*d@d*d d
}|s| j+g dAd d
}|s| ,dB |s0| jdCdDd d
}t-| jdEdFd d
} t-| jdGdHd d
}!t-| jdIdJd d
}"g }#| d| ||d}|r|#| |  |}$|#.|$d"  |$dK |dK< | j/|i d
}%|s| jdLdMd dMdN}|%|#t0||| |!|"|dO t1||$|%S )PNr]   r   r)  c                 3   s   | ]}| v V  qd S r  rY   ).0p)rX   rY   rZ   	<genexpr>  r   z(VimeoIE._real_extract.<locals>.<genexpr>)Zplay_redirect_hlszmoogaloop.swfr  z'vimeo\.com/(?:album|showcase)/([0-9]+)/zalbum idr  Fhttps)rb   r   )  i  sA   Because of its privacy settings, this video cannot be played hereTr|   zFIf you are using a data center IP or VPN/proxy, your IP may be blockedr   zGot HTTP Error z  when using impersonate target "z". z. zThis request has been blocked due to its TLS fingerprint. Install a required impersonation dependency if possible, or else if you are okay with z"compromising your security/cookiesz	light redz8, try replacing "https:" with "http:" in the input URL. .zplayer.vimeo.comz\b(?:playerC|c)onfig\s*=zinfo sectionrI     r   seed_statusstatefailedz{} said: {}r   zvimeo\.com/channels/([^/?#]+)z
channel idr,   zhttps://vimeo.com/channels/)ri  rj  z4vimeo\.(?:clip|vod_title)_page_config\s*=\s*({.+?});zpage configz{}r   ZplayerrV   
cc_licenseclipZuploaded_onZdescription_html_escapedr   vodc                     sn   dv rdS t  dd rdS dp*g D ]<} | dr@ dS | d}|r,|dsb|d	r, dS q,d
S )Nz>You rented this title.<Tc                 S   s   | d d S )NrC   	purchasedrY   r   rY   rY   rZ   r   2  r   z:VimeoIE._real_extract.<locals>.is_rented.<locals>.<lambda>Zpurchase_optionsr  Zlabel_stringzYou rented thisz
 remainingF)r   r   
startswithendswith)Zpurchase_optionlabel)r  r  r   rY   rZ   	is_rented/  s    

z(VimeoIE._real_extract.<locals>.is_rentedZ
is_trailer
feature_idZforce_feature_idz https://player.vimeo.com/player/rm  z9(?s)<div\s+class="[^"]*description[^"]*"[^>]*>(.*?)</div>)r,   zog:descriptionztwitter:descriptionzCannot find video descriptionz<time[^>]+datetime="([^"]+)"rX  zUserPlays:(\d+)z
view countzUserLikes:(\d+)z
like countzUserComments:(\d+)zcomment countr   zK<link[^>]+rel=["\']license["\'][^>]+href=(["\'])(?P<license>(?:(?!\1).)+)\1r;   )r  r   )r   rX  r,   Zwebpage_urlrk  rf  re  r;   )2rc   _match_valid_url	groupdictr   r  r  r   rQ  r  r  rD  schemeZ_download_webpage_handlerX   r   r   r   r   rH   r  readrU  
extensionsZ_downloaderZ_format_errrE  Z_search_jsonr  r  r?  r   r   r   IE_NAMEr   r
   r   r  r   rm   
url_resultr   r   _html_search_metareport_warningr   r   Z_search_json_ldr   r   )&r`   rX   ra   rb   r  r   r)  rO  
parsed_urlZ	is_securer>  Zredirect_urlr   errmsgrH   Zdcip_msgr   r  r  r   r  r  rX  Zvideo_descriptionr\  rV   ri  Zpage_configr  r   r  r  rk  rf  re  r   Zinfo_dict_configZjson_ldrY   )r  rX   r  r   rZ   _real_extract  s8   









zVimeoIE._real_extract)N)N)rR  rS  rT  __doc__
_VALID_URLr  _EMBED_REGEXr   r  _TESTS_WEBPAGE_TESTSclassmethodr  r  r  r  r  r  r  __classcell__rY   rY   r  rZ   r!    sx  	
 












"      G

#E2r!  c                   @   s   e Zd ZdZdZddddddd	d
ddddeddeedddidgddddddddddddeeded d!d"d#idgd$d%d#d&d'd#d&d(d#d&gZd)S )*VimeoOndemandIEzvimeo:ondemandzBhttps?://(?:www\.)?vimeo\.com/ondemand/(?:[^/]+/)?(?P<id>[^/?#&]+)z https://vimeo.com/ondemand/20704Z c424deda8c7f73c1dfb3edd7630e2f35Z	105442900r   u+   המעבדה - במאי יותם פלדמןu   גם סרטיםZgumfilmszhttps://vimeo.com/gumfilmsz$md5:aeeba3dbd4d04b0fa98a4fdc9c639998Z20140906iEcTr_  z2https://creativecommons.org/licenses/by-nc-nd/3.0/5   )r   r   r   rA   r   r   r,   rY  rX  r   re  r;   r0   rk  rf  r   rZ  ra  rl  z*https://vimeo.com/ondemand/36938/126682985Z	126584684u%   Rävlock, rätt läte på rätt platszLindroth & NorinZlindrothnorinzhttps://vimeo.com/lindrothnorinz$md5:c3c46a90529612c8279fb6af803fc0dfZ20150502i6EUy   zcount:5)r   r   r   rA   r   r   r,   rY  rX  r0   re  rk  r   rf  r>   rx  Try  z$https://vimeo.com/ondemand/nazmaalikrz  z$https://vimeo.com/ondemand/141692381z2https://vimeo.com/ondemand/thelastcolony/150274832N)rR  rS  rT  r  r  r   r  rY   rY   rY   rZ   r  w  sj   r  c                   @   s`   e Zd ZdZdZdZdZdZdddd	d
dgZdZ	dd Z
dd Zdd Zdd Zdd ZdS )VimeoChannelIEzvimeo:channelz7https://vimeo\.com/channels/(?P<id>[^/?#]+)/?(?:$|[?#])z<a.+?rel="next"Nz(<link rel="alternate"[^>]+?title="(.*?)"rw  rv  zVimeo Tributesr   r      rX   r\  playlist_mincountzhttps://vimeo.com/channels/%sc                 C   s   | d| dS )Nz/videos/page:r   rY   r`   base_urlpagenumrY   rY   rZ   	_page_url  s    zVimeoChannelIE._page_urlc                 C   s   | j p| j| j|dddS )Nz
list titleFr   )_TITLEr   	_TITLE_RE)r`   r   rY   rY   rZ   _extract_list_title  s    

z"VimeoChannelIE._extract_list_titlec           
      c   s   t dD ]}| ||}| ||d| }|dkrB| |V  td|}|r|D ],\}}}	| jtj	
||t ||	dV  qVn.td|D ] }| jd| t |dV  qt| j|tjd u r
 qq
d S )Nr   Downloading page zPid="clip_(\d+)"[^>]*>\s*<a[^>]+href="(/(?:[^/]+/)*\1)(?:[^>]+\btitle="([^"]+)")?)r   r  zid=["\']clip_(\d+)r  )r   )	itertoolscountr  r~   r  r   findallr  r  r  r"   r!  r  r   _MORE_PAGES_INDICATORDOTALL)
r`   list_idr  r  page_urlr   Zclipsr   r
  r  rY   rY   rZ   _title_and_entries  s0    

z!VimeoChannelIE._title_and_entriesc                 C   s"   |  ||}t|}| |||S r  )r  r  playlist_result)r`   r  r  Ztitle_and_entriesZ
list_titlerY   rY   rZ   _extract_videos  s    zVimeoChannelIE._extract_videosc                 C   s   |  |}| || j| S r  )	_match_idr  _BASE_URL_TEMPL)r`   rX   ri  rY   rY   rZ   r    s    
zVimeoChannelIE._real_extract)rR  rS  rT  r  r  r  r  r  r  r  r  r  r  r  r  rY   rY   rY   rZ   r    s"   r  c                   @   s8   e Zd ZdZdZdZdddddd	d
ddgZdZdS )VimeoUserIEz
vimeo:userz\https://vimeo\.com/(?!(?:[0-9]+|watchlater)(?:$|[?#/]))(?P<id>[^/]+)(?:/videos)?/?(?:$|[?#])z"<a[^>]+?class="user">([^<>]+?)</a>z"https://vimeo.com/nkistudio/videosZAKAMAZ	nkistudior   r   B   r  zhttps://vimeo.com/nkistudio/Trz  zhttps://vimeo.com/%sN)rR  rS  rT  r  r  r  r  r  rY   rY   rY   rZ   r    s   r  c                   @   s   e Zd ZdZdZdZ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dd d!gd"d#d$d%gd&d'd(dddd)d*d+d,iid-d.d/d0dd1d	d2d3d4d5d6d7d8d9gZd:Zd;d< Zd=d> Z	d?S )@VimeoAlbumIEzvimeo:albumzThttps://vimeo\.com/(?:album|showcase)/(?P<id>[^/?#]+)(?:$|[?#]|(?P<is_embed>/embed))z,<header id="page_header">\n\s*<h1>(.*?)</h1>zhttps://vimeo.com/album/2632481Z2632481zStaff Favorites: November 2013r     r  zPassword-protected albumzhttps://vimeo.com/album/3253534testZ3253534r  r   r   rg  )r   rX   r\  Zplaylist_countr]  z;embedded album that requires "referrer" in query (smuggled)zhttps://vimeo.com/showcase/10677689/embed#__youtubedl_smuggle=%7B%22referer%22%3A+%22https%3A%2F%2Fwww.riccardomutimusic.com%2F%22%7DzLa Traviata - la serie completaZ10677689zhttps://player.vimeo.com/video/505682113#__youtubedl_smuggle=%7B%22referer%22%3A+%22https%3A%2F%2Fwww.riccardomutimusic.com%2F%22%7DZ	505682113r   zLa Traviata - Episodio 7ZRMMusicZuser62556494zhttps://vimeo.com/user62556494i  r_  r`  )rX   r\  1r~  )Zplaylist_itemsrx  ra  )r   rX   r\  Zplaylistr]  rc  zBembedded album that requires "referrer" in query (passed as param)z)https://vimeo.com/showcase/10677689/embed	   r\   r]   z"https://www.riccardomutimusic.com/)r   rX   r\  r  r]  z*https://vimeo.com/showcase/11803104/embed2zRomans Video MinistryZ11803104)   z0non-numeric slug, need to fetch numeric album IDz9https://vimeo.com/showcase/BethelTally-Homegoing-ServiceszBethelTally Homegoing ServicesZ11547429z0Bethel Missionary Baptist Church
Tallahassee, FL)r   r   r,   r  )r   rX   r\  r  d   c              
   c   sN  |d }i |  ||d|| jd}|r2||d< z>| jd| d|d| |d| |d	  d
ddd }W nL ty }	 z4t|	jtr|	jjdkrW Y d }	~	d S  W Y d }	~	n
d }	~	0 0 |D ]}
|
	d}|sq|
	d}|r| j
d|dd dnd }|r4|s| d|  qd| }|r4| ||}| |t |V  qd S )Nr   zlink,uri)r'  pageZper_pageZ_hashed_passrG  z/videosr  r  ri   rj   rH  r/  ra   r  r.   r*   z/videos/(\d+)r   r  z"Skipping due to missing video ID: zhttps://player.vimeo.com/video/)rF  
_PAGE_SIZErm   ro   r   r   r   r   rH   r   r   r  r[   r  r!  r  )r`   rO  rM  rB  rW   r  Zapi_pager&  videosr   r   r.   r*   r   rY   rY   rZ   _fetch_pageL  sL    




zVimeoAlbumIE._fetch_pagec              
   C   s  |  |\}}}| |dd\}}|d}td|sz| jd| d|ddd	id
d}t|ddtht	ht
dhf}z| |||\}}	W nT ty }
 z<|r|st|
jtr|
jjdkrt| jdd W Y d }
~
n
d }
~
0 0 tt| j||	||| j}| |||d|dS )Nr   rB  r]   z[0-9]+rJ  rK  zDownloading album infor.  r-  )rN  r  )rb   Zexpected_statusrB   zalbum IDr  Tr|   r+   r,   )rc   r  r   r   r   	fullmatchrm   r$   r   r   r#   rQ  r   r   r   r   rH   rU  r	   	functoolspartialr  r  r  )r`   rX   r   r\   rO  rB  rW   Z	auth_inforP  rM  r   entriesrY   rY   rZ   r  p  s2    
 zVimeoAlbumIE._real_extractN)
rR  rS  rT  r  r  r  r  r  r  r  rY   rY   rY   rZ   r    s   


C$r  c                   @   s,   e Zd ZdZdZddddddgZd	Zd
S )VimeoGroupsIEzvimeo:groupz=https://vimeo\.com/groups/(?P<id>[^/]+)(?:/(?!videos?/\d+)|$)zhttps://vimeo.com/groups/meetupZmeetupzVimeo Meetup!r     r  zhttps://vimeo.com/groups/%sN)rR  rS  rT  r  r  r  r  rY   rY   rY   rZ   r    s   r  c                   @   s   e Zd ZdZdZdZdddddd	d
dddddidgddddddddddddd	ddddd d!dd"d#d$dd%d&d'd(d)d*d+dd,d-d.d/d0d1id'd2gZd3d4 Zd5S )6VimeoReviewIEzvimeo:reviewzReview pages on vimeozNhttps?://vimeo\.com/(?P<user>[^/?#]+)/review/(?P<id>\d+)/(?P<hash>[\da-f]{10})z;https://vimeo.com/user170863801/review/996447483/a316d6ed8dZ	996447483r   zRodeo day 1-_2Z	BROADKASTZuser170863801zhttps://vimeo.com/user170863801   r_  r`  rx  r~  ra  ry  z9https://vimeo.com/user21297594/review/75524534/3c257a1b5dZ c507a72f780cacc12b2248bb4006d253Z75524534zDICK HARDWICK 'Comedian'zRichard HardwickZuser21297594zkComedian Dick Hardwick's five minute demo filmed in front of a live theater audience.
Edit by Doug Mattocksi0  zhttps://vimeo.com/user21297594)	r   r   r   rA   r   r,   r0   r   r   z404 Not Found)rX   r[  r\  r^  zvideo player needs Refererz9https://vimeo.com/user22258446/review/91613211/13f927e053Z 6295fdab8f4bf6a002d058b2c6dce276Z91613211zCre:(?i)^Death by dogma versus assembling agile . Sander HoogendoornzDevWeek Eventsi
  Zuser22258446)r   r   r   rA   r0   r   r   z
video gone)r   rX   r[  r\  r^  r  z:https://vimeo.com/user37284429/review/138823582/c4d865efdeZ	138823582z%EFFICIENT PICKUP MASTERCLASS MODULE 1ZTMBZuser37284429)r   r   r   rA   r   r   Z	holygrail)r   rX   r\  r]  r^  c                 C   s   |  |ddd\}}}d| d| d| }| ||}|ddu r`| | | ||}|d	 }|d
 }| ||}	| |	|}
| jd| d| d| d||dd}|r|
d | t|d|
d< |
S )NrC   r   hashr  z/review/data/r   ZisLockedTZclipDataZ	configUrlz/review/z/actionZunlistedHash)r)  r   r,   )	r  r   rm   r   r   r  r?  r   r
   )r`   rX   rC   r   Zreview_hashZdata_urlra   	clip_datarV   r  r\  r  rY   rY   rZ   r    s$    

zVimeoReviewIE._real_extractN)rR  rS  rT  r  IE_DESCr  r  r  rY   rY   rY   rZ   r    sp   
	9r  c                   @   s<   e Zd ZdZdZdZdZdZdddgZdd	 Z	d
d Z
dS )VimeoWatchLaterIEzvimeo:watchlaterzLVimeo watch later list, ":vimeowatchlater" keyword (requires authentication)z8https://vimeo\.com/(?:home/)?watchlater|:vimeowatchlaterzWatch LaterThttps://vimeo.com/watchlaterrz  c                 C   s&   | d| d}t |}d|jd< |S )N/page:r   r-  r.  )r   rb   )r`   r  r  rX   r   rY   rY   rZ   r    s    
zVimeoWatchLaterIE._page_urlc                 C   s   |  ddS )NZ
watchlaterr  )r  )r`   rX   rY   rY   rZ   r    s    zVimeoWatchLaterIE._real_extractN)rR  rS  rT  r  r  r  r  r   r  r  r  rY   rY   rY   rZ   r    s   r  c                   @   sD   e Zd ZdZdZdZdddddd	d
ddgZdd Zdd ZdS )VimeoLikesIEzBhttps://(?:www\.)?vimeo\.com/(?P<id>[^/]+)/likes/?(?:$|[?#]|sort:)zvimeo:likeszVimeo user likesz#https://vimeo.com/user755559/likes/i%  Z
user755559u   urza’s Likesr  )rX   r  r\  z"https://vimeo.com/stormlapse/likesTrz  c                 C   s   | d| dS )Nr  r   rY   r  rY   rY   rZ   r    s    zVimeoLikesIE._page_urlc                 C   s   |  |}| |d| dS )Nr  z/likes)r   r  )r`   rX   Zuser_idrY   rY   rZ   r    s    
zVimeoLikesIE._real_extractN)	rR  rS  rT  r  r  r  r  r  r  rY   rY   rY   rZ   r    s   r  c                
       sX   e Zd ZdZdZdgZdddddd	d
ddddgdgZe fddZdd Z	  Z
S )
VHXEmbedIEz	vhx:embedz*https?://embed\.vhx\.tv/videos/(?P<id>\d+)zB<iframe[^>]+src="(?P<url>https?://embed\.vhx\.tv/videos/\d+[^"]*)"zJhttps://demo.vhx.tv/packages/behind-the-scenes-with-sasha/videos/hard-workZ2251259r   ZUntitledr  r_  z
OTT VideosZuser80538407zhttps://vimeo.com/user80538407r  ra  rt  c                 #   s&   t  ||D ]}| ||V  qd S r  r  r  r  rY   rZ   r  *  s    zVHXEmbedIE._extract_embed_urlsc           	      C   sj   |  |}| |\}}}| j|||d}| | d|d|td }| ||}| ||}||d< |S )Nrk   zwindow\.OTTData\s*=\s*({.+})zott datarV   r   )r   rc   r~   r   r   r   rm   r  )	r`   rX   r   r   rb   r   rV   r  r  rY   rY   rZ   r  /  s    
zVHXEmbedIE._real_extract)rR  rS  rT  r  r  r  r  r  r  r  r  rY   rY   r  rZ   r    s$   
r  c                   @   s   e Zd ZdZdZddddddd	d
dddddddeedddddidgddddddddddddd 
d!d"d#dgd$gZd%d& Zd'S )(
VimeoProIEz	vimeo:prozZhttps?://(?:www\.)?vimeopro\.com/[^/?#]+/(?P<slug>[^/?#]+)(?:(?:/videos?/(?P<id>[0-9]+)))?zKhttp://vimeopro.com/openstreetmapus/state-of-the-map-us-2013/video/68093876Z 3b5ca6aa22b60dfeeadf50b72e44ed82zVimeo Pro video (#1197)Z68093876r   Zopenstreetmapusz!https://vimeo.com/openstreetmapuszOpenStreetMap USz=Andy Allan - Putting the Carto into OpenStreetMap Cartographyz$md5:8cf69a1a435f2d763f4adf601e9c3125i;  Z20130610icQZbyr_  )r   r   r   r   rA   r   r,   r0   rY  rX  r;   r   re  rf  r   rd  r   rZ  ra  rb  zShttps://vimeopro.com/cadfem/simulation-conference-mechanische-systeme-in-perfektionZ	764543723uI   Mechanische Systeme in Perfektion: Realität erfassen, Innovation treibenz$md5:2a9d195cd1b0f6f79827107dc88c2420ZCADFEMZcadfemzhttps://vimeo.com/cadfemi0  zcount:10)
r   r   r   r   r,   rA   r   r   r0   r   ZConference2022Tr   rx  ry  c           	   
   C   s  |  |dd\}}|r|}| ||}| jd|dd d}|rz,| j||td|  i| |dd}W nJ ty } z2t|j	t
r|j	jd	krtd
dd W Y d }~n
d }~0 0 d }t||}|r| jd|d d}n|rd| }ntddd| j|t|d|dS )NZslugr   zB(?is)<form[^>]+?method=["\']post["\'][^>]*>(.+?password.+?)</form>zpassword formr  rv   zLogging in with video password)ra   r   r{   r  Tr|   r,   r  z:No Vimeo embed or video ID could be found in VimeoPro page)url_transparentr,   )r  r   r~   r   r    r   Z_hidden_inputsr   r   r   r   rH   r!  r  r  r  )	r`   rX   rn   r   r   Zpassword_formr   r,   Z	vimeo_urlrY   rY   rZ   r  n  sB    

zVimeoProIE._real_extractN)rR  rS  rT  r  r  r   r  r  rY   rY   rY   rZ   r   <  sX   /r   c                       s8  e Zd ZdZdZdgZdddddd	d
ddeeddddddddddidgddddddddddddd d!d"dd#dd$d%id&dgdd'd(dd)d*d+d,d-d.eed/dd0d1d2d1ddddidgdd3d4dd5d6d7d8d9d:d;d<d=d>dd?id@dAdBddCdDdEdFdGdHeedIddJdKdLdKddddidgddMdNddOdPdQdRdSdTeedUddVdWdVdWddddidgddXdYddZd[d\d]d^eed_dd`dadbdaddcddddedgddfdgdhdidgdhdjdgdhdkdgdhdldgdhdmdgdhdndgdhgZd%ddddddddddd d!d"dd#ddidgdgZdoZ	dpZ
d}dsdtZedudv Zd~dwdxZe fdydzZd{d| Z  ZS )VimeoEventIEzvimeo:eventz(?x)
        https?://(?:www\.)?vimeo\.com/event/(?P<id>\d+)(?:/
            (?:
                (?:embed/)?(?P<unlisted_hash>[\da-f]{10})|
                videos/(?P<video_id>\d+)
            )
        )?z`<iframe\b[^>]+\bsrc=["\'](?P<url>https?://vimeo\.com/event/\d+/embed(?:[/?][^"\']*)?)["\'][^>]*>zhttps://vimeo.com/event/5116195Z
1082194134r   Z5116195z"Skidmore College Commencement 2025z$md5:1902dd5165d21f98aa198297cc729d23zSkidmore CollegeZuser116066434zhttps://vimeo.com/user116066434iR&  r_  ikhZ20250507r  )r   r   rn   r   r,   rA   r   r   re  rf  r0   r   rX  rY  r   rd  r   rx  r~  ra  ry  z%https://vimeo.com/event/5034253/embedZ
1071439154Z5034253zAdvancing Humans with AIzfre:AI is here to stay, but how do we ensure that people flourish in a world of pervasive AI use.{322}$zMIT Media LabZmitmedialabzhttps://vimeo.com/mitmedialabiZ  zcount:37igZ20250410)r   r   rn   r   r,   rA   r   r   r0   r   r   r   rd  r   r]   z/https://www.media.mit.edu/events/aha-symposium/)rx  r\   z1https://vimeo.com/event/4753126/videos/1046153257Z
1046153257Z4753126z4January 12, 2025 The True Vine (Pastor John Mindrup)z$The True Vine (Pastor 	John Mindrup)zSalem United Church of ChristZuser230181094zhttps://vimeo.com/user230181094ib  i gZ20250112iOgzhttps://vimeo.com/event/4768062Z
1108792268Z4768062z/re:GRACELAND CAM \d{4}-\d{2}-\d{2} \d{2}:\d{2}$z 24/7 camera at Graceland MansionzElvis Presley's GracelandZvisitgracelandz https://vimeo.com/visitgracelandiNhZ20250810r   )r   r   rn   r   r,   rA   r   r   r   rd  r   Z
livestream)rX   r\  r]  z*https://vimeo.com/event/4259978/3db517c479Z	939104114Z4259978z7Enhancing Credibility in Your Community Science Projectz$md5:eab953341168b9c146bc3cfe3f716070zNOAA ResearchZnoaaresearchzhttps://vimeo.com/noaaresearchiy  iNNfZ20240522iNNfz0https://vimeo.com/event/595460/videos/498149131/Z	498149131Z595460zG2021 Eighth Annual John Cardinal Foley Lecture on Social CommunicationszDReplay: https://vimeo.com/catholicphilly/review/498149131/544f26a12fzKearns Media Consulting LLCZkearnsmediaconsultingz'https://vimeo.com/kearnsmediaconsultingir  i_Z20210107zhttps://vimeo.com/event/4940578Z
1059263570Z4940578zTMAC AKC AGILITY 2-22-2025zPaws 'N EffectZpawsneffectzhttps://vimeo.com/pawsneffecti[  iIgZ20250222iIg)r   r   rn   r   rA   r   r   re  rf  r0   r   rX  rY  r   rd  r   Z22r!  zhttps://vimeo.com/event/4753126Trz  z%https://vimeo.com/event/5120811/embedz-https://vimeo.com/event/5112969/embed?muted=1z9https://vimeo.com/event/5097437/embed/interaction?muted=1z8https://vimeo.com/event/5113032/embed?autoplay=1&muted=1z0https://vimeo.com/event/595460/videos/507329569/z0https://vimeo.com/event/4606123/embed/358d60ce2e)r   r*   schedulestream_descriptionzstream_privacy.embedzstream_privacy.viewzclip_to_play.namezclip_to_play.urizclip_to_play.config_urlzclip_to_play.live.statuszclip_to_play.privacy.embedzclip_to_play.privacy.viewzclip_to_play.passwordzstreamable_clip.namezstreamable_clip.urizstreamable_clip.config_urlzstreamable_clip.live.status)r   r*   r+   rV   r0   zlive.statusNrY   c	           
      C   s   t d||ddd}	| jt dt ||dd|dd|d|	 d	|	 td
|pNg |d|pZi tdd| |d  |d|pi dS )NeventzAPI JSONr  r   z!https://api.vimeo.com/live_eventsr   r   r   zFailed to download r   )r'  rC  rj   r  ri   )r)   r  r]   r/  )r   rm   r   r   ro   )
r`   event_idepr)  r   r'  rC  r&  rb   resourcerY   rY   rZ   _call_events_apix  s*    zVimeoEventIE._call_events_apic                 C   s@   t | ddd hfsdS | d dd  d\}}}||p<d fS )Nr*   c                 S   s
   |  dS )Nz/videos/)r  r   rY   rY   rZ   r     r   zBVimeoEventIE._extract_video_id_and_unlisted_hash.<locals>.<lambda>)NNr  r   )r$   	partition)r   r   r   r)  rY   rY   rZ   #_extract_video_id_and_unlisted_hash  s    z0VimeoEventIE._extract_video_id_and_unlisted_hashc                 C   s"   | j td||ddt||dddS )Nrp   r   r   r  T)rn   r   r"  )r  r   r!  )r`   r   r)  r'  rY   rY   rZ   _vimeo_url_result  s    zVimeoEventIE._vimeo_url_resultc                 #   s&   t  ||D ]}| ||V  qd S r  r  r  r  rY   rZ   r    s    z VimeoEventIE._extract_embed_urlsc                    s    |\}}}|d} |ddd\}}dD ]}z0 j|| j|dpVdidd	id
}W  q>W q8 ty: }	 z|st|	jt	r|	jj
dvr t|	jj tjhthfpi }
|
d}|dkr j|dd W Y d }	~	q8|dkrt jdd|
d }r$td| dd W Y d }	~	q8d }	~	0 0 q8|d d }|dkr`tdddt|dthfpti }t|ddthf}t|ddthf}t|}|dkr|r|t kr jd| dd d }d }nf|d!kr jtd"|d#|d$d%|d&d|d'}d(} |}n(rt |\}}|krd|d)krd|sV|d*krd |||S  fd+d,}nd-d, }td.D ]`} j|d/|d0|  j|d1|idd2id3}t|d4|tf}|st|d5d6thfs qq|std7ddd8d(d(d9t|ddthf}|d(kr> jg  ||R  S |d: }|rht  ! "||d;|}nd|i}|d<d=kr #d> i t|d?thfd@thfdA|||dB|S )CNr]   r   r)  r   r  Zclip_to_play_id0r)   z*application/vnd.vimeo.*+json;version=3.4.9)r)  r'  rC  r&  rb   )r  r  r  i  r&  )r   i  Tr|   r   zVimeo says: Zstream_privacyrI  Znobodyz0This event has not been made available to anyoneZclip_to_playr   rH   r$  r   unavailablez!This live event is scheduled for r   Z
embed_onlyzhttps://vimeo.com/eventr4   r   r   z Downloading embed iframe webpage)r   rb   r  r   Zunlistedc                    s     |d kS )Nr   )r,  r   r`   r   rY   rZ   r     r   z,VimeoEventIE._real_extract.<locals>.<lambda>c                 S   s   t |ddkS )N)r   rH   r/  )r$   r   rY   rY   rZ   r     r   r   r  zpage r  z%application/vnd.vimeo.*;version=3.4.1)r)  r   r'  rC  r&  rb   ra   Zpagingr  zThis event video is unavailabler   )r  r   NrV   zDownloading config JSONr   r   zHThis live event recently ended and some formats may not yet be availabler   r%  )r   r,   )rn   r   r   )$rc   r   r  r   r*  _EVENT_FIELDSr   r   r   r   rH   r$   r  r  r   r  r8  r   rU  r  r   rf   Zraise_no_formatsr~   r   r   r,  r-  r  r  _VIDEOS_FIELDSr  r   r  rm   r  )r`   rX   r   rb   rC  r'  r)  r  Zlive_event_datar   r  r  	error_msgZview_policyr  Zclip_statusr   r   r   rV   r   Zclip_idZ	clip_hashZvideo_filterr  Zvideos_datar   r  rY   r0  rZ   r    s    

 



$


zVimeoEventIE._real_extract)NNNrY   NNN)NN)rR  rS  rT  r  r  r  r   r  r  r1  r2  r*  rV  r,  r-  r  r  r  r  rY   rY   r  rZ   r#    s    @  


r#  );r  r  r  r   r   rf   urllib.parser  commonr   Z
networkingr   r   Znetworking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   Zutils.traversalr#   r$   r%   r!  r  r  r  r  r  r  r  r  r  r   r#  rY   rY   rY   rZ   <module>   sD   t   v      ^<> Q%V