o
    id                     @   s,  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
 ddlmZ ddlmZ ddlmZ dd	l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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 G dd deZ:dS )    N   )InfoExtractor)RtmpIE)	YoutubeIE   )compat_etree_fromstring)LenientSimpleCookie)	HTTPError)ImpersonateTarget)"KNOWN_EXTENSIONSMEDIA_EXTENSIONSExtractorErrorUnsupportedErrordetermine_extdetermine_protocoldict_getextract_basic_authfilter_dictformat_fieldint_or_noneis_html
js_to_jsonmerge_dictsmimetype2ext
orderedSetparse_durationparse_resolutionsmuggle_urlstr_or_nonetraverse_objtry_callunescapeHTMLunified_timestampunsmuggle_url
update_urlupdate_url_queryurl_or_noneurlhandle_detect_exturljoinvariadic
xpath_attr
xpath_textxpath_with_ns)_UnsafeExtensionErrorc                   @   s&  e Zd ZdZdZdZdZ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eddddid d!d"d#d"dddd$d%d&dd'd(d	d)d*d+d,d-	d.dd/d0giiid1d2d3dd3d4d5d6d7ddid d8d9dd9dddid d:d3dd3d;d6d<dd	id d=d>dedddd?id d@dAddBdddCid dDdEdFidGdd	idHdIdJdKdLdMdNdOdPdPdQdRdMdSdd	idHdTdTdUdVdMdWdOdXdXdYdZdMd[dOd\d]d^dd_d`dadbddcdddedfdgdhdidjdkdldmdndodjdpdqddqdrdsdtd7ddid dui dEdvdwddxdydzd{d|d}d~dgdddedddddddddddedddddd	dddddddeddgddddddddgddddddddddddddid ddddddddddddddddddddddddddddddddddddȜdgdʜddddddddddddddddddeedeedgdלdddddddddgdddid1ddddddddddd.dd/d0giiid dddddd	ddddd.dd/d0giiid ddddddddddd	dddddddddid di dEddwddxd dzd{d|dd~dgdddedddddedddddd	deddddd	d
dddddded	dgddi dEddwddxddzd{d|dd~dgdddedddd	dddedddddeddddd	ddddddded	dgdZ	dd  Z
d3d"d#Zd$d% Zd&d' Zed(d) Zed*d+ Zd,d- Zd.d/ Zd!i d0d1d2Zd!S (4  	GenericIEz+Generic downloader that works on some sitesz.*genericFz/https://media.w3.org/2010/05/sintel/trailer.mp4 67d406c2bcb6af27fa886f31aa934bbetrailermp4Ti;K20100513)idexttitledirect	timestampupload_date)urlmd5	info_dictz#http://ai-radio.org:8000/radio.opusradioopus)r4   r5   r6   zInvalid URL)r:   r<   skipz[https://ftp.nluug.nl/video/nluug/2014-11-20_nj14/zaal-2/5_Lennart_Poettering_-_Systemd.webm 4ccbebe5f36706d85221f204d7eb5913z5_Lennart_Poettering_-_SystemdwebminT20141120znhttps://stream-akamai.castr.com/5b9352dbda7b8c769937e459/live_2361c920455111ea85db6911fe397b9e/index.fmp4.m3u8z
index.fmp4is_live)r4   r5   r6   live_statusskip_downloadm3u8)r:   r<   paramsz=http://calimero.tk/muzik/FictionJunction-Parallel_Hearts.flaczFictionJunction-Parallel_Heartsflaczihttps://www.extra.cz/cauky-lidi-70-dil-babis-predstavil-pohadky-prymulanek-nebo-andrejovy-nove-saty-ac867 a9a2cad3e54f78e4680c6deef82417e9zTcauky-lidi-70-dil-babis-predstavil-pohadky-prymulanek-nebo-andrejovy-nove-saty-ac867u   čauky lidi 70 finallz$md5:47b2673a5b76780d9d329783e1fbf5aag     s@z/re:https?://media\.extra\.cz/static/img/.+\.jpgib20220606)	r4   r5   r6   descriptionr7   duration	thumbnailr8   r9   extractor_argsimpersonatechrome)r:   r;   r<   rG   zzhttps://cdn.bitmovin.com/content/assets/art-of-motion-dash-hls-progressive/m3u8s/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.m3u8z$f08e80da-bf1d-4e3d-8899-f0f6155f6efa   ig20250120)r4   r5   r6   rL   r8   r9   z\https://raw.githubusercontent.com/grafov/m3u8/refs/heads/master/sample-playlists/master.m3u8masterzxhttps://cdn.bitmovin.com/content/assets/art-of-motion-dash-hls-progressive/mpds/f08e80da-bf1d-4e3d-8899-f0f6155f6efa.mpdig)r4   r5   r6   r8   r9   zChttps://livesim2.dashif.org/livesim2/ato_10/testpic_2s/Manifest.mpdManifest
livestreamzVhttps://api.new.livestream.com/accounts/21/events/7954027/videos/166558123.secure.smilz166558123.securez$73fb2379-a624-4b6c-bce4-e46086007f2csmilz:https://shellac-archive.ch/repository/xspf/22-AL0019Z.xspfr4   z
22-AL0019Z   )r:   r<   playlist_countrG   z)http://phihag.de/2014/youtube-dl/rss2.xmlz*https://phihag.de/2014/youtube-dl/rss2.xmlzZero Punctuationz$md5:512ae5f840e52eb3c0d08d4bed08eb3e)r4   r6   rK      )r:   r<   playlist_mincountz'https://anchor.fm/s/dd00e14/podcast/rssz100% Hydrogen z$md5:7ec96327f8b91a2549a2e74f064022a1r   zhttps://www.omnycontent.com/d/playlist/a7b4f8fe-59d9-4afc-a79a-a90101378abf/bf2c1d80-3656-4449-9d00-a903004e8f84/efbff746-e7c1-463a-9d80-a903004e8f8f/podcast.rsszThe Little Red Podcastz$md5:be809a44b63b0c56fb485caf68685520L   zhttps://www.interfax.ru/rss.aspu   Интерфаксz$md5:49b6b8905772efba21923942bbc0444c   z/https://www.filmarkivet.se/movies/paris-d-moll/ df02cadc719dcc63d43288366f037754zparis-d-mollzParis d-mollz$md5:319e37ea5542293db37e1e13072fe330z;re:https?://www\.filmarkivet\.se/wp-content/uploads/.+\.jpg)r4   r5   r6   rK   rM   zthttps://www.dagbladet.no/nyheter/etter-ett-ars-planlegging-klaffet-endelig-alt---jeg-matte-ta-en-liten-dans/6041303560413035uN   Etter ett års planlegging, klaffet endelig alt: - Jeg måtte ta en liten dansz$md5:bbb4e12e42e78609a74fd421b93b1239z(re:https?://www\.dagbladet\.no/images/.+)r4   r6   rK   rM   r   )r:   r<   rX   zGhttps://www.abc.net.au/res/libraries/cinerama2/examples/single_clip.htmsingle_clipzSingle Clip player examples)r4   r6      z5https://flowplayer.com/resources/demos/standard-setupplaylist   i[20181009zkhttps://media.nationalarchives.gov.uk/index.php/webinar-using-discovery-national-archives-online-catalogue/Mrj4DVp2zeAr5   r6   u:   Using Discovery, The National Archives’ online catalogue	age_limitr   availabilityunlisted
categories	EducationchannelzThe National Archives UKchannel_follower_count
channel_idUCUuzebc1yADDJEnOLA5P9xwchannel_urlz8https://www.youtube.com/channel/UCUuzebc1yADDJEnOLA5P9xwchapterszcount:13rK   z$md5:a236581cd2449dd2df4f93412f3f01c6rL   i  
like_countrD   not_live
media_typevideoplayable_in_embedzcount:5zre:https?://i\.ytimg\.com/vi/.+i=T20150212z@TheNationalArchivesUKz.https://www.youtube.com/@TheNationalArchivesUK)tagsrM   r8   r9   uploaderuploader_iduploader_url
view_countYoutube)r:   r<   add_iez1https://www.indiedb.com/games/king-machine/videoszvideos-1z!Videos & Audio - King Machine (1)zMBrowse King Machine videos & audio for sweet media. Your eyes will thank you.z4re:https?://media\.indiedb\.com/cache/images/.+\.jpgzgeneric videos)r4   r5   r6   rK   rM   _old_archive_ids)r:   r<   zhttps://foodschmooze.org/z00FrhnwzGrilling Beef Tenderloin g     x@z*re:https?://cdn\.jwplayer\.com/v2/media/.+iVW20160607)r4   r5   r6   rK   rL   rM   r8   r9   z#http://www.suffolk.edu/sjc/live.phpliveflvz3Massachusetts Supreme Judicial Court Oral Argumentsz1https://bogmedia.org/videos/21217/40-nochey-2016/ 94166bdb26b4cb1fb9214319a629fc5121217u#   40 ночей (2016) - BogMedia.orgz$md5:4e6d7d622636eb7948275432eb256dc3z40-nochey-2016z=re:https?://bogmedia\.org/contents/videos_screenshots/.+\.jpg)r4   r5   r6   rK   
display_idrM   z&https://youix.com/video/leningrad-zoj/ 94f96ba95706dc3880812b27b7d8a2b818485u_   Клип: Ленинград - ЗОЖ скачать, смотреть онлайн | Youix.comzleningrad-zojz:re:https?://youix\.com/contents/videos_screenshots/.+\.jpg)r4   r5   r6   r   rM   z=https://shooshtime.com/videos/346037/fresh-out-of-the-shower/ c9a97ad528607a4516d4df83a3aeb12c346037z$Fresh out of the shower - Shooshtime   z$md5:efd70fd3973f8750d285c743b910580azfresh-out-of-the-showerz=re:https?://i\.shoosh\.co/contents/videos_screenshots/.+\.jpg)r4   r5   r6   re   rK   r   rM   zUntested major version)r:   r;   r<   expected_warningsz5https://www.kvs-demo.com/video/105/kelis-4th-of-july/105zKelis - 4th Of Julyz#https://www.kvs-demo.com/embed/105/ 1ff84c70acaddbb03288c6cc5ee1879fz"Kelis - 4th Of July / Embed Playerzkelis-4th-of-julyzBre:https?://www\.kvs-demo\.com/contents/videos_screenshots/.+\.jpgzhttps://beltzlaw.com/z
beltzlaw-1z4re:https?://beltzlaw\.com/wp-content/uploads/.+\.jpgzgeneric beltzlaw)r4   r5   r6   rK   rM   r8   r9   r}   zhttps://cine.ar/ d3e33335e339f04008690118698dfd08zcine-1zCINE.AR (1)z$md5:a4e58f9e2291c940e485f34251898c4az re:https?://cine\.ar/img/.+\.pngzgeneric cineformatzehttps://www.nu.nl/280161/video/hoe-een-bladvlo-dit-verwoestende-japanse-onkruid-moet-vernietigen.htmlipy2AcGLzAHoe een bladvlo dit verwoestende Japanse onkruid moet vernietigenz$md5:6a9d644bab0dc2dc06849c2505d8383dg     [@z"re:https?://images\.nu\.nl/.+\.jpgib\^20200411zMhttps://www.autoweek.nl/autotests/artikel/porsche-911-gt3-rs-rij-impressie-2/z"porsche-911-gt3-rs-rij-impressie-2z#Test: Porsche 911 GT3 RS - AutoWeekz$md5:a17b5bd84288448d8f11b838505718fcz#re:https?://images\.autoweek\.nl/.+iF<c20221004)r4   r5   r6   rK   r7   rM   r8   r9   zhttps://breezy.hr/
k6gl2kt2eqz6Breezy HR's ATS helps you find & hire employees soonerg      @z$md5:eee75fdd3044c538003f3be327ba01e1gN@z2re:https?://cdn\.prod\.website-files\.com/.+\.webpi X20170130)	r4   r5   r6   average_ratingrK   rL   rM   r8   r9   zhttps://gist.githubusercontent.com/bashonly/2aae0862c50f4a4b84f220c315767208/raw/e3380d413749dabbe804c9c2d8fd9a45142475c7/videojs_hls_test.htmlvideojs_hls_testi  )r4   r5   r6   rL   zhttps://ortcam.com/solidworks-%d1%83%d1%80%d0%be%d0%ba-6-%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%87%d0%b5%d1%80%d1%82%d0%b5%d0%b6%d0%b0_33f9b7351.html?vid=33f9b7351yygqldloqIku8   SolidWorks. Урок 6 Настройка чертежаpublicu   PROстое3DUCy91Bug3dERhbwGh2m2Ijngz8https://www.youtube.com/channel/UCy91Bug3dERhbwGh2m2Ijngcomment_countz$md5:baf95267792646afdbf030e4d06b2ab3i  heatmapz	count:100zcount:17iAQ20130314z
@PROstoe3Dz"https://www.youtube.com/@PROstoe3D)	rt   rv   rM   r8   r9   rw   rx   ry   rz   z\https://www.google.com/url?rct=j&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DcmQHVoWB5FYcmQHVoWB5FYz$First Firefox OS phones side-by-sideEntertainmentz	The VergeUCddiUEpeqJcYeBxX1IVBKvQchannel_is_verifiedz8https://www.youtube.com/channel/UCddiUEpeqJcYeBxX1IVBKvQz$md5:7a676046ad24d9ea55cdde4a6657c5b3   zcount:15iz*Q20130224z	@TheVergez!https://www.youtube.com/@TheVergec                 C   s   | j d|  dS )zReport information extraction.z![redirect] Following redirect to N)_downloader	to_screen)selfnew_url r   L/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/generic.pyreport_following_redirect:  s   z#GenericIE.report_following_redirectNc              
   C   sF   |dkr	|d7 }n|sd S d}| j d| d| t|d d  d S )Nr   sazIdentified  z; %s)r   write_debugr   )r   namenumnoter   r   r   report_detected>  s   
(zGenericIE.report_detectedc                 C   sL  | j dd gddd }|d ur#tj|jp |p tj|jp d |d< | j dd gddd }|d urFtj|jpC|pCtj|jpCd |d< dd	 }t| j d
dddthfd|hfd|hfdpbd |d< | j dd gddd }|d urtjtj|jp|ptj|j}| j	|D ]}t
|d ||d< qtdd | j	|D d }	|	r$|  dd gd }
|
d ur|
dkrdnd|d< d S |	dp|dpi }|d}| j|	d |ddi |ddidd}|du rd S |d}|dsd S | j||j||ddd}|sd S | ||}|sd|d< |d p||d < d S d S )!Nfragment_queryT)	casesenser   extra_param_to_segment_url	key_queryextra_param_to_key_urlc                 S   s   t d| t jr
| S d S )Nz(0x)?[\da-f]+)re	fullmatch
IGNORECASE)valuer   r   r   hex_or_noneU  s   z3GenericIE._extra_manifest_info.<locals>.hex_or_nonehls_keyr   )urikeyivhls_aesvariant_queryr:   c                 s   s     | ]}t |d kr|V  qdS )m3u8_nativeN)r   ).0fr   r   r   	<genexpr>e  s    z1GenericIE._extra_manifest_info.<locals>.<genexpr>rC   falserq   rD   http_headersr4   zChecking m3u8 live statusFAccept-Encodingidentity)errnoteheadersfatal      #EXTM3U)prefixr   r   rL   )_configuration_argurllibparseurlparsequeryr   r&   parse_qsr   _get_formatsr%   nextget_request_webpageread
startswith_webpage_read_contentr:   _parse_m3u8_vod_duration)r   infomanifest_urlr   r   r   r   r   fmtm3u8_formatrC   r   r   urlhfirst_bytesm3u8_docrL   r   r   r   _extra_manifest_infoH  sr   


zGenericIE._extra_manifest_infoc                    s.  ddi g } dD ]wtdd  dD tddd	}|s"qtfd
d}|r3t|d|i} fdd}|d|tfddtdd dttdd dt|dtt	t
d d|dt|dt|dddddd|dp{d d qd |tfd!dtfd"d|d#S )$Nitunesz*http://www.itunes.com/dtds/podcast-1.0.dtdz./channel/itemc                 s   s    | ]	}|j d V  qdS )r:   N)attribr   )r   er   r   r   r     s    z)GenericIE._extract_rss.<locals>.<genexpr>z./enclosurelinkFr   c                           djS )Nguidfindtextr   itr   r   <lambda>      z(GenericIE._extract_rss.<locals>.<lambda>force_videoidc                    s   t td|   d dS )Nz	./itunes:default)r+   r,   )r   )NS_MAPr   r   r   r     s   z&GenericIE._extract_rss.<locals>.itunesurl_transparentc                      r   )Nr6   r   r   r   r   r   r     r   rK   r   pubDaterL   z./itunes:imagehrefr6   episodeseasonr   r   )trueyesr   noexplicitr   )_typer:   r6   rK   r8   rL   rM   r   episode_numberseason_numberre   ra   c                      r   )Nz./channel/titler   r   docr   r   r     r   c                      r   )Nz./channel/descriptionr   r   r  r   r   r     r   )r  r4   r6   rK   entries)findallr   r+   r    r   appendr"   r   r&   r*   r,   r   r   lower)r   r:   video_idr  r  next_urlr   r   r   )r   r  r   r   _extract_rss  sB   



zGenericIE._extract_rssc                    s   | ds|S tj|tdd  }| |}|jd}d}|d d |  tt	|}d}t
t	|D ]}	|||	 7 }|	| | }
||
 ||	 ||	< ||
< q6d fdd|D |d |d   |d< tj|jd|d	S )
Nzfunction/0//    r`   r   r   c                 3   s    | ]} | V  qd S Nr   )r   indexhash_r   r   r     s    z.GenericIE._kvs_get_real_url.<locals>.<genexpr>)path)r   r   r   r   len_kvs_get_license_tokenr  splitlistrangereversedjoin
urlunparse_replace)cls	video_urllicense_codeparsedlicense_tokenurlpartsHASH_LENGTHindicesaccumsrcdestr   r  r   _kvs_get_real_url  s   

,zGenericIE._kvs_get_real_urlc                    s   |  dd} dd | D  |  dd}t|d }t|d |d  }t||d  }td	t||  d |d  } fd
dttt|D S )N$r   c                 S   s   g | ]}t |qS r   )int)r   charr   r   r   
<listcomp>  s    z4GenericIE._kvs_get_license_token.<locals>.<listcomp>01r   r      c                    s2   g | ]\}}t d D ]} ||  | d q
qS )r/  
   )r  )r   r  currentoffsetlicense_valuesr   r   r,    s    )replacer  r*  strabs	enumeratemap)r  
modlicensecenter	fronthalfbackhalfr   r3  r   r    s    
z GenericIE._kvs_get_license_tokenc              
   C   s"  | j d|d|td}| jd|ddd}| d|d	}|d
 }|dr/|d\}}	}	|| }ttt	dj
| }
g }|
D ]C}d|| vrIq@|| d|}|t|| || |d |ddt|pmt|| dd|ii |d dsd|d d< q@|d ||t|||dS )Nz*(?s:<script\b[^>]*>.*?var\s+flashvars\s*=)	flashvarstransform_sourcezw(?:<link href="https?://[^"]+/(.+?)/?" rel="canonical"\s*/?>|<link rel="canonical" href="https?://[^"]+/(.+?)/?"\s*/?>)r   Fr   z.<(?:h1|title)>(?:Video: )?(.+?)</(?:h1|title)>r6   preview_url//r  z^video_(?:url|alt_url\d*)$z
/get_file/_textr  r2   )r:   	format_idr5   r   Refererheightr   qualityr
  )r4   r   r6   rM   formats)_search_jsonr   _search_regex_html_search_regexr   	partitionr  filterr   compilematchkeysr   r  r(   r(  r   )r   r:   webpager
  r>  r   r6   rM   protocol_url_keysrI  r   rD  r   r   r   _extract_kvs  sJ   
zGenericIE._extract_kvsc              
   C   s  | dr| |  | S tj|}|js|| d}|d u r"d}|dv r`t	d|r8| 
d | d| S |dkr`|dkrYt	d	|rPtd
|ddd| 
d| d | d| S |dv rmt|dddd|vru|d7 }| || S |}t|i \}}d }|d}d|v r|d }|}n| |}| ddg}	d|	v rd }	z| j||td|dd|	d}
W nk ty' } z^t|jtr|jjdkr҂ |jj}|jdd u}|s|ddkrd| vr tt|d d!}|r| d"|  | jj|d#d$d% d&}| j t! s|d'7 }t| d(ddd }~ww |
j"}|t#|d) krH| $| |rCt%|d|i}| |S || &|t'|
j(d*d+}|
j(d,d-) }t	d.|}|r| *d/ td0|di}t+|,d1}t-|d d2pt.|
}i }|/d3s|d4kr| j0||d5|d6\}}n)|d7ks|d7kr| j1|||d6}n||||,d8d9krd:nd d;g}d|d<< |2|||pd d= | 3|| |S | d>d?s|s| d@d?}| 
dA|rdBndC  |
dD}| dEr | *dF | 0||d5\|dG< |dH< | 3|| |S t4|sA| 
dI t-|}|t5j6vr6dJ}|2d||dK |S | j7|
|||dL}dM|v rU| 8||}| 9| zzt:|}W n t;j<j=j>yt   t:|? }Y nw |j@dNkr| *dO | A|||W S |j@dPkr| B||\|dG< |dH< | *dQ |W S t	dR|j@r| C|||}| *dS |W S |j@dTkr| *dU | D| jE||||dV|W S t	dW|j@r| jF|tG|d d dXHd#d) |dY\|dG< |dH< |d8dZkrd[nd |d\< | 3|| | *d] |W S t	d^|j@r'| I||||dG< | *d_ |W S W n t;j<j=j>y5   Y nw |2| j&d-|d`da| jJ|d da| jK|d da| L|db | jdc tM| jN|||
|dd}tO|dekrrtP|d) |S |r~| jD|fi |S tQ|)fNrB  default_searchfixup_error)autoauto_warningrX  z[^\s/]+\.[^\s/]+/z7The url doesn't specify the protocol, trying with httpszhttps://rZ  z^(?:url|URL)$zInvalid URL:  zT . Call yt-dlp like this:  yt-dlp -v "https://www.youtube.com/watch?v=BaW_jenozKc"  T)expectedz$Falling back to youtube search for  z8 . Set --default-search "auto" to suppress this warning.z	ytsearch:)errorrX  z is not a valid URL:
to_genericr   rO   r   r   referer)r   rE  )r   rO   i  zcf-mitigated	challenges/   <title>Attention Required! | Cloudflare</title>z
set-cookie)__cf_bmdomainzClearing __cf_bm cookie for r  ra  )rb  r  r   z<Got HTTP Error 403 caused by Cloudflare anti-bot challenge; zssee  https://github.com/yt-dlp/yt-dlp#impersonation  for how to install the required impersonation dependency, and z6try again with  --extractor-args "generic:impersonate"r   zLast-Modified)r4   r6   r8   zContent-Typer   za(?P<type>audio|video|application(?=/(?:ogg$|(?:vnd\.apple\.|x-)?mpegurl)))/(?P<format_id>[^;\s]+)zdirect video linkrE  rD  )default_extmpegurlrF   r2   r   f4mtypeaudionone)rD  r:   r5   vcodecr7   )rI  	subtitlesr   testFforce_generic_extractorz %s generic information extractorForcingzFalling back onr   r   zM3U playlistrI  rk  z7URL could be a direct video link, returning it as such.unknown_video)r7   r:   r5   )r   z%<title>DPG Media Privacy Gate</title>rsszRSS feedSmoothStreamingMediazISM manifestz^(?:{[^}]+})?smil$z	SMIL filez{http://xspf.org/ns/0/}playlistzXSPF playlist)xspf_urlxspf_base_urlz(?i)^(?:{[^}]+})?MPD$)r   fragment)mpd_base_urlmpd_urldynamicrC   rD   zDASH manifestz-^{http://ns\.adobe\.com/f4m/[12]\.0}manifest$zF4M manifestrs   r   )r6   rK   rM   re   zLooking for embedsr   r<   r   )Rr   
url_resulthttp_schemer   r   r   scheme	get_paramr   rP  report_warningr   r#   r   _generic_idr   r   r   
isinstancecauser	   statusresponse
extensions
get_headerr   r   r   r   	cookiejarclearr   _impersonate_target_availabler
   r:   r   r   r   _generic_titler"   r   r	  r   r6  groupr   r'   endswith#_extract_m3u8_formats_and_subtitles_extract_f4m_formatsupdater   r   r-   ALLOWED_EXTENSIONSr   _download_webpagereport_extractionr   xmletreeElementTree
ParseErrorencodetagr   _parse_ism_formats_and_subtitles_parse_smilplaylist_result_parse_xspf _parse_mpd_formats_and_subtitlesr$   
rpartition_parse_f4m_formats_og_search_description_og_search_thumbnail_rta_searchr  _extract_embedsr  r   r   )r   r:   
parsed_urlrW  original_urlsmuggled_datar   is_intentionalr
  rO   full_responser   resalready_impersonatingcf_cookie_domainmsgr   r<   content_typemr   rD  r5   rk  rI  forcer   rR  r  rV   embedsr   r   r   _real_extract  sx  
























zGenericIE._real_extractrx  c          ,   	      s	  t |}t|ddp| |}t|i \}}|r|jn|}g }| jj D ]V}	|		 |
dg v r3q&|	| j||}
g }z		 |t|
 q? | jyc   | |	j dt||o[d | Y   S  ty|   | |	j dt| || Y q&w |r|S | j||td}|rt|
d	tr| d
 | |d	 dgS z| j||d|d}t|ddr| d |gW S W n	 ty   Y nw td|}|dur|d}t| j|d|tddpg }g i d}}}|D ]}|
d}|rt|tsqt j!"||}|
d}t|tr|# }t$|# }|dkr*| |t%	 g  S |dks4|dkrL| j&||ddd\}}|| | j'||d n#|dksV|dkro| j(||d d!d"dd#\}}|| | j'||d |s|||t)v rt*|p|nd d$|id% qt+d&t,| d' |D ];}| j|d|tddpi }t-|
d}|sq|.t/|d(pd)g t j!"|||
d*d$|id+ q|s|r| d, ||d-}|r| 0|| |gS | j1d.|d/d0dd1}|r| d2 |2d3d4 d5vr| 3d6| d7 | 4|||gS | j5||i d8}|
d9|dfvrW| d: |
d;dgt6j7R v}t8|rFd<nd=t9|d9 |d|d>d?|gS d@dA   fdBdC}|t:dD|}|rr| dE n|t:dF|}|r| dG |s|t:dH|}|r| dI |s|t:dJ|}|r| dK |s|t:dL|}|r| dM |st:dN|}|r| dO |s|t:dP|}|r| dQ |st:dR|} | dur|t:dS|}|r| dT |sAdU}!tdV|! |}|s |o|j;
dW}"|"r t|!|"}|rAt j!"|t<|d}#|#|kr?| =|# | |#gS d}|s_| j>dX|dd8}$|$r_|$|kr_| dY | |$gS |sdg S | j1dZ|d[dd8}%g }&t?|D ]}'|'@ Ad\}'t<|'}'|'Bd]d^}'t j!"||'}'t j!CtDjEF|'}t%G|'r|&| |'d_ qstDjEH|d4 }d`|i}(||%|da |db |(dc})tIG|'r|)Jd=tI	 |'dd |&|) qst$|'}|dekri | K|'||)})nq|dfkr| L|'|g  S |dkr| j(|'|d |(dg\|)d< |)dh< | 0|)|' nH|dkr/| j&|'||(di\|)d< |)dh< | 0|)|' n.|djkr?| jM|'||(di|)d< ntdk|'rY|'|krY| t9|'dlditN	 })n|'|)d9< |&|) qst|&dkrtO|&ddmD ]\}*}+|+
dadurdnP|+da |*|+da< qq|&S )oz$Returns an iterator of video entriesr   r4   	block_iesTz exclusive embedzdiscarding other embedsz embedr?  ra   zJW Player playlist
JWPlatformF)require_titlebase_urlrI  )r  .rI  zJW Player datazN(?s)\bvideojs\s*\(.+?([a-zA-Z0-9_$]+)\.src\s*\(\s*((?:\[.+?\]|{.+?}))\s*\)\s*;Nr   r   )r@  r   r&  rg  zvideo/youtubezapplication/dash+xmlmpddash)mpd_idr   )targetzapplication/x-mpegurlrF   r2   r   hls)entry_protocolm3u8_idr   rE  )r:   r5   r   z(?s)z4\.addRemoteTextTrack\(({.+?})\s*,\s*(?:true|false)\))languagesrclangundlabel)r:   r   r   zvideo.js embed)rI  rk  )zk<script\b[^>]+?\bsrc\s*=\s*(["\'])https?://(?:(?!\1)[^?#])+/kt_player\.js\?v=(?P<ver>\d+(?:\.\d+)+)\1[^>]*>zkt_player\s*\(\s*(["\'])(?:(?!\1)[\w\W])+\1\s*,\s*(["\'])https?://(?:(?!\2)[^?#])+/kt_player\.swf\?v=(?P<ver>\d+(?:\.\d+)+)\2\s*,z
KVS playerver)r  r   z
KVS Player.r   )456zUntested major version (z') in player engine - download may fail.r   r:   zJSON LDr5   rs   r   )r   r^  r_  )r  r:   c                 S   s<   t | rdS t| rdS tj| j}t|d }|dvS )NT)Nswfpngjpgsrtsbvsubvttttmljsr  )r   suitabler   r   r   r   r  r   )vurlvpathvextr   r   r   check_videod  s   


z.GenericIE._extract_embeds.<locals>.check_videoc                    s   t t | S r  )r  rN  )urlsr  r   r   filter_videom  s   z/GenericIE._extract_embeds.<locals>.filter_videoz+flashvars: [\'"](?:.*&)?file=(http[^\'"&]*)zJW Player in SFWObjectz(?sx)
                (?:
                    jw_plugins|
                    JWPlayerOptions|
                    jwplayer\s*\(\s*["'][^'"]+["']\s*\)\s*\.setup
                )
                .*?
                ['"]?file['"]?\s*:\s*["\'](.*?)["\']zJW Player embedz+[^A-Za-z0-9]?(?:file|source)=(http[^\'"&]*)z
video filezX[^A-Za-z0-9]?(?:file|video_url)["\']?:\s*["\'](http(?![^\'"]+\.[0-9]+[\'"])[^\'"]+)["\']zJW Player JS loaderz(?xs)
                flowplayer\("[^"]+",\s*
                    \{[^}]+?\}\s*,
                    \s*\{[^}]+? ["']?clip["']?\s*:\s*\{\s*
                        ["']?url["']?\s*:\s*["']([^"']+)["']
            zFlow Playerz0cinerama\.embedPlayer\(\s*\'[^']+\',\s*'([^']+)'zCinerama playerzI<meta (?:property|name)="twitter:player:stream" (?:content|value)="(.+?)"zTwitter cardz8<meta.*?property="og:video:type".*?content="video/(.*?)"z7<meta.*?property="og:(?:video|audio)".*?content="(.*?)"zOpen Graph video infoz%[0-9]{,2};\s*(?:URL|url)=\'?([^\'"]+)z\(?i)<meta\s+(?=(?:[a-z-]+="[^"]+"\s+)*http-equiv="refresh")(?:[a-z-]+="[^"]+"\s+)*?content="Refreshztwitter:playerztwitter:player iframez^(?:https?://)?([^/]*)/.*zvideo uploaderzunicode-escapez\/r  r{   r_  r6   re   )r4   rw   r6   re   r   )r  ie_keyr:   rV   xspf)r5   r   rk  re  rf  z(?i)\.(?:ism|smil)/manifestr^  )startz{} ({}))QtypesMappingProxyTyper   r~  r#   r:   r   _iesvaluesr  r   extract_from_webpager  r   StopExtractionr   IE_NAMEr  StopIterationextend_find_jwplayer_datar   r  r6  ry  _parse_jwplayer_datar   r   searchr  r)   _parse_jsonr   r   r(   r	  r   r   "_extract_mpd_formats_and_subtitles_merge_subtitlesr  r   r   finditerescaper   
setdefaultr   r   rK  r  r}  rV  _search_json_ldr   	manifestsr   r   r  r   r!   r   _html_search_metar   r  decoder5  unquoteosr  basenamer  splitextr   r  _extract_smil_info_extract_xspf_playlistr  r.   r8  r   ),r   r:   rR  r   r<   r
  r  
actual_urlr  iegencurrent_embedsjwplayer_datar   mobjvarnamesourcesrI  rk  r&  sourcesrc_typer5   fmtssubs	sub_matchr  sub_srcfoundjson_ld	is_directr  m_video_typeREDIRECT_REGEXrefresh_headerr   	embed_urldomain_namer  r  r   entry_info_dictr   r   r   r  r   r    s  
	












  




		
















zGenericIE._extract_embeds)r   N)__name__
__module____qualname__IE_DESC
_VALID_URLr  _NETRC_MACHINEr6  r*  _TESTSr   r   r   r  classmethodr(  staticmethodr  rV  r  r  r   r   r   r   r.   5   s   '2<MZdp{       #  -  7  C  N  X  e	
       
    !    +    9    F	    W    a    m    {     

      
      (      7      B	
      c	
       
7** `r.   );r  r   r  urllib.parser   xml.etree.ElementTreer  commonr   commonprotocolsr   youtuber   compatr   cookiesr   networking.exceptionsr	   networking.impersonater
   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%   r&   r'   r(   r)   r*   r+   r,   utils._utilsr-   r.   r   r   r   r   <module>   s    $