
    VGh                        d dl m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 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'  G d
 de      Z( G d de      Z)y)    )annotationsN   )InfoExtractor)YoutubeBaseInfoExtractor	YoutubeIE   )HEADRequest)	HTTPError)KNOWN_EXTENSIONSExtractorErrorbug_reports_message
clean_htmldict_getextract_attributesget_element_by_idint_or_nonejoin_nonempty
js_to_jsonmerge_dictsmimetype2ext
orderedSetparse_durationparse_qsstr_or_none
str_to_inttraverse_objtry_getunified_strdateunified_timestampurl_or_noneurlhandle_detect_extvariadicc                     e Zd ZdZdZdZdddddd	d
dd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,d-d'd.d/d0d1d-d2d3dd4dd5d6d7d8d9d8d:gd;d<d=d>d?	dd@dAdBdCd9dDdEdFdGdHdIdCd:gd=dJdKdLdMddNdOdPdQdRdSdTdUdVdWdXdYdRdZd[d\d]d^dTdUd_d`dadbdcdddedfgdgdhdidjddkdldmdkdndodpdqddrdsdsdtdudodvdwddxdydzdyd{dogd|d}d~dRdd:gdddddddddddddgZed        Zd Z	y)ArchiveOrgIEzarchive.orgzarchive.org video and audiozKhttps?://(?:www\.)?archive\.org/(?:details|embed)/(?P<id>[^?#]+)(?:[?].*)?$zMhttp://archive.org/details/XD300-23_68HighlightsAResearchCntAugHumanIntellect 8af1d4cf447933ed3c7f4871162602dbz2XD300-23_68HighlightsAResearchCntAugHumanIntellectogvz01968 Demo - FJCC Conference Presentation Reel #1z$md5:da45c349df039f1cc8075268eb1b5c2519681210iK20100315zSRI Internationalzlaura@archive.orgz(re:https://archive\.org/download/.*\.jpgz6XD300-23_68HighlightsAResearchCntAugHumanIntellect.cdrz2XD300-23 68HighlightsAResearchCntAugHumanIntellect)idexttitledescriptionrelease_date	timestampupload_datecreatorsuploader	thumbnail
display_idtrack)urlmd5	info_dictz$https://archive.org/details/Cops1922 0869000b4ce265e8ca62738b336b268aCops1922mp4zBuster Keaton's "Cops" (1922)z$md5:cd6f9910c35aedd5fc237dbc3957e2cazyorkmba99@hotmail.comiR20131222zCops-v2.mp4gp=
@)
r)   r*   r+   r,   r1   r.   r/   r3   r2   durationzKhttp://archive.org/embed/XD300-23_68HighlightsAResearchCntAugHumanIntellectTr5   only_matchingz(https://archive.org/details/Election_Ads eec5cddebd4793c6a653b69c3b11f2e6z;Election_Ads/Commercial-JFK1960ElectionAdCampaignJingle.mpgz.Commercial-JFK1960ElectionAdCampaignJingle.mpgmpgg(\M@)r)   r+   r*   r2   r<   r3   zYhttps://archive.org/details/Election_Ads/Commercial-Nixon1960ElectionAdToughonDefense.mpg ea1eed8234e7d4165f38c8c769edef38z=Election_Ads/Commercial-Nixon1960ElectionAdToughonDefense.mpgz0Commercial-Nixon1960ElectionAdToughonDefense.mpgiMGzmikedavisstripmaster@yahoo.comzO1960 Presidential Campaign Election Commercials John F Kennedy, Richard M Nixon20080315gzGM@z1http://creativecommons.org/licenses/publicdomain/)r)   r+   r*   r.   r1   r,   r/   r3   r<   licenser2   zGhttps://archive.org/details/gd1977-05-08.shure57.stevenson.29303.flac16 7d07ffb42aba6537c28e053efa4b54c9zCgd1977-05-08.shure57.stevenson.29303.flac16/gd1977-05-08d01t01.flacTurningflaczGrateful Deadzgd1977-05-08d01t01.flacr   z-1977-05-08 - Barton Hall - Cornell UniversitygfffffC@)	r)   r+   r*   r4   r0   r3   track_numberalbumr<   z_https://archive.org/details/gd1977-05-08.shure57.stevenson.29303.flac16/gd1977-05-08d01t07.flac a07cd8c6ab4ee1560f8a0021717130f3zCgd1977-05-08.shure57.stevenson.29303.flac16/gd1977-05-08d01t07.flacDealiȁGzmvernon54@yahoo.comz$md5:6c921464414814720c6593810a5c7e3d20080319z Barton Hall - Cornell Universityg{Gj{@19770508zgd1977-05-08d01t07.flac   )r)   r+   r*   r.   r1   r,   r/   locationr<   r4   r0   rH   r-   r3   rG   z]https://archive.org/details/lp_the-music-of-russia_various-artists-a-askaryan-alexander-melik 7cb019baa9b332e82ea7c10403acd180zblp_the-music-of-russia_various-artists-a-askaryan-alexander-melik/disc1/01.01. Bells Of Rostov.mp3zBells Of Rostovmp3)r)   r+   r*   
restricted)r5   r6   r7   skipzhttps://archive.org/details/lp_the-music-of-russia_various-artists-a-askaryan-alexander-melik/disc1/02.02.+Song+And+Chorus+In+The+Polovetsian+Camp+From+%22Prince+Igor%22+(Act+2%2C+Scene+1).mp3 1d0aabe03edca83ca58d9ed3b493a3c3zlp_the-music-of-russia_various-artists-a-askaryan-alexander-melik/disc1/02.02. Song And Chorus In The Polovetsian Camp From "Prince Igor" (Act 2, Scene 1).mp3zKSong And Chorus In The Polovetsian Camp From "Prince Igor" (Act 2, Scene 1)i{&]z%associate-joygen-odiongan@archive.orgz$md5:012b2d668ae753be36896f343d12a23620190928)r)   r+   r*   r.   r1   r,   r/   z7https://archive.org/details/irelandthemakingofarepublicirelandthemakingofarepublicz!Ireland: The Making of a Republic20160610z$md5:f70956a156645a658a0dc9513d9e78b7zdimitrios@archive.orgz British Broadcasting CorporationzTime-Life FilmsiC4[W)r)   r+   r/   r,   r1   r0   r.    0b211261b26590d49df968f71b90690dzCirelandthemakingofarepublic/irelandthemakingofarepublicreel1_01.movz'irelandthemakingofarepublicreel1_01.movgQN`@zhttps://archive.org/download/irelandthemakingofarepublic/irelandthemakingofarepublic.thumbs/irelandthemakingofarepublicreel1_01_000117.jpg)r)   r*   r+   r<   r2   r3   )r6   r7    67335ee3b23a0da930841981c1e79b02zCirelandthemakingofarepublic/irelandthemakingofarepublicreel1_02.movgQ̕@z'irelandthemakingofarepublicreel1_02.movzhttps://archive.org/download/irelandthemakingofarepublic/irelandthemakingofarepublic.thumbs/irelandthemakingofarepublicreel1_02_001374.jpg)r)   r*   r<   r+   r3   r2    e470e86787893603f4a341a16c281eb5z@irelandthemakingofarepublic/irelandthemakingofarepublicreel2.movgHz
@z$irelandthemakingofarepublicreel2.movzhttps://archive.org/download/irelandthemakingofarepublic/irelandthemakingofarepublic.thumbs/irelandthemakingofarepublicreel2_001554.jpg)r)   r*   r<   r+   r2   r3   )r5   r7   playlistzOhttps://archive.org/details/gd95-04-02.sbd.11622.sbeok.shnf/gd95-04-02d1t04.shnz3gd95-04-02.sbd.11622.sbeok.shnf/gd95-04-02d1t04.shnz3Stuck Inside of Mobile with the Memphis Blues Againg)\$u@z$md5:764348a470b986f1217ffd38d6ac7b72zgd95-04-02d1t04.shnzPyramid Arenazjon@archive.orgz1995-04-02 - Pyramid Arena20040519   19950402i@)r)   r*   r+   r0   r<   r4   r,   r3   rN   r1   rH   r/   rG   r-   r.   r5   r7   c                v    t        j                  d|       d   }t        j                  t	        |      d         S )Na   (?xs)
            <input
            (?:\s+[a-zA-Z0-9:._-]+(?:=[a-zA-Z0-9:._-]*|="[^"]*"|='[^']*'|))*?
            \s+class=['"]?js-play8-playlist['"]?
            (?:\s+[a-zA-Z0-9:._-]+(?:=[a-zA-Z0-9:._-]*|="[^"]*"|='[^']*'|))*?
            \s*/>
        r   value)refindalljsonloadsr   )webpageelements     d/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/archiveorg.py_playlist_datazArchiveOrgIE._playlist_data   s@    **    zz,W5g>??    c                   t         j                  j                  | j                  |            }|j	                  d      \  }}}| j                  d| |      }| j                  |      }i }|D ]~  }	|r	|	d   |k7  rg g |	j                  d      |	j                  d      i d||	d   <   |	j                  dg       D ]0  }
|
d   d	k7  rd
d|
d   j                  d      z   i||	d      |
d   <   2  | j                  d|z   |      }|d   }|d   }||d   t        |j                  d            t        |ddg      t        |dt        hd hf      |j                  d      t        |j                  d            t        t        |ddg            d| |j                  d      t!        |j                  d            d}|d   D ]  }|d   |v rt#        ||d      |dz   |d   z   |j                  d      xs |d   |d   t        |j                  d            t        |dt        hd  hf      t%        |j                  d!            t!        |j                  d"            |j                  d#      t!        |j                  d$            t!        |j                  d            d%
      ||d   <   ||d      }nt        |d&t&        '      |v r	||d&      }n|j                  d(      d)k(  rq|d*   j)                  |d   d+|z   dz   |d   z   t!        |j                  d,            t!        |j                  d,            t!        |j                  d-            d.       |d   j+                  d/      \  }}}|sd }t-        | j/                  d0      j                  d1            }|t0        v s|j                  d2      r|s|d3   j)                  d+|z   dz   t         j                  j3                  |d         z   |j                  d(      t!        |j                  d,            t!        |j                  d4            t!        |j                  d-            d5|j                  d6      d&k(  rd7nd8|j                  d6      d9        |j5                         D ]  }d:|d;<   	 t7        |      d<k(  r>t9        t;        |j5                                     }|rt#        ||      }n.t#        ||      }n!d=|d><   t=        |j5                               |d?<   |j                  d@      rlg |dA<   |d@   D ]_  }|dA   j)                  |j                  dB      |j                  dC      t?        dDdE|dFG      t        |j                  dH            dIdJ       a |S )KN/zhttps://archive.org/embed/origartistr+   )formats
thumbnailsrm   r4   	subtitlestrackskindrp   r5   zhttps://archive.org/filelabelzhttp://archive.org/metadata/metadata
identifierr,   r1   addercreatorc                &    | d   xr t        |       S Nr   listxs    rg   <lambda>z,ArchiveOrgIE._real_extract.<locals>.<lambda>  s    1Q4K[TXYZT[ ri   
licenseurldate
publicdate	addeddatezhttps://archive.org/details/venueyear)r)   r+   r,   r1   r0   rC   r-   r.   webpage_urlrN   release_yearfilesnamec                &    | d   xr t        |       S rz   r{   r}   s    rg   r   z,ArchiveOrgIE._real_extract.<locals>.<lambda>)  s    STUVSWSc\`ab\c ri   lengthr4   rH   disc)
r)   r+   r3   r,   r0   r<   rG   rH   
discnumberr   original)expected_typeformat	Thumbnailro   zhttps://archive.org/download/widthsize)r)   r5   r   heightfilesize.zhttps://archive.orgzlogged-in-sigprivatern   r   httpssourcer   )r5   r   r   r   r   protocolsource_preferenceformat_note)r   _format_sort_fieldsr   rZ   _typeentriesreviewscomments	review_idreviewerreviewtitle
reviewbodyz

)	from_dictdelim
createdateroot)r)   authortextr.   parent) urllibparseunquote_plus	_match_id	partition_download_webpagerh   getlstrip_download_jsonr   r   r   r"   r   r   r   r   r   strappend
rpartitionbool_get_cookiesr   quotevalueslennextiterr|   r   )selfr5   video_idrv   _entry_id
embed_pagerZ   r   pr4   ru   minfofentryhas_ext	extensionis_logged_in
only_videoreviews                        rg   _real_extractzArchiveOrgIE._real_extract   s   <<,,T^^C-@A"*"4"4S"9
Ax ++.H,UWab
&&z2 	A AfI1  %%/w"GAfI x, =K/1E&M4H4H4MM6&	"5>2	* &&'E
'RT^_Z |_
 wZ%aeeM&:; Z$9:$QXJA[@\(]^uu\*+AEE&M:*8Ak7R+ST9*Fg'f68 '" -	AyG#%061C$s*QvY6UU7^8qy"#F)#-aeeM.B#C ,QXJIcHd0e f .quuX ?$/g$?UU7^"-aeeFm"<$/f$>
F@ 
&A&	"  &	*a3?7J*.uuX+-l#**F):ZG#MPQRXPYY(w8)!%%.9 +AEE&M :,< = %&fI$8$8$=!Aw	 	
   1 12G H L L_ ]^L,,aeeI6F,i '':ZG#MPVP\P\PbPbcdekclPmmeeHo(w8)!%%/: +AEE&M : './eeHo.KQS#$55?	) 	I-	^ ^^% 	8E+7E'(	8 w<1d7>>#345J":t4"44 'DM"7>>#34DO<<	"!D"9- 'Z '' **[1$jj4)-QW_ef!26::l3K!L$)& '' ri   N)
__name__
__module____qualname__IE_NAMEIE_DESC
_VALID_URL_TESTSstaticmethodrh   r    ri   rg   r$   r$   '   s   G+G_J^1FGA&#%,-+DRI
& 615A/#%'D
  ] :1OEDJ
 k1QG#8l%LJD
" Y1W()3D

 q1W#-A%:()D&3
, o1v&

 
 R1 sb#?A%
  I/8%A/;=NO#
 :_ F & "n"K
 :_  'F"K "n
 :\  'C "k"H
+ 
-^ aGJ()JA/')1%&#
KyFv 	@ 	@xri   r$   c                     e Zd ZdZdZ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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/d0d1dd/d2dd3d4d)d5d6d7d8d9d:d;d<d=dd>dd?d@ddAdBdCdDdEdFdGdHddId2ddJdKddLdMdCdNdOdFdGdHddId2dPgdQdRdSd)dTdUddVdWddXdYdZd[d\d]dd^d_
dd`daddbdcdddedfdgdhdhdiddjddkdld)dmdndodpdpddqdrds
ddtdud)dvdwdxdydwddzd{d|
dd}d~dddpdpdqddddd
dddddddddddd	dddddddddddddddddddddddddddddddddddddddddd
ddddddddddddd
ddddddddddddddddddddddddddddgZej                  Zdej                   dZ	dgZ
 eg e
dÑdD  cg c]"  }g t        dū      dƑD ]  }| |xs dǛ dȝ $ c}}}}       ZdZdZdZddd̈́Zd΄ Zdτ ZdЄ Zdф Zd҄ Zyc c}}}} w )YoutubeWebArchiveIEzweb.archive:youtubez9web.archive.org saved youtube videos, "ytarchive:" prefixaE  (?x)(?:(?P<prefix>ytarchive:)|
            (?:https?://)?web\.archive\.org/
            (?:web/)?(?:(?P<date>[0-9]{14})?[0-9A-Za-z_*]*/)?  # /web and the version index is optional
            (?:https?(?::|%3[Aa])//)?(?:
                (?:\w+\.)?youtube\.com(?::(?:80|443))?/watch(?:\.php)?(?:\?|%3[fF])(?:[^\#]+(?:&|%26))?v(?:=|%3[dD])  # Youtube URL
                |(?:wayback-fakeurl\.archive\.org/yt/)  # Or the internal fake url
            )
        )(?P<id>[0-9A-Za-z_-]{11})
        (?(prefix)
            (?::(?P<date2>[0-9]{14}))?$|
            (?:%26|[#&]|$)
        )zVhttps://web.archive.org/web/20150415002341/https://www.youtube.com/watch?v=aYAGB11YrSsaYAGB11YrSswebmzTeam Fortress 2 - Sandviches!z$md5:4984c0f9a07f349fc5d8e82ab7af4eaf20110926ZeurelzUCukCyHaD-bK3in_pKpfH9Eg    z#https://www.youtube.com/user/Zeurelzre:https?://.*\.(jpg|webp)z8https://www.youtube.com/channel/UCukCyHaD-bK3in_pKpfH9Eg)r)   r*   r+   r,   r/   r1   
channel_idr<   uploader_iduploader_urlr2   channel_urlr^   zQhttps://web.archive.org/web/2oe/http://wayback-fakeurl.archive.org/yt/97t7Xj_iBv097t7Xj_iBv0r:   z!Why Machines That Bend Are Betterz$md5:00404df2c632d16a674ff8df1ecfbb6c20190312
VeritasiumzUCHnyfMqiRRG1u-2MsSQLbXAi  1veritasiumz(https://www.youtube.com/user/1veritasiumz8https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXAzahttps://web.archive.org/web/20120712231619/http://www.youtube.com/watch?v=AkhihxRKcrs&gl=US&hl=enAkhihxRKcrsz6Limited Run: Mondo's Modern Classic 1 of 3 (SDCC 2012)20120712i  z$md5:ff4de6a7980cb65d951c2f6966a4f2f3	machinimaz&https://www.youtube.com/user/machinima)
r)   r*   r+   r/   r<   r,   r   r   r2   r1   zUhttps://web.archive.org/web/20081211103536/http://www.youtube.com/watch?v=jNQXAC9IVRwjNQXAC9IVRwflvzMe at the zoo20050423UC4QobU6STFB0P71PMvOGN5A   z$md5:10436b12e07ac43ff8df65287a56efb4jawedz"https://www.youtube.com/user/jawedz8https://www.youtube.com/channel/UC4QobU6STFB0P71PMvOGN5A)r)   r*   r+   r/   r   r<   r,   r   r   r   r2   r1   zUhttps://web.archive.org/web/20110712231407/http://www.youtube.com/watch?v=lTx3G6h2xyAlTx3G6h2xyAz"Madeon - Pop Culture (live mashup)20110711MadeonUCqMDNf3Pn5L7pcNkuSEeO3w   z$md5:f7535343b6eda34a314eff8b85444680	itsmadeonz&https://www.youtube.com/user/itsmadeonz8https://www.youtube.com/channel/UCqMDNf3Pn5L7pcNkuSEeO3w)r)   r*   r+   r/   r1   r   r<   r,   r   r   r   r2   zChttps://web.archive.org/https://www.youtube.com/watch?v=1JYutPM8O6E1JYutPM8O6Ez3Fake Teen Doctor Strikes AGAIN! - Weekly Weird News20160218UCdIaNUarhzLSXGoItz7BHVAi  z$md5:21032bae736421e89c2edf36d1936947MachinimaETCz)https://www.youtube.com/user/MachinimaETCz8https://www.youtube.com/channel/UCdIaNUarhzLSXGoItz7BHVAzETC NewszVhttps://web.archive.org/web/20180803221945/https://www.youtube.com/watch?v=6FPhZJGvf4E6FPhZJGvf4Ez1WTF: Video Games Still Launch BROKEN?! - T.U.G.S.20160219i  z$md5:a1dbf12d9a3bd7cb4c5e33b27d77ffe7z=unable to download capture webpage \(it may not be archived\))r5   r7   expected_warningszPhttp://web.archive.org/web/20070302011044/http://youtube.com/watch?v=-06-KB9XTzgz-06-KB9XTzgzNew Coin Hack!! 100% Safe!!)r)   r*   r+   z;web.archive.org/https://www.youtube.com/watch?v=dWW7qP423y8dWW7qP423y8zIt's Bootleg AirPods Time.20211021UC7Jwj9fkrf1adN4fMmTkpugz8https://www.youtube.com/channel/UC7Jwj9fkrf1adN4fMmTkpugi*  z$md5:7b567f898d8237b256f36c1a07d6d7bcDankPods)
r)   r*   r+   r/   r   r   r<   r,   r2   r1   zXhttps://web.archive.org/web/20200827003909if_/http://www.youtube.com/watch?v=6Dh-RL__uN4z6Dh-RL__uN4zbitch lasagna20181005zUC-lHJZR3Gqxm24_Vd_AJ5Ywz8https://www.youtube.com/channel/UC-lHJZR3Gqxm24_Vd_AJ5Yw   z$md5:2dbe4051feeff2dab5f41f82bb6d11d0	PewDiePiez&https://www.youtube.com/user/PewDiePie)r)   r*   r+   r/   r   r   r<   r,   r1   r   r   r2   zIhttps://web.archive.org/web/0/https://www.youtube.com/watch?v=8XeW5ilk-9Yz8XeW5ilk-9Yz(Story of Stuff, The Critique Part 4 of 4i  z$md5:28157da06f2c5e94c97f7f3072509972HowTheWorldWorksz-https://www.youtube.com/user/HowTheWorldWorks20090520)
r)   r*   r+   r<   r,   r1   r   r2   r   r/   zUhttps://web.archive.org/web/20110126141719/http://www.youtube.com/watch?v=Q_yjX80U7YcQ_yjX80U7Ycz5Spray Paint Art by Clay Butler: Purple Fantasy Forestclaybutlermusicz$md5:4595264559e3d0a0ceb3f011f633454320090803   z,https://www.youtube.com/user/claybutlermusic)
r)   r*   r+   r   r,   r/   r1   r2   r<   r   zIhttps://web.archive.org/web/0/https://www.youtube.com/watch?v=c5uJgG05xUYc5uJgG05xUYz(Story of Stuff, The Critique Part 1 of 420090513z$md5:4ca77d79538064e41e4cc464e93f44f0i  )
r)   r*   r+   r   r1   r   r/   r,   r2   r<   zUhttps://web.archive.org/web/20120607174520/http://www.youtube.com/watch?v=xWTLLl-dQaAzxWTLLl-dQaAz,Black Nerd eHarmony Video Bio Parody (SPOOF)z,https://www.youtube.com/user/BlackNerdComedyz$md5:e25f0133aaf9e6793fb81c18021d193eBlackNerdComedy   )	r)   r*   r+   r   r,   r   r1   r<   r2   zIhttps://web.archive.org/web/*/https://www.youtube.com/watch?v=9eO1aasHyTM9eO1aasHyTMz	Polar-oidz Cameras and bears are dangerous!z&https://www.youtube.com/user/punkybird	punkybird   UC62R2cBezNBOqxSerfb1nMQz8https://www.youtube.com/channel/UC62R2cBezNBOqxSerfb1nMQ20060428)r)   r*   r+   r,   r   r   r<   r   r   r/   r1   zbhttps://web.archive.org/web/20200416034815/https://www.youtube.com/watch?v=Cf7vS8jc7dY&gl=US&hl=enCf7vS8jc7dYzDA Dramatic Pool Story (by Jamie Spicer-Lewis) - Game Grumps Animated@   20200408
GameGrumpsz8https://www.youtube.com/channel/UC9CuvdOVfMPvKCiwdGKL3cQUC9CuvdOVfMPvKCiwdGKL3cQz$md5:c625bb3c02c4f5fb4205971e468fa341z'https://www.youtube.com/user/GameGrumps)r)   r*   r+   r<   r/   r   r1   r   r   r2   r,   r   z$ytarchive:kbh4T_b4Ixw:20160307085057kbh4T_b4IxwzXShovel Knight OST - Strike the Earth! Plains of Passage 16 bit SNES style remake / remixz8https://www.youtube.com/channel/UCnTaGvsHmMy792DWeT6HbGAzNelward music   z$md5:804b4a9ce37b050a5fefdbb23aeba54d20150503UCnTaGvsHmMy792DWeT6HbGA)
r)   r*   r+   r   r1   r<   r,   r2   r/   r   zIhttps://web.archive.org/web/0/https://www.youtube.com/watch?v=SOm7mPoPskUSOm7mPoPskUz Boyfriend - Justin Bieber Parodyz.https://www.youtube.com/user/thecomputernerd01thecomputernerd01z$md5:dd7fa635519c2a5b4d566beaecad7491   20120407)
r)   r*   r+   r   r1   r2   r,   r<   r/   r   zFhttps://web.archive.org/web/http://www.youtube.com/watch?v=kH-G_aIBlFwTr=   zXhttps://web.archive.org/web/20050214000000_if/http://www.youtube.com/watch?v=0altSZ96U4Mzchttps://web.archive.org/web/20210530071008/https://www.youtube.com/watch?v=lHJTf93HL1s&spfreload=10zohttps://web.archive.org/web/20120712231619/http%3A//www.youtube.com/watch%3Fgl%3DUS%26v%3DAkhihxRKcrs%26hl%3Denzohttps://web.archive.org/web/20120712231619/http%3A//www.youtube.com/watch%3Fv%3DAkhihxRKcrs%26gl%3DUS%26hl%3Denznhttps://web.archive.org/web/20060527081937/http://www.youtube.com:80/watch.php?v=ELTFsLT73fA&amp;search=soccerzEhttps://web.archive.org/http://www.youtube.com:80/watch?v=-05VVye-ffgz$ytarchive:BaW_jenozKc:20050214000000zytarchive:BaW_jenozKczq(?x:
        (?:window\s*\[\s*["\']ytInitialPlayerResponse["\']\s*\]|ytInitialPlayerResponse)\s*=[(\s]*|
        z
    )zi.ytimg.comzimg.youtube.com)is   	    z
.ytimg.comz"https://web.archive.org/web/%sif_/l   Hl   @kyJNc           	     |   |ddddg|xs g z   |xs g d|xs i }| j                  d||xs d||      }t        |t              r7t        |      d	k\  r)|d
d  D 	cg c]  }	t	        t        |d   |	             c}	S t        |t              rt        |      dk7  r| j                  dt               z          y y c c}	w )Nrc   z"original,mimetype,length,timestampi  zstatuscode:200)r5   outputfllimitfiltercollapsez&https://web.archive.org/cdx/search/cdxzDownloading CDX API JSON)queryfatalr   r   r   z$Error while parsing CDX API response)r   
isinstancer|   r   dictzipreport_warningr   )
r   item_idr5   filtersr,  r-  noter.  resvs
             rg   _call_cdx_apiz!YoutubeWebArchiveIE._call_cdx_api  s     6'(GMr: B
 {
 !!4g..e5 " J c4 SX]25ab':QDSVQ(::C&#c(a- FI\I^ ^_ +8 ;s   B9c                R    | j                  |d      }| j                  d|dd      S )Nr&  defaultz/(?:YouTube\s*-\s*(.*)$)|(?:(.*)\s*-\s*YouTube$)r+   )_html_extract_title_html_search_regex)r   re   
page_titles      rg   _extract_webpage_titlez*YoutubeWebArchiveIE._extract_webpage_title  s9    --gr-B
&&> ' - 	-ri   c                    r fdnd } j                   j                  d|i       } j                   j                  d|i       }i }t        j                  d      D ]0  }|j                   j                  ||ddt        d	
      xs i        2  j                  dd|d       xs |j                  d      xs i } j                  dd|i       }	|	rt        |d      s|	|d<   |s" j                  t        |d      xs d|d      }t        |dt        di       }
t        |dt        di       }t        |dt        di       }|j                  d      xs[ t        j                  |d      xsC t        j                  |
d      xs+ t        |d      xs  j                        xs
  |g d      } fd}d} j                  d| dd | gd!d       }t        |j                  d"            } ||d#      xs  ||d#      xs |j                  d$      }|rd%| nd } j                  g d&d'd       xsc  j!                  d(d)gt#        d*      d'd       xs@  j!                  d+t#        d,      d'd       xs t        |d-      xs |j                  d.      }t%        |j                  d/      xsW |j                  d0      xsD  |d/      xs:  j                  d1d2d d34      xs"  ||d5      xs  ||d5      xs t        |d6            }|rd7| nd }t'        |j                  d8      xs4 |j                  d8      xs! t        |d9d:      xs t)         |d;                  }|j                  d<      xs9 t        j                  |d=      xs! t+        t#        d>            xs
  |g d?      }t-        t/        |d@      xs#  |dAdBg      xs  j                  g dCdDd             }|||||||||dE	S )FNc                ,    j                  | d       S )Nr:  )_html_search_meta)r~   r   re   s    rg   r   z7YoutubeWebArchiveIE._extract_metadata.<locals>.<lambda>  s    $"8"8GT"8"R ri   c                     y )Nr   r}   s    rg   r   z7YoutubeWebArchiveIE._extract_metadata.<locals>.<lambda>  s    ri   zinitial player responser:  zinitial dataz2yt\.setConfig\(\s*(?P<json>{\s*(?s:.+?)\s*})\s*\);FTr&  )r.  ignore_extratransform_sourceerrnotez3(?:yt\.playerConfig|ytplayer\.config|swfConfig)\s*=zplayer configPLAYER_CONFIGzswfArgs\s*=z
swf config)argsrH  )rH  player_responsez{}r.  )contentstwoColumnWatchNextResultsresultsrM  rK  .videoPrimaryInfoRenderer)r   get_allr;  videoDetails)microformatplayerMicroformatRendererr+   )rH  r+   )zog:titleztwitter:titler+   c                D    j                  d| d| xs d| dd       S )Nz(?:z)/([^/#&?]+)r&  z idr:  )_search_regex)r5   type_r   s     rg   id_from_urlz:YoutubeWebArchiveIE._extract_metadata.<locals>.id_from_url  s9    %%ug\*CI2%}d & T Tri   zFhref="[^"]*(?P<url>https?://www\.youtube\.com/(?:user|channel)/[^"]+)"z;<(?:link\s*itemprop=\"url\"|a\s*id=\"watch-username\").*?\b>zP<div\s*id=\"(?:watch-channel-stats|watch-headline-user-info)\"[^>]*>\s*<a[^>]*\bzuploader or channel urlownerProfileUrluserVIDEO_USERNAMEzhttps://www.youtube.com/user/)z9<a\s*id="watch-username"[^>]*>\s*<strong>([^<]+)</strong>z$var\s*watchUsername\s*=\s*\'(.+?)\';zA<div\s*\bid=\"watch-channel-stats"[^>]*>\s*<a[^>]*>\s*(.+?)\s*</az2<a\s*id="watch-userbanner"[^>]*title="\s*(.+?)\s*"r1   z=(?s)<div\s*class="yt-user-info".*?<a[^>]*[^>]*>\s*(.*?)\s*</az+(?s)<a[^>]*yt-user-name[^>]*>\s*(.*?)\s*</azwatch7-user-headerz6<button\s*href="/user/[^>]*>\s*<span[^>]*>\s*(.+?)\s*<zwatch-headline-user-info)rH  rx   r   	channelIdexternalChannelIdz6data-channel-external-id=(["\'])(?P<id>(?:(?!\1).)+)\1z
channel idr)   )r;  groupchannel)rH  ucidz https://www.youtube.com/channel/lengthSeconds)rH  )length_secondsl)rO  r<   shortDescriptionr,   zeow-description)r,   zog:descriptionztwitter:description)
uploadDatepublishDaterd  datePublished)z&(?s)id="eow-date.*?>\s*(.*?)\s*</span>z(?:id="watch-uploader-info".*?>.*?|["\']simpleText["\']\s*:\s*["\'])(?:Published|Uploaded|Streamed live|Started) on (.+?)[<"\']zSclass\s*=\s*"(?:watch-video-date|watch-video-added post-date)"[^>]*>\s*([^<]+?)\s*<zupload date)	r+   r,   r/   r1   r   r   r<   r   r   )_search_json_YT_INITIAL_PLAYER_RESPONSE_RE_YT_INITIAL_DATA_REra   rb   update_parse_jsonr   r   r   r0  r   	_get_textr?  rT  r    r=  r   r   r   r   r   r   r   )r   r   re   search_metarI  initial_dataytcfgjplayer_configswf_argsinitial_data_videovideo_detailsmicroformatsvideo_titlerV  _CHANNEL_URL_HREF_REuploader_or_channel_urlowner_profile_urlr   r   r1   r   r   r<   r,   r/   s   ` `                       rg   _extract_metadataz%YoutubeWebArchiveIE._extract_metadata  sb   W^Res++//:Sb , " (($$g~xQS ) U QSZ[ 	GALL))!XUQUhr|~)  F  DF  G	G
 F(D  B 0 yy)0 .0	 	 $$^WlH^`$aL	B$,M&!"..],GHPDRZbg / iO *  Gr; %^4XZ\ $IY]glvxz g& C'11,HC'112DgNC M+<=C **73	C
 AB 		T
  i"&"4"4KL`Kaabc`au`vwy. #5 #>
 ((8(89J(KL )62 +2F;+yy)* 	 IT6{mDY] H T  3 + &&Q?A!"6@*VZ ' \+ &&I!"<gF
\` ' b+ M+>?+   * 	" !k* = 34=;'= !!It4 " A= ,i8= 2I>= M+;<	>
 JT8EY]o. 707M+LV[\7 k*56	8 01 U'11,NU+,=wGHU ST	 	 &\#@A 6L/:;6!!i 	 " 67 !&& $& (&

 
	
ri   c           
     ~    d j                  d      v }|r j                  n j                  D cg c](  }|rdndD ]  }dj                  |dk(  rdnd||	       * }}}g }|D ]=  } j	                  ||d
gdgddi      }|s |j                   fd|D               |r= n  j                  |       |S c c}}w )Nro   	check_all)jpgwebp)r}  z#http://{server}/vi{webp}/{video_id}r~  _webpr&  )r~  r   serverzmimetype:image/(?:webp|jpeg)urlkey	matchTypeprefixr4  r,  r-  c              3    K   | ]  }j                   t        |j                  d             xs j                  z  |j                  d      z   t        |j                  d            t        |j                  d            d  yw)r.   r   r   )r5   r   
preferenceN)_WAYBACK_BASE_URLr   r   _OLDEST_CAPTURE_DATE).0thumbnail_dictr   s     rg   	<genexpr>z:YoutubeWebArchiveIE._extract_thumbnails.<locals>.<genexpr>j  s      2
 % !22k.BTBTU`Ba6b6fjff  A  ES  EW  EW  Xb  Ec  c +N,>,>x,H I"-n.@.@.J"K2s   BB)_configuration_arg_YT_ALL_THUMB_SERVERS_YT_DEFAULT_THUMB_SERVERSr   r8  extend_remove_duplicate_formats)	r   r   try_allr  r*   thumbnail_base_urlsro   r5   responses	   `        rg   _extract_thumbnailsz'YoutubeWebArchiveIE._extract_thumbnails]  s$   $"9"9+"FF :A455dFdFd]  FM  sB  S[]jm  EKK6MrHV  L  U ]  U ] ] 
& 	C))#(F'G"K+B * DH  2
 )12 2 	 	&&z2+]s   -B9c                   g }| j                  |d| dgddgddi      xs g }t        d |D              }|D cg c]
  }|d	k\  s	| }}|r|j                  |d
          |j                  |       |r|j                  |d
          d| j                  d      v r|j	                  ||z          |j	                  | j
                  | j                  g       t        t        d |            S c c}w )Nz https://www.youtube.com/watch?v=zmimetype:text/htmlztimestamp:6digestr  r  r  c              3  V   K   | ]!  }t        |d          t        |d           # yw)r.   N)r   )r  rs     rg   r  z9YoutubeWebArchiveIE._get_capture_dates.<locals>.<genexpr>|  s*     wa{[\]h[iOjOvk!K.9ws   ))l   @y6/}Ir   capturesr|  )	r8  sortedr   r  r  r  _NEWEST_CAPTURE_DATEr   r+  )r   r   url_datecapture_datesr  all_capturesr~   modern_capturess           rg   _get_capture_datesz&YoutubeWebArchiveIE._get_capture_datesv  s   %%8
C)*mX5NWbdlVm & o urt 	 w8ww '3Ja>6I1JJ  !34X&  a100==  <!?@ 	d779R9RST&}566 Ks   
C,C,c                8   | j                  |      j                  ddd      \  }}}|xs |}d }| j                  d      }|D ]$  }	 | j                  t	        d|       |dd	      }& |j                  r| j                  |j                  d|       | j                  |t        |            }	| j                  dt        |	ddiz          d|i}
|	D ]s  }| j!                  | j"                  dz   ||fz  |ddd      }| j%                  ||xs d      }|j'                  d      sSt)        |
|      }
d| j+                  d      vss n | j-                  |      |
d<   |r@t.        j0                  j3                  |j4                        }t7        |      }|t        |j8                  j'                  d            d}t;        |d       }|rH|t<        j>                  v r6|jA                  t<        j>                  |          |jA                  d|i       n^t;        |d       }tC        |      xs1 tE        |      xs$ tC        |j8                  j'                  d            }|jA                  d |i       |g|
d!<   |
j'                  d"      stG        t;        |d#             |
d"<   |
j'                  d      s||
d<   |
S # t
        $ rY}t        |j                  t              r-|j                  j                  d
k(  r| j                  dd       n||_        Y d }~d }~ww xY w)$Nr)   r   date2FrJ  zGhttps://web.archive.org/web/2oe_/http://wayback-fakeurl.archive.org/yt/z Fetching archived video file urlT)r5  expected_statusi  ziThe requested video is not archived, indexed, or there is an issue with web.archive.org (try again later))expected)r  r   zCaptures to try: r   z, z!http://www.youtube.com/watch?v=%sz;unable to download capture webpage (it may not be archived)zDownloading capture webpage)r   r.  rF  r5  r&  r+   r  r|  ro   zx-archive-orig-content-length)r5   r   c                    | d   d   S )Nitagr   r   r}   s    rg   r   z3YoutubeWebArchiveIE._real_extract.<locals>.<lambda>  s    &	! ri   	format_idc                    | d   d   S )Nmimer   r   r}   s    rg   r   z3YoutubeWebArchiveIE._real_extract.<locals>.<lambda>  s    AfIaL ri   zx-archive-guessed-content-typer*   rn   r<   c                    | d   d   S )Ndurr   r   r}   s    rg   r   z3YoutubeWebArchiveIE._real_extract.<locals>.<lambda>  s    STUZS[\]S^ ri   )$_match_valid_urlr]  RetryManager_request_webpager	   r   r/  causer
   statusraise_no_formatserrorr  r   write_debugr   r   r  rz  r   r   r  r  r   r   unquoter5   r   headersr   r   _formatsrj  r   r!   r   )r   r5   r   r  
url_date_2urlhretry_managerretryer  r   capturere   current_infovideo_file_url_qsfmtr  r  r*   s                      rg   r   z!YoutubeWebArchiveIE._real_extract  s'   )-)>)>s)C)I)I$PVX_)`&(J)z)))6" 	$E
$,,"ijris tu#EW[ - ]	$ !!-"5"5x!X//+h:OP,}m/XSW/XXYh$ 
	G,,''*MMRY[cQdd!8u2 - 4G  11(GMrJL("46T%<%<[%II
	 "55h?\,,&&txx0C (;t||7G7GHg7h+ijC,.DED	 2 22

9--d34

K./02HI#D) [.t4[&t||'7'78X'YZ  

E3<("eDO88J'#-g6GI^._#`Z xx $DMc " $aggy1aggnn6K)) D  OS * T #$EK$s   !J77	L ALL)NNNNF)r4  list | Noner,  r  r-  zdict | None)r   r   r   r   r   r   r   r   ri  rh  r  r   ranger  r  r  r  r8  r?  rz  r  r  r   )r  cnr  s   0000rg   r   r   m  s   #GIGJ l#8E)$8' E:Y	
$ g#<E)(8, J:Y
( w#R)E* H:'	
$ k#()8E& DY:#
$ k#=)$8E* HY:
$ Y#N)8 E- KY:&
& l#L)8E- KY:& Q"#
* f#6
 Q#6)8YE:&
  n#()8YE'* H:
& _#CE.1: O)
" k#P0E)-: N
" _#C1. O)E:
" k#G NE0-:

  _#$A H*8Y)'
$ x#_)+(Y8:E I
& :#sY+E:)8
" _#; P/:E)2
  \!
 n!

 y!

 E!
 E!
 D!
 [!
 :!
 +!
c	uFl	 3FF+		!	@	@A B&	"
 "/& 	B
#  	B%6  	B]g  :A  :AXYqsxyzs{q}~q  :AlmQCRy
:S  :A:S  :A  	BC =))`(-
B270<g :As   7'Gr   )*
__future__r   rc   ra   urllib.parser   commonr   youtuber   r   
networkingr	   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   ri   rg   <module>r     s]    "  	  ! 8 $ -      8C= CL
]	- ]	ri   