
    bix                        d dl Z d dlZd dlZd dlZddlmZ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 dd	lmZ  G d
 de          Z G d de          Z G d de          Z G d de          Z G d de          Z  G d de          Z! G d de!          Z" G d de!          Z# G d de!          Z$ G d de!          Z% G d de          Z& G d  d!ee          Z'dS )"    N   )InfoExtractorSearchInfoExtractor   )HEADRequest)	HTTPError)ImpersonateTarget)ExtractorErrorfloat_or_noneint_or_nonejoin_nonemptymimetype2extparse_qsstr_or_nonetry_callunified_timestampupdate_url_queryurl_or_noneurlhandle_detect_ext)traverse_objc                       e Zd ZdZdgZdddgZdi ddd	d
ddddgddddddgdddedddddddddd d!dd"d#d$d%d&d'id(d)d*d+d+d,gd-d.d,d/d0d1d2gZd3 Zd4S )5SoundcloudEmbedIEzDhttps?://(?:w|player|p)\.soundcloud\.com/player/?.*?\burl=(?P<id>.+)zQ<iframe[^>]+src=(["\'])(?P<url>(?:https?://)?(?:w\.)?soundcloud\.com/player.+?)\1zhttps://w.soundcloud.com/player/?visual=true&url=https%3A%2F%2Fapi.soundcloud.com%2Fplaylists%2F922213810&show_artwork=true&maxwidth=640&maxheight=960&dnt=1&secret_token=s-ziYeyTurlonly_matchingzehttps://news.sophos.com/en-us/2023/08/10/s3-ep147-what-if-you-type-in-your-password-during-a-meeting/id
1588847423extm4atitlez=S3 Ep147: What if you type in your password during a meeting?artistszNaked Securitydescriptionz$md5:6931a0630b920413c8c904407bf4b3b2durationgjtv@genres
Technologylicenseall-rights-reservedrepost_counttagscount:4	thumbnail.re:https?://[ai]1\.sndcdn\.com/.+\.(?:jpg|png)	timestampi#dtrackupload_date20230809uploaderuploader_id61390843uploader_urlz%https://soundcloud.com/sophossecurityskip_downloadm3u8r   	info_dictparamszMhttps://www.guitarplayer.com/lessons/november-2023-guitar-player-lesson-audio
1695754080u,   A Tribute to Brian Setzer’s Guitar MasteryzGuitar Playerplaylist 	489924156)r   r    albumalbum_artists
album_typer"   r1   r2      r   r8   playlist_mincountc                     t          |          }|d         d         }|                    d          }|rt          |d|d         i          }|                     |          S )Nr   r   secret_token)r   getr   
url_result)selfr   queryapi_urlrE   s        U/DATA/AppData/hermes/venv/lib/python3.11/site-packages/yt_dlp/extractor/soundcloud.py_real_extractzSoundcloudEmbedIE._real_extractH   s^    ,q/yy00 	S&wa0QRRGw'''    N)	__name__
__module____qualname__
_VALID_URL_EMBED_REGEX_TESTSint_WEBPAGE_TESTSrL    rM   rK   r   r      s       XJhiL C  F w
,
5
 T
 ()	

 A
 
 |n
 ,
 C
 I
 J
 
 T
 :
 (
  :!
" C#
& #F++ . _CC-.$'&	
 	
  -#NJ( ( ( ( (rM   r   c                       e Zd ZdZdZdZdZdZdZdZ	i Z
dZ ej        d	          Zd
dddddddddd
Zg dZej        d             Zd Zd Zd Zd Zd Zd Zd Zd Zd#d!Zed"             ZdS )$SoundcloudBaseIE
soundcloudzhttps://api-v2.soundcloud.com/https://soundcloud.com/sMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36z?client_id=%sz;https://api-auth.soundcloud.com/web-auth/sign-in/password%sz1https://api-auth.soundcloud.com/connect/session%sz-[0-9a-z]+\.(?P<ext>jpg|png)z"([^"]+)"|([^ ]+)          /   C   d   i,  i  i  r   )
minitinysmallbadget67x67larget300x300cropt500x500original)http_aachls_aac	http_opushls_opushttp_mp3hls_mp3c                      t          j        d                    t           fd                     ddgt
                    D                                           j        S )N|c              3      K   | ]d}|d k    r(t          j        |                              dd          n1d                    t	          t           j        j                            V  edS )defaultz\*z.*rs   N)reescapereplacejoinmap_DEFAULT_FORMATS).0patternrH   s     rK   	<genexpr>z1SoundcloudBaseIE._is_requested.<locals>.<genexpr>p   s       (
 (
  9@98L8LBIg&&ue444#bi)>??@@(
 (
 (
 (
 (
 (
rM   formatsru   )ie_key)rv   compilery   set_configuration_argSoundcloudIE	fullmatchrH   s   `rK   _is_requestedzSoundcloudBaseIE._is_requestedn   sx    z$))C (
 (
 (
 (
  229ykR^2__(
 (
 (
 %
 %
     		rM   c                 >    | j                             dd|           d S NrY   	client_id)cachestore)rH   r   s     rK   _store_client_idz!SoundcloudBaseIE._store_client_idv   s"    
{I>>>>>rM   c                 B   |                      dd d          }t          t          j        d|                    D ]W}|                      |d dd          }|r:|                     d|dd 	          }|r|| _        |                     |            d S Xt          d
          )NrZ   zDownloading main pagez<script[^>]+src="([^"]+)"zDownloading JS assetFfatalz#client_id\s*:\s*"([0-9a-zA-Z]{32})"z	client idru   zUnable to extract client id)_download_webpagereversedrv   findall_search_regex
_CLIENT_IDr   r
   )rH   webpagesrcscriptr   s        rK   _update_client_idz"SoundcloudBaseIE._update_client_idy   s    (()BDJabbBJ'CWMMNN 		 		C++C7MUZ+[[F  ..:K / 7 7	  &/DO)))444FF:;;;rM   c                     |                     d          du }|r|d= |                     di                                           }dD ]}| j        |d<   ||d<   	  | j        |i |c S # t          $ r}|rVt          |j        t                    r<|j        j        dv r.| 	                    d            | 
                                 Y d }~|r)|                     t          |                     Y d }~ dS  d }~ww xY wd S )Nr   FrI   )TFr   )    )rF   copyr   _download_jsonr
   
isinstancecauser   statusr   r   report_warningstr)rH   argskwargs	non_fatalrI   is_first_attemptes          rK   	_call_apizSoundcloudBaseIE._call_api   sF   JJw''50	 	 w

7B'',,.. - 	 	!%E+#F7O
*t*D;F;;;;;!   # !
17I(F(F !17>]gKgKg))$///**,,,HHHH !''A/// 555555	 	s%   A((
C;2AC6
$C65C66C;c                     | j                             dd          | _        | j        rd S |                                  d S r   )r   loadr   r   r   s    rK   _initialize_pre_loginz&SoundcloudBaseIE._initialize_pre_login   s@    *//,DD? 	F     rM   c                 $   |                      | j        | j        | j        z  z  d ddt	          j        dd|ii                                                    r#d| | j        d<   |                                  d S | 	                    d           d S )	NzVerifying login token...Fsessionaccess_token)noter   datazOAuth Authorizationz<Provided authorization token is invalid. Continuing as guest)
_request_webpage_API_VERIFY_AUTH_TOKEN_API_AUTH_QUERY_TEMPLATEr   jsondumpsencode_HEADERSreport_loginr   rH   tokens     rK   _verify_oauth_tokenz$SoundcloudBaseIE._verify_oauth_token   s      +t/Lt/^_5UZ^U,C DEELLNN ! P P 	` .>e-=-=DM/* ^_____rM   c                 p      j         rd S t           fd          x}r                     |           d S d S )Nc                  N                           j                  d         j        S )Noauth_token)_get_cookies	_BASE_URLvaluer   s   rK   <lambda>z3SoundcloudBaseIE._real_initialize.<locals>.<lambda>   s    T%6%6t~%F%F}%U%[ rM   )r   r   r   r   s   ` rK   _real_initializez!SoundcloudBaseIE._real_initialize   sU    = 	F[[[[\\\5 	,$$U+++++	, 	,rM   c                     |dk    r(t          d|                     d           d          | j        rd S |                     |           d S )NoauthzLogin using username and password is not currently supported. Use "--username oauth --password <oauth_token>" to login using an oauth token, or else cookies)methodTexpected)r
   _login_hintr   r   )rH   usernamepasswords      rK   _perform_loginzSoundcloudBaseIE._perform_login   s    w @++9+==@ @JNP P P P = 	F  ***	 	rM   c                 j   d}d}d}d}d}d}	d}
d}d}d	}d
}d}|}|}d                     d ||||||	|
|fD                       }||z   |z   |z   |z   |z   |z   |z   }d}t          t          |                    D ]-}|dz	  d|z  dz  z   }|t          ||                   z  }|dz  }.| d| d|dd| S )N!   r   i; u   i@w i  %       0763ed7314c69015fd4a0dc16bbf4b908r[   -c                 ,    g | ]}t          |          S rV   r   )r|   mInts     rK   
<listcomp>z)SoundcloudBaseIE.sign.<locals>.<listcomp>   s    EEEDc$iiEEErM   i>z    i :x)ry   rangelenord)rH   userpwclidaiswulbkcnyrr   tdhmfs                         rK   signzSoundcloudBaseIE.sign   s   . BHHEEQ1aAq!,DEEEFFEAIMA!A%)s1vv 	 	AaQUrM*AQqTNAMAA ##a##!######rM   NFc                   $ t          d                   }t                      $g }d}d| j        i}|r||d<   |sΉ                    d          r                    d          r	 |                     | j         d| d|d	|| j        
          }	n# t          $ r}
t          |
j	        t                    r;|
j	        j        dk    r+|                     d|                                             nZt          |
j	        t                    r&|
j	        j        dk    r|                     d           n|                     |
j                   d }	Y d }
~
nd }
~
ww xY wt!          |	dt"          hf          x}r|                     t'          |          |ddd          }|rk|j        }$                    |           |                    dt/          |          t1          |j                            d                    |dddd           $fd}t!          ddd f          D ]}|r n|d         }|d         }|                    d          d          }t!          |d!d"t           hf          pd#}|                    d$          rd%}f|d&k    rd#}|d'k    rd(|v rd'}|d)k    sd*|v rd+}| d| }|d,k    r|                     d-| d.           |                     |          s|                     d/| d0           t!          |                     ||d1| d2|| j        
          dt"          hf          } ||          r"$                    |           t!          |d!d3t           hf          }|                     d4|d5d 6          }d7d8d9                    |r
|d d:         nd           pt?          |d 6          }|r|d;k    r|}|                    d<          d=k    }t1          |                     d>|d,d 6          p"|                     d?|d,d 6          p	|rd@|v rdAnd           }|                    dB          pdC|v ptA          j!        dD|          }|                    tE          |||odEdF          |||d||dGv rdHnd#|d7k    rdInd |rdJn|r|dKk    rd ndL|rdMnd |rdNnd dO           |sF|r| #                    |                               dP          dQk    r| $                    d%R                               dS          pi }g }                    dT          }|p|                    dU          }t#          |          rtA          j!        | j%        |          x}r| j&        '                                D ]\  } }!| dVk    r|(                    dW          ndX}| tA          j)        | j%        dY|  dZ| |          d[}"| d\k    r|sd]}!n| dVk    rd|"d^<   |!r|"*                    |!|!d_           |                    |"           nd|ig}fd`}#i d|da|                    db          dctW          |                    d                    p|                    dd          de|                    df          dgtY                              dh                    di                    di          dj                    di          dk                    dk          dl|dmt[                              dm          dn          do                    df          dp                    dp          dq |#dr          ds |#dt          p
 |#du          dv |#dw          dx |#dy          dzt!          d{t           ht\          t^          t\          f          t!          d|| j0        j1        hd}d}t\          f          t!          d~dt           ht\          t^          t\          f          |s|nd dS )Nr   Fr   rE   downloadablehas_downloads_lefttracks/z	/downloadz.Downloading original download format info JSONrI   headersr   zAOriginal download format is only available for registered users. r   z9Original download format is not available for this clientredirectUriz.Checking original download format availabilityz)Original download format is not availabler   downloadzContent-Length
   Originalnone)	format_idr   filesizer   qualityformat_notevcodecc                     |  p| v S NrV   )r   format_urlss    rK   invalid_urlz8SoundcloudBaseIE._extract_info_dict.<locals>.invalid_url%  s    70c[00rM   mediatranscodingsc                 <    t          |d                   o|d         S )Nr   preset)r   )_vs     rK   r   z5SoundcloudBaseIE._extract_info_dict.<locals>.<lambda>)  s!    ;WXY^W_K`K`Kpefgoep rM   r   r  r  r   formatprotocolhttp)zctr-zcbc-Tprogressivehlsz/hlszencrypted-hlsz/encrypted-hlshls-aesabrzSkipping broken "z" format"z%" is not a requested format, skippingzDownloading z format info JSON	mime_typezcodecs="([^"]+)"codecr   r   opus)mp4ar     r6   r  hqz(\d+)k$z\.(\d+)\.(?:opus|mp3)[/?]aac   snippedz	/preview/z/(?:preview|playlist)/0/30/preview)delim)r  r  m3u8_nativem4a_dashr      Premiumi)r  r   r   acodecr  r  r  	containerr  r  
preferencepolicyBLOCK)metadata_availabler   artwork_url
avatar_urlrk   r   jpgr   .r   r   rc      r,  )widthheightc                 N    t                              |  d                    S )N_count)r   rF   )keyinfos    rK   extract_countz:SoundcloudBaseIE._extract_info_dict.<locals>.extract_count  s#    txx377888rM   r1   r   r2   	permalinkr4   permalink_urlr-   
created_atr    r.   r"   
thumbnailsr#   i  webpage_urlr&   
view_countplayback
like_countfavoritingslikescomment_countcommentr(   repostsr$   genretag_list.publisher_metadataartist)r)   r!   r   )2r   r   r   rF   r   _API_V2_BASEr   r
   r   r   r   r   r   r   write_debugmsgr   r   r   r   r   addappendr   r   r   	partition
startswithr   r   r   r   rv   searchr   
report_drmraise_geo_restricted_IMAGE_REPL_RE_ARTWORK_MAPitemsgroupsubupdater   r   r   filterall_TAGS_REr   )%rH   r;  
full_titlerE   extract_flattrack_idr   has_drmrI   download_datar   redirect_urlurlh
format_urlr  r   r  preset_baser  short_identifier
stream_urlr  r  r   
is_premiumr  
is_previewr   r@  r0  r+   mobjimage_idsizer   r<  r
  s%    `                                  @rK   _extract_info_dictz#SoundcloudBaseIE._extract_info_dict   sL
   tDz??eedo. 	1$0E.!  	 8 8  	TXXFZ=[=[  	% $ 3 3(DDDDDhDE[_[h !4 !j !j " 	% 	% 	%agy11 /agn6K6K''F151A1A1C1CF FG G G G  33 /#8M8M$$%`aaaa''... $	%  ,MMK=;YZZZ| ,,--x9i?u - N N  !%JOOJ///NN%/3D99$/0@0@AQ0R0R$S$S)#%'1"($ $   	1 	1 	1 	1 	1 dWn>p>p$qrr A	 A	A 5Jx[F **3//2K#A*se'DEEOH""#344 =((!5  Vz%9%9 ?**.>*.L.L$"*::[::e##  !O5E!O!O!OPPP%%&677   !\%5!\!\!\]]] &dnnH&X5E&X&X&XT] '5 '4 '46;k]5KM MJ {:&& OOJ'''$Q;(FGGI&&':IwX\&]]E  cu.%))$//Y 4@	SW3X3X3X   "#--!y))T1J"":vud"KK G%%&BJPU_c%ddG&E5F??CCH HC
 %%	** S(J6SY'EzRR  NN*8VZ=UI]`aaa! -59K-K-KMMQW+.%<<ZZT *Q11c0QcSjjr,6@yyD%/9ccT       	C *)))xx!!W,,))T)BBBxx%2
hh}--9488L#9#9	y!! 	2y!4i@@@t 2&*&7&=&=&?&? ) )NHd/7:/E/E$**U+++5C&!vd&9;Ox;O;O#;O;OQZ[[ A  6))+)!!Z//*,, %)&*" "    %%a((((!)$  %i01
	9 	9 	9 	9 	9
(
,,
 ;txx~~66O$((;:O:O
 DHH_55	

 *488L+A+ABB
 TXXg&&
 TXXg&&
 488M22
 *
 dhhz&:&:DAA
 488O44
 txx	**
 --
33
 --66P--:P:P
 ]]955
  MM)44!
" l4'C5&#v)NOO#
$ !
T]5J4KSRUW]'^__#D+?C5RXZ]_e*fgg&2<ww)
 
 
 	
s   **B 
EB1EEc                     | j         dz   |z   S )Nzresolve?url=)rN  )clsr   s     rK   _resolv_urlzSoundcloudBaseIE._resolv_url  s    .0366rM   )NNF)rN   rO   rP   _NETRC_MACHINErN  r   _USER_AGENTr   _API_AUTH_URL_PWr   r   rX  rv   r   r`  rY  r{   	functoolscached_propertyr   r   r   r   r   r   r   r   r   rq  classmethodrt  rV   rM   rK   rX   rX   Q   sa       !N3L)I HK.TPH4Nrz.//H  L _^^  ? ? ?< < <  (! ! !` ` `, , ,( ( (V$ $ $:l
 l
 l
 l
\ 7 7 [7 7 7rM   rX   c                   
   e Zd ZdZdZdZ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ededededd d!d"d#d$i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edededed!d/dd d0gd*gg d1d2d3d4i dd5dd6d
d7dd7dd8dd9dd:dd;dd<dd=dddedededed!d>dd d?gg d@d%dAd4i dd5dd6d
d7dd7dd8dd9dd:dd;dd<dd=dddedededed!d>dd d?gg d@d%dBdCi ddDdd	d
dEddEddFddGddHd!dIddJddKddLdd dddededededMgdGgdNd1dOgdPdQdRi ddSdd	d
dTddTddUddVddWddXddYddZdddededededd d!d[d\gd]gd^d1dOgdPd_d`i ddadd6d
dbddbddcdddddeddfddgddhdd dddedededed!didjgg dkdldmidndodpi ddqddrd
dsddsddtdduddvddwddxddydd dddededededzd{gd|d}d~dldmidndi ddddrd
dddFddddd!ddededededdd#g ddgdddddddd ddddddddddddddddddddddddddddddg
ddmddddddddddddgZd ZdS )r   a]  Information extractor for soundcloud.com
       To access the media, the uid of the song and a stream token
       must be extracted from the page source and the script must make
       a request to media.soundcloud.com/crossdomain.xml. Then
       the media can be grabbed by requesting from an url composed
       of the stream token and uid
     a  (?x)^(?:https?://)?
                    (?:(?:(?:www\.|m\.)?soundcloud\.com/
                            (?!stations/track)
                            (?P<uploader>[\w\d-]+)/
                            (?!(?:tracks|albums|sets(?:/.+?)?|reposts|likes|spotlight|comments)/?(?:$|[?#]))
                            (?P<title>[\w\d-]+)
                            (?:/(?P<token>(?!(?:albums|sets|recommended))[^?]+?))?
                            (?:[?].*)?$)
                       |(?:api(?:-v2)?\.soundcloud\.com/tracks/(?:soundcloud%3Atracks%3A)?(?P<track_id>\d+)
                          (?:/?\?secret_token=(?P<secret_token>[^&]+))?)
                    )
                    rY   z9http://soundcloud.com/ethmusic/lostin-powers-she-so-heavy de9bac153e7427a7333b4b0c1b6a18d2r   62986583r   r  r    zELostin Powers - She so Heavy (SneakPreview) Adrian Ackers Blueprint 1r.   r"   z$md5:7b6074e00887ad79f59b647c8fb6d5aer1   zE.T. ExTerrestrial Musicr2   1571244r-   iV'vPr/   20121011r#   gxa@r&   r'   rB  rD  rG  r(   r+   r,   r4   zhttps://soundcloud.com/ethmusicr)   zcount:14)r   md5r8   zihttps://soundcloud.com/the-concept-band/goldrushed-mastered?in=the-concept-band/sets/the-royal-concept-ep47127627
Goldrushedz$md5:c0080b79a3710811d60234f94f391a40The Royal Concept9615865iO20120521gKcl@z'https://soundcloud.com/the-concept-bandAlternative)r$   r!   r)   )r   r8   zDhttps://soundcloud.com/jaimemf/youtube-dl-test-video-a-y-baw/s-8Pjrp aa0dd32bfea9b0c5ef4f02aacd080604	123998367mp3u!   Youtube - Dl Test Video '' Ä↭z$md5:610b729ee06ac4cedaa28607212948f3jaimeMF69767071ixR20131209gv#@zhttps://soundcloud.com/jaimemf	youtubedl)r$   r)   z@https://api.soundcloud.com/tracks/123998367?secret_token=s-8Pjrpz+https://soundcloud.com/the80m/the-following ecb87d7705d5f53e6c02a63760573c75	343609555zThe Followingr<   80M	312384765zhttps://soundcloud.com/the80m20170922iYgSx@zDance & EDMr*   z?Original download format is only available for registered users)r   r  r8   expected_warningszBhttps://soundcloud.com/oriuplift/uponly-238-no-talking-wav/s-AyZUd 2e1530d0e9986a833a67cb34fc90ece0	340344461zOUplifting Only 238 [No Talking] (incl. Alex Feed Guestmix) (Aug 31, 2017) [wav]z$md5:fa20ee0fca76a3d6df8c7e57f3715366zOri Uplift Music12563093i]Y20170831gjt@z https://soundcloud.com/oriupliftTrancez
Ori Upliftzcount:6z5https://soundcloud.com/garyvee/sideways-prod-mad-real 59c7872bc44e5d99b7211891664760c2	309699954zSideways (Prod. Mad Real)z$md5:d41d8cd98f00b204e9800998ecf8427egaryvee2366352iYgX20170226gMbi@zhttps://soundcloud.com/garyveeMadReal)r!   r)   r5   r6   )r   r  r8   r9   z2https://soundcloud.com/giovannisarani/mezzo-valzer 8227c3473a4264df6b02ad7e5b7527ac	583011102r   zMezzo Valzerz$md5:f4d5f39d52e0ccc2b4f665326428901azGiovanni Sarani3352531i{ex\20190228g?5^If@r$   Pianoz%https://soundcloud.com/giovannisaranizcount:10)r4   r)   z*https://soundcloud.com/skorxh/audio-dealer
2011421339zaudio dealerz$KORCH	150292288zhttps://soundcloud.com/skorxhg^Ij@r!   z$KORXHig20250117rb   z?https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-mini.jpgr4  rc   z?https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-tiny.jpgrd   z@https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-small.jpgre   z@https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-badge.jpgrf   zAhttps://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-t67x67.jpgrg   z@https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-large.jpgrh   zChttps://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-t300x300.jpgri   z?https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-crop.jpgrj   zChttps://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-t500x500.jpgrk   zChttps://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-original.png)r&   r+   r@  hls_aac_160k)r5   r  r7   zQhttps://soundcloud.com/wandw/the-chainsmokers-ft-daya-dont-let-me-down-ww-remix-1Tr   zChttps://soundcloud.com/taylorswiftofficial/look-what-you-made-me-dozBhttps://api.soundcloud.com/tracks/soundcloud%3Atracks%3A1083788353c                    |                      |          }|                    d          }i }|r,| j        dz   |z   }|}|                    d          }|r||d<   n\ dj        |                    dd           x}}|                    d          }|r|d| z  }|                     | j        |z             }|                     ||d	|| j        
          }	|                                 D ]}
	 | 	                    |	||          c S # t          $ rX}t          |j        t                    r|j        j        dk    r |                     dd           |j        |
_        Y d }~yd }~ww xY wd S )Nrc  r   rE   z{}/{}r1   r    r   /zDownloading info JSONr   i  zYou have reached the API rate limit, which is ~600 requests per 10 minutes. Use the --extractor-retries and --retry-sleep options to configure an appropriate retry count and wait timeT)	only_once)_match_valid_urlr[  rN  r  rt  r   r   r   RetryManagerrq  r
   r   r   r   r   r   error)rH   r   rn  rc  rI   info_json_urlra  r   resolve_titler;  retryr   s               rK   rL   zSoundcloudIE._real_extract  s   $$S))::j)) 	M -	9HDM!JJJ~..E .(-n%)7JPW9X9X)YYJJJw''E -U, ,,T^m-KLLM~~:'>eUYUb  d d &&(( 
	& 
	&E	&..tZGGGGG! & & &!!'955 39N9N##LW[ $ ] ] ]  g&
	& 
	&s   -D
E(AE##E(N)	rN   rO   rP   __doc__rQ   IE_NAMErT   rS   rL   rV   rM   rK   r   r     s
       	 	J GJ1
*
6
 \
 \	

 A
 2
 9
 
 :
 
 ,
 #
 #
 S
 C
  J!
" =#
$ J%
 
 2 {
*
6
 \
 \	

 A
 +
 9
 
 :
 
 ,
 #
 #
 S
 C
  E!
" J#
$ %o+,)
 
 
 6 V1
+
5
 :
 :	

 A
 	
 :
 
 :
 
 ,
 #
 #
 S
 C
  <!
" J#
$ #m'
 
 
	 6 R1
+
5
 :
 :	

 A
 	
 :
 
 :
 
 ,
 #
 #
 S
 C
  <!
" J#
$ #m'
 
 
	 6 =1
+
6
 _
 _	

 2
 
 ;
 ;
 :
 
 
 J
 ,
 #
 S
  C!
" ##
$ %ow)
 
 
, ``5 < T1
+
6
 f
 f	

 A
 *
 :
 
 :
 
 ,
 #
 #
 S
 C
  J!
" >#
$  j$~)
 
 
, ``7 < G1
+
5
 0
 0	

 A
 	
 9
 
 :
 
 J
 ,
 #
 #
 S
  C!
" <#
$ "{'
 
 
* #F+3 6 D1
+
5
 ^
 ^	

 A
 )
 9
 
 :
 
 J
 ,
 #
 #
 S
  C!
" wi#
$ D'
 
 
* #F+1 6 < 
, 
5 
 ^ 
 2	 

  
 ; 
 ; 
 S 
 # 
 # 
 C 
  
 B 
 z 
 ^ 
  ! 
" :# 
$ -J&ghh&ghh'ijj'ijj(kll'ijj!*opp&ghh!*opp!*opp) 
  
  
B %+nEEI% %N c  U 
 T s|F| &  &  &  &  &rM   r   c                       e Zd ZddZdS )SoundcloudPlaylistBaseIENc                 d   t          |d                   }|                    d          pg }t          d |D                       sJ|rH|                     | j        dz   |dd                    d |D                       ||d| j                  }t          |d	t           hfd
dt           hfdt           hd hfd          }g }|D ]}t          |                    d                    }|                    d          }	|	s|s>| j        dz   |z   }	|r|	d|z   z  }	|	                     | j
        |	t                                          |fddi|            | j        |||                    d	          |                    d          fi |t          |d
dt           hfd
dt          hfd          S )Nr   tracksc              3   @   K   | ]}|                     d           V  dS )r>  N)rF   r|   r   s     rK   r~   z8SoundcloudPlaylistBaseIE._extract_set.<locals>.<genexpr>  s.      ::a155))::::::rM   zDownloading tracks,c                 8    g | ]}t          |d                    S )r   r   r  s     rK   r   z9SoundcloudPlaylistBaseIE._extract_set.<locals>.<listcomp>  s"    $B$B$BaS4\\$B$B$BrM   )ids
playlistIdplaylistSecretTokenr   r    r   r   set_typec                 
    | pdS )Nr;   rV   r   s    rK   r   z7SoundcloudPlaylistBaseIE._extract_set.<locals>.<lambda>  s
    j rM   )r>   album_artistr@   r>  r   z?secret_token=url_transparentTr"   )r1   r2   )r   rF   r_  r   rN  ry   r   r   r   rR  rG   r   r   playlist_result)
rH   r;   r   playlist_idr  
album_infoentriesr.   rc  r   s
             rK   _extract_setz%SoundcloudPlaylistBaseIE._extract_set  sL   (4.))h''-2::6::::: 	*u 	*^^!H,k$88$B$B6$B$B$BCC"-+0- -  = $ * *F "(u%#Z#7%u/H/H.IJ-
 -
  

  
	[ 
	[E"599T??33H))O,,C 4 ')3h> 4+e33CNN?4?\((**HZ ZFJZNXZ Z [ [ [ [#t#[LL!!LL''	
 	
 		

 8#Z#7 &{m<& &  	
 	
 		
rM   r	  )rN   rO   rP   r  rV   rM   rK   r  r    s(        %
 %
 %
 %
 %
 %
rM   r  c            
       ^    e Zd ZdZdZ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gZd ZdS )SoundcloudSetIEzuhttps?://(?:(?:www|m)\.)?soundcloud\.com/(?P<uploader>[\w\d-]+)/sets/(?P<slug_title>[:\w\d-]+)(?:/(?P<token>[^?/]+))?zsoundcloud:setzAhttps://soundcloud.com/the-concept-band/sets/the-royal-concept-ep2284613zThe Royal Concept EPz$md5:71d07087c7a449e8941a70a29e34671er  r  ep)r   r    r"   r1   r2   r>   r?   r@   r   rB   zGhttps://soundcloud.com/the-concept-band/sets/the-royal-concept-ep/tokenTr   z6https://soundcloud.com/discover/sets/weekly::flacmaticz<https://soundcloud.com/discover/sets/charts-top:all-music:dez<https://soundcloud.com/discover/sets/charts-top:hiphoprap:krc                    |                      |          } dj        |                    dd           }|                    d          }|r|d|z   z  }|                     |                     | j        |z             || j                  }d|v rGd |d         D             }t          d	                    d
                    |                              | 	                    ||          S )Nz
{}/sets/{}r1   
slug_titler   r  r   errorsc              3   @   K   | ]}t          |d                    V  dS error_messageNr   r|   errs     rK   r~   z0SoundcloudSetIE._real_extract.<locals>.<genexpr>6  s/      HH#CO,--HHHHHHrM   z$unable to download video webpage: {}r  )
r  r  r[  r   rt  r   r   r
   ry   r  )rH   r   rn  ra  r   r;  msgss          rK   rL   zSoundcloudSetIE._real_extract*  s    $$S))(\($**Z*N*NO


7## 	&#+%J~~d..NZ') )*4dm  M M tHHhHHHD !G!N!NsxxX\~~!^!^___  u---rM   NrN   rO   rP   rQ   r  rS   rL   rV   rM   rK   r  r    s         JJGR+A+$+12	
 	
   Y  H  N  N -F6. . . . .rM   r  c                   :    e Zd Zd Zej        d             Zd ZdS )SoundcloudPagedPlaylistBaseIEc                 8    d|||                      ||          dS )Nr;   )_typer   r    r  )_entries)rH   base_urlr  playlist_titles       rK   _extract_playlistz/SoundcloudPagedPlaylistBaseIE._extract_playlist=  s+    #}}X{;;	
 
 	
rM   c                     | j                                         }|sdS t          dddd          }d }t          d |D             |          }|r ||d	                    ||          k     r|S |d	         S )
NTchrome116windows10c                 <    | j         rt          | j                   ndS )Nr   )versionfloatr  s    rK   r   zKSoundcloudPagedPlaylistBaseIE._browser_impersonate_target.<locals>.<lambda>N  s    %IU19%5%5%5 rM   c                 ^    g | ]*}|d          j         dk    |d          j        dv "|d          +S )r   r  )r  macos)clientos)r|   targets     rK   r   zMSoundcloudPagedPlaylistBaseIE._browser_impersonate_target.<locals>.<listcomp>Q  sI     
 
 
 ay8++q	@T0T0T 1I0T0T0TrM   )r:  r(  )_downloader"_get_available_impersonate_targetsr	   sorted)rH   available_targetsMIN_SUPPORTED_TARGETversion_as_floatfiltereds        rK   _browser_impersonate_targetz9SoundcloudPagedPlaylistBaseIE._browser_impersonate_targetE  s     ,OOQQ  	4  15)TRRII  
 
$5
 
 
  ! ! !
  	(++HRL99<L<LMa<b<bbb ('|rM   c              #   P   K   dddd}t          j                    D ]}                                 D ]x}	                      ||| j        d|dz     j                  } nI# t          $ r<}t          |j        t                    r|j        j
        dk    r ||_        Y d }~qd }~ww xY w fd	}|d
         pg D ]7} |||                    d          |                    d                    V  8|                    d          }|s d S |                    dd            	d S )N   1r   limitlinked_partitioningoffsetzDownloading track page r   )rI   r   r   impersonatei  c            
         | D ]}t          |t                    st          |                    d                    }|r                    |t
                              |          rt
                                          nd t          |                    d                    |                    d                    c S d S )Nr>  r   r    )	r   dictr   rF   rG   r   suitabler   r   )
candidatescandr>  rH   s      rK   resolve_entryz=SoundcloudPagedPlaylistBaseIE._entries.<locals>.resolve_entryw  s    & L LD%dD11 ! $/0I0I$J$JM$ L#)5A5J5J=5Y5YcL//111_c'77'9J9J L  L L L LL	L LrM   
collectionr.   r;   	next_hrefr  )	itertoolscountr  r   r   r  r
   r   r   r   r   r  rF   pop)	rH   r   r  rI   r   r  responser   r  s	   `        rK   r  z&SoundcloudPagedPlaylistBaseIE._entries]  s      #&
 
 "" "	& "	&A**,,  #~~[t}>q1u>>$($D	  .  F  FH
 E%    &agy99 QW^s=R=R"#EKHHHH	L 	L 	L 	L 	L l+1r J J#mAquuW~~quuZ7H7HIIIIII,,{++C IIh%%%%E"	& "	&s   +A$$
B*.2B%%B*N)rN   rO   rP   r  rx  ry  r  r  rV   rM   rK   r  r  <  sQ        
 
 
   .+& +& +& +& +&rM   r  c                       e 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gZd!d"d#d$d%d&d'd(d)Zd* Zd+S ),SoundcloudUserIEam  (?x)
                        https?://
                            (?:(?:www|m)\.)?soundcloud\.com/
                            (?P<user>[^/]+)
                            (?:/
                                (?P<rsrc>tracks|albums|sets|reposts|likes|spotlight|comments)
                            )?
                            /?(?:[?#].*)?$
                    zsoundcloud:userz)https://soundcloud.com/soft-cell-official	207965082zSoft Cell (All)r   r       rB   z0https://soundcloud.com/soft-cell-official/trackszSoft Cell (Tracks)   z0https://soundcloud.com/soft-cell-official/albumszSoft Cell (Albums)r   z"https://soundcloud.com/jcv246/sets12982173zJordi / cv (Sets)r   z%https://soundcloud.com/jcv246/repostszJordi / cv (Reposts)   z%https://soundcloud.com/clalberg/likes11817582zclalberg (Likes)r   z*https://soundcloud.com/grynpyret/spotlight7098329zGrynpyret (Spotlight)r   z4https://soundcloud.com/one-thousand-and-one/comments	992430331z7x11x13-testing (Comments)zstream/users/%szusers/%s/trackszusers/%s/albumszusers/%s/playlistszstream/users/%s/repostszusers/%s/likeszusers/%s/spotlightzusers/%s/comments)r_  r  albumssetsrI  rF  	spotlightcommentsc           	         |                      |          }|                    d          }|                     |                     | j        |z             |d| j                  }|                    d          pd}|                     | j        | j        |         |d         z  z   t          |
                    d                    d                    |d         |                                                    S )	Nr   Downloading user infor  rsrcr_  r   {} ({})r   )r  r[  r   rt  r   r   r  rN  _BASE_URL_MAPr   rF   r  
capitalize)rH   r   rn  r1   r   resources         rK   rL   zSoundcloudUserIE._real_extract  s    $$S))::f%%~~T^h677-t}  F F ::f%%.%% 28 <tDz II''T*-x/B/B/D/DEEG G 	GrM   NrN   rO   rP   rQ   r  rS   r  rL   rV   rM   rK   r	  r	    s       J  G:&
 
    B)
 
    B)
 
   4(
 
   7+
 
   7'
 
   <,
 
   F1
 
  c8Fv !##$,!)'	 	MG G G G GrM   r	  c                   0    e Zd ZdZdZddddddgZd	 Zd
S )SoundcloudUserPermalinkIEz/https?://api\.soundcloud\.com/users/(?P<id>\d+)zsoundcloud:user:permalinkz)https://api.soundcloud.com/users/3090986930909869neilcicr     rB   c                 *   |                      |          }|                     |                     |          |d| j                  }|                     | j         d|d          dt          |d                   |                    d                    S )Nr  r  zusers/r   z/tracksr   )	_match_idr   rt  r   r  rN  r   rF   )rH   r   user_idr   s       rK   rL   z'SoundcloudUserPermalinkIE._real_extract  s    ..%%~~S!!7,CT]  \ \ %% ;;T
;;;Sd__dhhWaNbNbd d 	drM   Nr  rV   rM   rK   r   r     s[        CJ)G:
 
    Fd d d d drM   r   c                   0    e Zd ZdZdZddddddgZd	 Zd
S )SoundcloudTrackStationIEzNhttps?://(?:(?:www|m)\.)?soundcloud\.com/stations/track/[^/]+/(?P<id>[^/?#&]+)zsoundcloud:trackstationz?https://soundcloud.com/stations/track/officialsundial/your-text	286017854zTrack station: your textr  r_   rB   c                 h   |                      |          }|                     |                     |          || j                  }|                     d|d         d          }|                     | j        d                    |d                   z   |d                    |d                             S )Nr  zsoundcloud:track-stations:(\d+)r   ztrack idzstations/{}/trackszTrack station: {}r    )r%  r   rt  r   r   r  rN  r  )rH   r   
track_namer.   rc  s        rK   rL   z&SoundcloudTrackStationIE._real_extract  s    ^^C((
t//44j$-XX%%.dZI I %% 4 ; ;E$K H HH)00w@@B B 	BrM   Nr  rV   rM   rK   r(  r(     s[        bJ'GP/
 
    F	B 	B 	B 	B 	BrM   r(  c                   \    e 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gZddddZd ZdS )SoundcloudRelatedIEzjhttps?://(?:(?:www|m)\.)?soundcloud\.com/(?P<slug>[\w\d-]+/[\w\d-]+)/(?P<relation>albums|sets|recommended)zsoundcloud:relatedz;https://soundcloud.com/wajang/sexapil-pingers-5/recommended
1084577272z!Sexapil - Pingers 5 (Recommended)r  1   rB   z6https://soundcloud.com/wajang/sexapil-pingers-5/albumszSexapil - Pingers 5 (Albums)r   z4https://soundcloud.com/wajang/sexapil-pingers-5/setszSexapil - Pingers 5 (Sets)r  ztracks/%s/albumsz"tracks/%s/playlists_without_albumsztracks/%s/related)r  r  recommendedc           	      v   |                      |                              dd          \  }}|                     |                     | j        |z             |d| j                  }|                    d          r?t          | j         dd	                    d |d         D                       z  d	
          | 
                    | j        | j        |         |d         z  z   t          |d                   d                    |                    d          p||                                                    S )NslugrelationzDownloading track infor  r  z	 said: %sr  c              3   @   K   | ]}t          |d                    V  dS r  r   r  s     rK   r~   z4SoundcloudRelatedIE._real_extract.<locals>.<genexpr>@  sP       GF GF.1C())GF GF GF GF GF GFrM   Tr   r   r  r    )r  r[  r   rt  r   r   rF   r
   r  ry   r  rN  r  r   r  r  )rH   r   r2  r3  r.   s        rK   rL   z!SoundcloudRelatedIE._real_extract8  sc   ..s3399&*MMhT^d233*DM  C C 99X 	V DL!;!;!;chh GF GF5:8_GF GF GF ?F ?F "FPTV V V V %% 28 <uT{ JJCPUVZP[L\L\UYYw//749L9L9N9NOOQ Q 	QrM   Nr  rV   rM   rK   r-  r-    s        ~J"GL8
 
    H3
 
   F1
 
  F0 %4* MQ Q Q Q QrM   r-  c            
       N    e Zd ZdZdZdddddddgd	dd
ddddddddgZd ZdS )SoundcloudPlaylistIEzhttps?://api(?:-v2)?\.soundcloud\.com/playlists/(?:soundcloud(?:%3A|:)playlists(?:%3A|:))?(?P<id>[0-9]+)(?:/?\?secret_token=(?P<token>[^&]+?))?$zsoundcloud:playlistz,https://api.soundcloud.com/playlists/41103094110309z=TILT Brass - Bowery Poetry Club, August '03 [Non-Site SCR 02]z$md5:e4373f7177fe3db292a8552b4ec41bc6zNon-Site Records33660914r;   )r   r    r"   r1   r2   r?   r@   r>   r  r   r8   playlist_countzHhttps://api.soundcloud.com/playlists/soundcloud%3Aplaylists%3A1759227795Tr   z_https://api.soundcloud.com/playlists/soundcloud:playlists:2104769627?secret_token=s-wmpCLuExeYXc                    |                      |          }|                    d          }i }|                    d          }|r||d<   |                     | j        dz   |z   |d|| j                  }|                     ||          S )Nr   r   rE   z
playlists/zDownloading playlistr   )r  r[  r   rN  r   r  )rH   r   rn  r  rI   r   r   s          rK   rL   z"SoundcloudPlaylistIE._real_extract`  s    $$S))jj&&

7## 	*$)E.!~~,{:/udm  U U   u---rM   Nr  rV   rM   rK   r6  r6  H  s         eJ#G=UA*%01$U	
 	
   Z  q !F*. . . . .rM   r6  c                   B    e Zd ZdZdZdZddddddgZd	Zd
Zd Z	d Z
dS )SoundcloudSearchIEzsoundcloud:searchzSoundcloud searchscsearchzscsearch15:post-avant jazzcorezpost-avant jazzcorer     r9  r  2   c           
   +   ,  K   t          |                    d| j                  | j                  }|                    |ddd           t          | j        |z   |          }t          j        d          D ]}| 	                    ||d| d| j
                  }|                    d          pg D ]G}|rC | j        |d	         t                                          fi |                     |d
          V  H|                    d          }|s d S d S )Nr  r   r   r  zDownloading page zUnable to download API pager  r  uriT)rb  r  )minrF   _DEFAULT_RESULTS_PER_PAGE_MAX_RESULTS_PER_PAGEr]  r   rN  r  r  r   r   rG   r   r   rq  )	rH   endpointcollection_idrI   r  next_urlr   r  items	            rK   _get_collectionz"SoundcloudSearchIE._get_collection  sz     IIgt=>>&( ( 	#$
 
 	 	 	
 $D$5$@%HH## 	 	A~~-)@Q)@)@-t} & F FH !\228b p p p)$/U\%8%8%:%:p p>B>U>UVZim>U>n>np p p p p  ||K00H 	 	rM   c           
          |                      t          j        |                     d|||          d|t	          d          k    rd n|          ||          S )Nzsearch/tracks)r  qr   inf)r  r  islicerJ  r  )rH   rI   r   s      rK   _get_n_resultsz!SoundcloudSearchIE._get_n_results  sd    ##I$4  %qE JJqE%LL((tta%1 %127@ @ 	@rM   N)rN   rO   rP   r  IE_DESC_SEARCH_KEYrS   rE  rD  rJ  rO  rV   rM   rK   r=  r=  p  s}        !G!GK/'*
 
   F   "  2@ @ @ @ @rM   r=  )(rx  r  r   rv   commonr   r   
networkingr   networking.exceptionsr   networking.impersonater	   utilsr
   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   rX   r   r  r  r  r	  r   r(  r-  r6  r=  rV   rM   rK   <module>rX     s            				 6 6 6 6 6 6 6 6 $ $ $ $ $ $ - - - - - - 6 6 6 6 6 6                            + * * * * *3( 3( 3( 3( 3( 3( 3( 3(lX7 X7 X7 X7 X7} X7 X7 X7v
t& t& t& t& t&# t& t& t&n	&
 &
 &
 &
 &
/ &
 &
 &
R-. -. -. -. -.. -. -. -.`L& L& L& L& L&$4 L& L& L&^]G ]G ]G ]G ]G4 ]G ]G ]G@d d d d d = d d d*B B B B B< B B B0-Q -Q -Q -Q -Q7 -Q -Q -Q`%. %. %. %. %.3 %. %. %.P,@ ,@ ,@ ,@ ,@)+> ,@ ,@ ,@ ,@ ,@rM   