
    V|hF                        S SK r S SKrS SKrS SKrSSKJrJr  SSKJr  SSK	J
r
  SSKJrJrJrJrJrJrJrJrJrJrJrJr  SSKJr   " S	 S
\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r" " S S\5      r# " S S\5      r$ " S S \\5      r%g)!    N   )InfoExtractorSearchInfoExtractor   )HEADRequest)	HTTPError)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                       \ rS rSrSrS/rSSS./rS0 SS	_S
S_SS_SS/_SS_SS_SS/_SS_S\_SS_SS_SS_SS_S S!_S"S_S#S$_S%S&_S'S(0S).S*S+S,S,S-/S.S/S-S0S1.S2S3./rS4 r	S5r
g6)7SoundcloudEmbedIE   zDhttps?://(?: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                     [        U5      nUS   S   nUR                  S5      nU(       a  [        USUS   05      nU R                  U5      $ )Nr   r   secret_token)r   getr   
url_result)selfr   queryapi_urlrE   s        U/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/soundcloud.py_real_extractSoundcloudEmbedIE._real_extractG   sM    ,q/yy0&wa0QRGw''     N)__name__
__module____qualname____firstlineno__
_VALID_URL_EMBED_REGEX_TESTSint_WEBPAGE_TESTSrL   __static_attributes__rO   rN   rK   r   r      sP   XJhiL C F w
,
5
 T
 ()	

 A
 
 |n
 ,
 C
 I
 J
 
 T
 :
 (
  :!
" C#
& #F++. _CC-.$'&	
 -#NJ(rN   r   c                       \ rS rSrSrSrSrSrSrSr	Sr
0 rS	r\R                  " S
5      rSSSSSSSSSSS.
r/ SQr\R&                  S 5       rS rS rS rS rS rS rS rS rS$S! jr\S" 5       rS#r g )%SoundcloudBaseIEP   
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                    ^  [         R                  " SR                  [        U 4S jT R	                  SS/[
        S9 5       5      5      5      R                  $ )N|c              3      >#    U  Hd  nUS :w  a&  [         R                  " U5      R                  SS5      O2SR                  [	        [         R                  TR
                  5      5      v   Mf     g7f)defaultz\*z.*rw   N)reescapereplacejoinmap_DEFAULT_FORMATS).0patternrH   s     rK   	<genexpr>1SoundcloudBaseIE._is_requested.<locals>.<genexpr>o   s\      (
 ` 9@98LBIIg&&ue4#bii)>)>?@A_s   A,A/formatsry   )ie_key)rz   compiler}   set_configuration_argSoundcloudIE	fullmatchrH   s   `rK   _is_requestedSoundcloudBaseIE._is_requestedm   sQ    zz$))C (
  229ykR^2_(
 %
   I		rN   c                 >    U R                   R                  SSU5        g )Nr]   	client_id)cachestore)rH   r   s     rK   _store_client_id!SoundcloudBaseIE._store_client_idu   s    

{I>rN   c                 "   U R                  SS 5      n[        [        R                  " SU5      5       HO  nU R                  US SS9nU(       d  M  U R	                  SUSS S9nU(       d  M8  X@l        U R                  U5          g    [        S5      e)	Nr^   z<script[^>]+src="([^"]+)"Ffatalz#client_id\s*:\s*"([0-9a-zA-Z]{32})"z	client idry   zUnable to extract client id)_download_webpagereversedrz   findall_search_regex
_CLIENT_IDr   r	   )rH   webpagesrcscriptr   s        rK   _update_client_id"SoundcloudBaseIE._update_client_idx   s    (()BDIBJJ'CWMNC++CU+CFv ..:K / 7	 9&/O)))4 O :;;rN   c                 "   UR                  S5      SL nU(       a  US	 UR                  S0 5      R                  5       n[        S5       H)  nU R                  US'   XBS'    U R                  " U0 UD6s  $    g ! [
         a  n[        UR                  [        5      (       aA  UR                  R                  S;   a'  U R                  S 5        U R                  5          S nAM  U(       a   U R                  [        U5      5         S nA  ge S nAff = f)Nr   FrI   r   r   )    )rF   copyranger   _download_jsonr	   
isinstancecauser   statusr   r   report_warningstr)rH   argskwargs	non_fatalrI   _es          rK   	_call_apiSoundcloudBaseIE._call_api   s    JJw'50	w

7B',,.qA!%E+#7O
**D;F;;	 
 " aggy11aggnn
6R))$/**,''A/ s%    A77
DAD	!!D	D		Dc                 X    U R                   R                  SS5      =(       d    SU l        g )Nr]   r    a3e059563d7fd3372b49b37f00a00bcf)r   loadr   r   s    rK   _initialize_pre_login&SoundcloudBaseIE._initialize_pre_login   s    **//,DjHjrN   c                 0   U R                  U R                  U R                  U R                  -  -  S SS[        R
                  " SSU005      R                  5       S9(       a#  SU 3U R                  S'   U R                  5         g U R                  S5        g )	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_token$SoundcloudBaseIE._verify_oauth_token   s      ++t/L/Lt/^_5UZZ^U,C DELLN ! P 06eW-=DMM/* ^_rN   c                 z   ^  T R                   (       a  g [        U 4S j5      =n(       a  T R                  U5        g g )Nc                  T   > T R                  T R                  5      S   R                  $ )Noauth_token)_get_cookies	_BASE_URLvaluer   s   rK   <lambda>3SoundcloudBaseIE._real_initialize.<locals>.<lambda>   s    T%6%6t~~%F}%U%[%[rN   )r   r   r   r   s   ` rK   _real_initialize!SoundcloudBaseIE._real_initialize   s2    ==[\\5\$$U+ ]rN   c                     US:w  a  [        SU R                  SS9 3SS9eU R                  (       a  g U R                  U5        g )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_loginSoundcloudBaseIE._perform_login   sZ    w ++9+=>@JNP P ==  *	rN   c           
      l   SnSnSnSnSnSn	Sn
SnSnS	nS
nSnUnUnSR                  XEXgXX4 Vs/ s H  n[        U5      PM     sn5      nX-   U-   U-   U-   U-   U-   U-   nSn[        [        U5      5       H'  nUS-	  SU-  S-  -   nU[	        UU   5      -  nUS-  nM)     U SU SUS SU 3$ s  snf )N!   r   i; u   i@w i  %       0763ed7314c69015fd4a0dc16bbf4b908r_   -i>z    i :x)r}   r   r   lenord)rH   userpwclidaiswulbkcnyrr   tmIntdhmfs                          rK   signSoundcloudBaseIE.sign   s   . BHHQ1q,DE,DDc$i,DEFEAIMA!A%)s1vAaQUrM*AQqTNAMA  AaS!Aas## Fs   B1Nc                   ^^$ [        TS   5      n[        5       m$/ nSnSU R                  0nU(       a  X8S'   U(       d  TR                  S5      (       a  TR                  S5      (       a   U R	                  U R
                   SU S3US	XR                  S
9n	[!        U	S["        145      =n(       a  U R%                  ['        U5      USSSS9nU(       aa  UR(                  nT$R+                  U5        UR-                  S[/        U5      [1        UR2                  R                  S5      5      USSSS.5        U$4S jn[!        TSSS 45       GH  nU(       a    GOUS   nUS   nUR5                  S5      S    n[!        US!S"[         145      =(       d    S#nUR7                  S$5      (       a  S%nMc  US&:X  a  S#nUS':w  a  S(U;   a  S'nUS):X  d  S*U;   a  S+nU SU 3nUS,:X  a  U R                  S-U S.35        M  U R9                  U5      (       d  U R                  S/U S035        M  [!        U R;                  XS1U S23XR                  S
9S["        145      nU" U5      (       a  GM  T$R+                  U5        [!        US!S3[         145      nU R=                  S4US5S S69nS7S8S9.R                  U(       a  US S: OS 5      =(       d
    [?        US S69nU(       a  US;:X  a  UnUR                  S<5      S=:H  n[1        U R=                  S>US,S S69=(       d*    U R=                  S?US,S S69=(       d    U(       a  S@U;   a  SAOS 5      nUR                  SB5      =(       d#    SCU;   =(       d    [@        RB                  " SDU5      nUR-                  [E        UUU=(       a    SESSF9UUUSUUSG;   a  SHOS#US7:X  a  SIOS U(       a  SJOU(       a  USK:  a  S OSLU(       a  SMOS U(       a  SNOS SO.5        GM     U(       d<  U(       a  U RG                  U5        TR                  SP5      SQ:X  a  U RI                  S%SR9  TR                  SS5      =(       d    0 n/ nTR                  ST5      nU=(       d    UR                  SU5      n[#        U5      (       a  [@        RB                  " U RJ                  U5      =n(       a  U RL                  RO                  5        H  u  n n!U SV:X  a  URQ                  SW5      OSXnU [@        RR                  " U RJ                  SYU  SZU 3U5      S[.n"U S\:X  a
  U(       d  S]n!OU SV:X  a  SU"S^'   U!(       a  U"RU                  U!U!S_.5        UR-                  U"5        M     OSU0/nU4S` jn#0 SU_SaUR                  Sb5      _Sc[W        UR                  S5      5      =(       d    UR                  Sd5      _SeUR                  Sf5      _Sg[Y        TR                  Sh5      5      _SiTR                  Si5      _SjTR                  Si5      _SkTR                  Sk5      _SlU_Sm[[        TR                  Sm5      Sn5      _SoTR                  Sf5      _SpTR                  Sp5      _SqU#" Sr5      _SsU#" St5      =(       d    U#" Su5      _SvU#" Sw5      _SxU#" Sy5      _Sz[!        TS{[         1[\        [^        [\        45      _[!        TS|U R`                  Rb                  1S}S}[\        45      [!        TS~S[         1[\        [^        [\        45      U(       d  US.E$ S S.E$ ! [         a  n
[        U
R                  [        5      (       a=  U
R                  R                  S:X  a#  U R                  SU R                  5        35        Of[        U
R                  [        5      (       a,  U
R                  R                  S:X  a  U R                  S5        OU R                  U
R                  5        S n	 S n
A
GN?S n
A
ff = f)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                 *   > U (       + =(       d    U T;   $ NrO   )r   format_urlss    rK   invalid_url8SoundcloudBaseIE._extract_info_dict.<locals>.invalid_url!  s    70c[00rN   mediatranscodingsc                 6    [        US   5      =(       a    US   $ )Nr   preset)r   )r   vs     rK   r   5SoundcloudBaseIE._extract_info_dict.<locals>.<lambda>%  s    ;WXY^W_K`KpefgoepKprN   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_urlro   r   jpgr   .r   r   rg      r9  )widthheightc                 >   > [        TR                  U  S35      5      $ )N_count)r   rF   )keyinfos    rK   extract_count:SoundcloudBaseIE._extract_info_dict.<locals>.extract_count  s    txx3%v788rN   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   rz   searchr   
report_drmraise_geo_restricted_IMAGE_REPL_RE_ARTWORK_MAPitemsgroupsubupdater   r   r
   filterall_TAGS_REr   )%rH   rH  
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   rN  r=  r+   mobjimage_idsizer   rI  r  s%    `                                  @rK   _extract_info_dict#SoundcloudBaseIE._extract_info_dict   s   tDz?edoo.$0.! 8 8TXXFZ=[=[% $ 3 3(()
)DhDE[h[h !4 !j  ,MMK=;YZZ|Z,,-x9i?u - N !%JOOJ/NN%/3D9$/0@0@AQ0R$S)#%'1"($ 	1 dWn>p$qrA5Jx[F **3/2K#A*se'DEOH""#344=(!5 Vz%9 ?*.>*.L$"*1[M:e#  #45E4Fh!OP%%&677  1%5$66[!\] &dnn5E4FFW&X]] '5 '46;k]5KMJ :&&OOJ'$Q;(FGI&&':IwX\&]E cu%)$/Y 4@	SW3X  #-!y)T1J"":vud"K G%%&BJPU_c%dG&5F?CHC
 %%	* S(J6SYY'EzR  NN*8VZ=UI]`a! -59K-KMQW+.%<ZT *1ccSjr,6yD%/cT k sF )xx!W,))T)Bxx%2
hh}-9488L#9	y!!yy!4!4i@@t@&*&7&7&=&=&?NHd/7:/E$**U+5C&!vvd&9&9Qxj#;OQZ[A  6)+!!Z/*,,%)&*"  %%a(! '@$  %i01
	9
(
,
 ;txx~6O$((;:O
 DHH_5	

 *488L+AB
 TXXg&
 TXXg&
 488M2
 *
 dhhz&:DA
 488O4
 txx	*
 -
3
 -6P-:P
 ]95
  M)4!
" l4'C5&#v)NO#
$ !
T]]5J5J4KSRUW]'^_#D+?C5RXZ]_e*fg&2w)
 	
( 9=)
 	
O " 	%aggy11aggnn6K''1151A1A1C0DFG  33#8M$$%`a''. $	%s   ,,\ 
_C__c                 &    U R                   S-   U-   $ )Nzresolve?url=)r\  )clsr   s     rK   _resolv_urlSoundcloudBaseIE._resolv_url  s    .0366rN   )r   )NNF)!rP   rQ   rR   rS   _NETRC_MACHINEr\  r   _USER_AGENTr   _API_AUTH_URL_PWr   r   rf  rz   r   rn  rg  r   	functoolscached_propertyr   r   r   r   r   r   r   r   r  r  classmethodr  rY   rO   rN   rK   r[   r[   P   s    !N3L)I HK.TPH4Nzz./H L _ ?<(k`,(V$:l
\ 7 7rN   r[   c                      \ rS rSrSrSrSrSS0 SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_S\_S\_S\_S\_S S!_S"S#_S$S%0ES&.S'0 SS(_S	S
_SS)_SS)_SS*_SS+_SS,_SS-_SS._SS/_SS_S\_S\_S\_S\_S"S0_S S!_S1/S+// S2.ES3.S4S50 SS6_S	S7_SS8_SS8_SS9_SS:_SS;_SS<_SS=_SS>_SS_S\_S\_S\_S\_S"S?_S S!_S@// SA.ES&.SBS50 SS6_S	S7_SS8_SS8_SS9_SS:_SS;_SS<_SS=_SS>_SS_S\_S\_S\_S\_S"S?_S S!_S@// SA.ES&.SCSD0 SSE_S	S
_SSF_SSF_SSG_SSH_SSI_S"SJ_SSK_SSL_SSM_S S!_SS_S\_S\_S\_S\_SN/SH/SOS2.ESP/SQ.SRSS0 SST_S	S
_SSU_SSU_SSV_SSW_SSX_SSY_SSZ_SS[_SS_S\_S\_S\_S\_S S!_S"S\_S]/S^/S_S2.ESP/SQ.S`Sa0 SSb_S	S7_SSc_SSc_SSd_SSe_SSf_SSg_SSh_SSi_S S!_SS_S\_S\_S\_S\_S"Sj_Sk// Sl.ESmSn0So.SpSq0 SSr_S	Ss_SSt_SSt_SSu_SSv_SSw_SSx_SSy_SSz_S S!_SS_S\_S\_S\_S\_S{S|/_S}S~S.ESmSn0So.S0 SS_S	Ss_SS_SSG_SS_SS_S"S_S\_S\_S\_S\_SS_S$/ _SS/_SS_SS_SS_SS!SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS./
S.ESnSS.S.SSS.SSS.SSS./rS r	Sr
g)r   i  a5  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>[^&]+))?)
                    )
                    r]   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'   rP  rR  rU  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20250117rf   z?https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-mini.jpgrA  rg   z?https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-tiny.jpgrh   z@https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-small.jpgri   z@https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-badge.jpgrj   zAhttps://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-t67x67.jpgrk   z@https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-large.jpgrl   zChttps://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-t300x300.jpgrm   z?https://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-crop.jpgrn   zChttps://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-t500x500.jpgro   zChttps://i1.sndcdn.com/artworks-a1wKGMYNreDLTMrT-fGjRiw-original.png)r&   r+   rN  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                    U R                  U5      nUR                  S5      n0 nU(       a1  U R                  S-   U-   nUnUR                  S5      nU(       a  XtS'   O^SR                  " UR                  SS5      6 =phUR                  S5      nU(       a  USU 3-  nU R	                  U R
                  U-   5      nU R                  XVS	X@R                  S
9n	U R                  5        H  n
 U R                  XU5      s  $    g ! [         af  n[        UR                  [        5      (       a  UR                  R                  S:w  a  e U R                  SSS9  UR                  U
l         S nAM  S nAff = f)Nrq  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_urlri  r\  r  r  r   r   r   RetryManagerr  r	   r   r   r   r   r   error)rH   r   r|  rq  rI   info_json_urlro  r   resolve_titlerH  retryr   s               rK   rL   SoundcloudIE._real_extract  sc   $$S)::j) --	9HDM!JJJ~.E(-n%)0JPW9X)YYJJJw'E1UG, ,,T^^m-KLM~~'>eUbUb  d &&(E	&..tGG ) " &!!''95539N##LW[ $ ]  gg&s   *D
E1AE,,E1rO   N)rP   rQ   rR   rS   __doc__rT   IE_NAMErW   rV   rL   rY   rO   rN   rK   r   r     sJ	   	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&gh'ij'ij(kl'ij!*op&gh!*op!*op) 
B %+nEI%N c U
 Ts|F| &rN   r   c                       \ rS rSrSS jrSrg)SoundcloudPlaylistBaseIEi  Nc                    [        US   5      nUR                  S5      =(       d    / n[        S U 5       5      (       da  U(       aZ  U R                  U R                  S-   USSR                  U Vs/ s H  n[        US   5      PM     sn5      UUS.U R                  S9n[        US[         14S	S
[         14S[         1S 14S.5      n/ nU H  n[        UR                  S5      5      n	UR                  S5      n
U
(       d*  U	(       d  M>  U R                  S-   U	-   n
U(       a  U
SU-   -  n
UR                  U R                  " U
[        R                  5       U	4SS0UD65        M     U R                  " XsUR                  S5      UR                  S5      40 UD[        US	S
[         14S	S[        14S.5      D6$ s  snf )Nr   tracksc              3   B   #    U  H  oR                  S 5      v   M     g7f)rL  N)rF   )r   r   s     rK   r   8SoundcloudPlaylistBaseIE._extract_set.<locals>.<genexpr>  s     :6a55))6s   zDownloading tracks,)ids
playlistIdplaylistSecretTokenr  r    r   r   set_typec                     U =(       d    S$ )Nr;   rO   )r   s    rK   r   7SoundcloudPlaylistBaseIE._extract_set.<locals>.<lambda>  s
    jrN   )r>   album_artistr@   rL  r  z?secret_token=url_transparentTr"   )r1   r2   )r   rF   rm  r   r\  r}   r   r   r   r`  rG   r   r   playlist_result)rH   r;   r   playlist_idr  r   
album_infoentriesr.   rq  r   s              rK   _extract_set%SoundcloudPlaylistBaseIE._extract_set  s   (4.)h'-2:6:::u^^!!H,k$886$B6aS4\6$BC"-+0-  == $ *F "(u%#Z#7%u/H.IJ-
 

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

 8#Z#7 &{m<& 	
 		
+ %Cs   1F;rO   r  )rP   rQ   rR   rS   r  rY   rO   rN   rK   r  r    s    %
rN   r  c            
       d    \ rS rSrSrSrSSSSSS	SS/S
S.SS.SSS.SSS.SSS.SSS./rS rSrg)SoundcloudSetIEi  zuhttps?://(?:(?: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                    U R                  U5      nSR                  " UR                  SS5      6 nUR                  S5      nU(       a  USU-   -  nU R                  U R	                  U R
                  U-   5      X0R                  S9nSU;   a5  S US    5       n[        S	R                  S
R                  U5      5      5      eU R                  XT5      $ )Nz
{}/sets/{}r1   
slug_titler   r  r	  errorsc              3   >   #    U  H  n[        US    5      v   M     g7ferror_messageNr   r   errs     rK   r   0SoundcloudSetIE._real_extract.<locals>.<genexpr>2  s     H#CO,--   z$unable to download video webpage: {}r  )
r  r  ri  r   r  r   r   r	   r}   r  )rH   r   r|  ro  r   rH  msgss          rK   rL   SoundcloudSetIE._real_extract&  s    $$S)!(($**Z*NO


7##+%J~~d..NNZ')*4mm  M tHhHD !G!N!NsxxX\~!^__  --rN   rO   N	rP   rQ   rR   rS   rT   r  rV   rL   rY   rO   rN   rK   r  r    s     JJGR+A+$+12	
  Y H N N-F6.rN   r  c                        \ rS rSrS rS rSrg)SoundcloudPagedPlaylistBaseIEi8  c                 .    SUUU R                  X5      S.$ )Nr;   )_typer   r    r  )_entries)rH   base_urlr  playlist_titles       rK   _extract_playlist/SoundcloudPagedPlaylistBaseIE._extract_playlist9  s!    #}}X;	
 	
rN   c              #   V  ^ #    SSSS.n[         R                  " 5        H  nT R                  5        H&  n T R                  XUT R                  SUS-    3S9n  O   U 4S	 jnWS
   =(       d    /  H,  nU" XwR                  S5      UR                  S5      5      v   M.     UR                  S5      nU(       d    g UR                  SS 5        M     g ! [
         aK  n[        UR                  [        5      (       a  UR                  R                  S:w  a  e Xul
         S nAM  S nAff = f7f)N   1r   limitlinked_partitioningoffsetzDownloading track page r   )rI   r	  r   i  c            
      ^  > U  H  n[        U[        5      (       d  M  [        UR                  S5      5      nU(       d  M=  TR	                  U[
        R                  U5      (       a  [
        R                  5       OS [        UR                  S5      5      UR                  S5      5      s  $    g )NrL  r   r    )	r   dictr   rF   rG   r   suitabler   r   )
candidatescandrL  rH   s      rK   resolve_entry=SoundcloudPagedPlaylistBaseIE._entries.<locals>.resolve_entryY  s    &D%dD11 $/0I$JM$}#)5A5J5J=5Y5YL//1_c'7'9J L L 'rN   
collectionr.   r;   	next_hrefr  )	itertoolscountr  r   r   r	   r   r   r   r   r  rF   pop)	rH   r   r  rI   r   r  responser   r  s	   `        rK   r  &SoundcloudPagedPlaylistBaseIE._entriesA  s     #&
 "A**,#~~t}}6q1ug>  .  @H  -	L l+1r1#AuuW~quuZ7HII 2 ,,{+CIIh%A # &  &aggy99QWW^^s=R"#Ks0   2D)"CA9D)
D&A D!D)!D&&D)rO   N)rP   rQ   rR   rS   r  r  rY   rO   rN   rK   r  r  8  s    
)&rN   r  c                       \ rS rSrSrSrSSSS.SS	.S
SSS.SS	.SSSS.SS	.SSSS.SS	.SSSS.SS	.SSSS.SS	.SSSS.SS	.SS S!S.SS	./rS"S#S$S%S&S'S(S)S*.rS+ rS,r	g-).SoundcloudUserIEim  am  (?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)rm  r  albumssetsrW  rT  	spotlightcommentsc           	         U R                  U5      nUR                  S5      nU R                  U R                  U R                  U-   5      USU R
                  S9nUR                  S5      =(       d    SnU R                  U R                  U R                  U   US   -  -   [        UR                  S5      5      SR                  US   UR                  5       5      5      $ )	Nr   Downloading user infor  rsrcrm  r   {} ({})r   )r  ri  r   r  r   r   r  r\  _BASE_URL_MAPr   rF   r  
capitalize)rH   r   r|  r1   r   resources         rK   rL   SoundcloudUserIE._real_extract  s    $$S)::f%~~T^^h67-t}}  F ::f%.%% 2 28 <tDz II'T*-x/B/B/DEG 	GrN   rO   N
rP   rQ   rR   rS   rT   r  rV   r  rL   rY   rO   rN   rK   r  r  m  s   J  G:&
   B)
   B)
  4(
  7+
  7'
  <,
  F1
 c8Fv !##$,!)'	MGrN   r  c                   6    \ rS rSrSrSrSSSS.SS	./rS
 rSrg)SoundcloudUserPermalinkIEi  z/https?://api\.soundcloud\.com/users/(?P<id>\d+)zsoundcloud:user:permalinkz)https://api.soundcloud.com/users/3090986930909869neilcicr     rB   c                     U R                  U5      nU R                  U R                  U5      USU R                  S9nU R	                  U R
                   SUS    S3[        US   5      UR                  S5      5      $ )Nr  r  zusers/r   z/tracksr   )	_match_idr   r  r   r  r\  r   rF   )rH   r   user_idr   s       rK   rL   'SoundcloudUserPermalinkIE._real_extract  s    ..%~~S!7,CT]]  \ %%  !T
|7;Sd_dhhWaNbd 	drN   rO   Nr  rO   rN   rK   r#  r#    s1    CJ)G:
   FdrN   r#  c                   6    \ rS rSrSrSrSSSS.SS	./rS
 rSrg)SoundcloudTrackStationIEi  zNhttps?://(?:(?:www|m)\.)?soundcloud\.com/stations/track/[^/]+/(?P<id>[^/?#&]+)zsoundcloud:trackstationz?https://soundcloud.com/stations/track/officialsundial/your-text	286017854zTrack station: your textr  rc   rB   c                 *   U R                  U5      nU R                  U R                  U5      X R                  S9nU R	                  SUS   S5      nU R                  U R                  SR                  US   5      -   USR                  US   5      5      $ )Nr  zsoundcloud:track-stations:(\d+)r   ztrack idzstations/{}/trackszTrack station: {}r    )r(  r   r  r   r   r  r\  r  )rH   r   
track_namer.   rq  s        rK   rL   &SoundcloudTrackStationIE._real_extract  s    ^^C(
t//4j--X%%.dZI %% 4 ; ;E$K HH)00w@B 	BrN   rO   Nr  rO   rN   rK   r,  r,    s1    bJ'GP/
   F	BrN   r,  c                   b    \ rS rSrSrSrSSSS.SS	.S
SSS.SS	.SSSS.SS	./rSSSS.rS rSr	g)SoundcloudRelatedIEi  zjhttps?://(?:(?: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           	      4   U R                  U5      R                  SS5      u  p#U R                  U R                  U R                  U-   5      USU R
                  S9nUR                  S5      (       a3  [        U R                   S3SR                  S US    5       5      -  S	S
9eU R                  U R                  U R                  U   US   -  -   [        US   5      SR                  UR                  S5      =(       d    UUR                  5       5      5      $ )NslugrelationzDownloading track infor  r  z	 said: %sr  c              3   >   #    U  H  n[        US    5      v   M     g7fr  r  r  s     rK   r   4SoundcloudRelatedIE._real_extract.<locals>.<genexpr>"  s"      GF5DcC())_r  Tr   r   r  r    )r  ri  r   r  r   r   rF   r	   r  r}   r  r\  r  r   r  r  )rH   r   r7  r8  r.   s        rK   rL   !SoundcloudRelatedIE._real_extract  s   ..s399&*MT^^d23*DMM  C 99X DLL>!;chh GF5:8_GF ?F "FPTV V %% 2 28 <uT{ JJCPUVZP[L\UYYw/749L9L9NOQ 	QrN   rO   Nr!  rO   rN   rK   r2  r2    sy    ~J"GL8
   H3
  F1
 F0 %4*MQrN   r2  c            
       D    \ rS rSrSrSrSSSSSS	S/S
SS.SS./rS rSrg)SoundcloudPlaylistIEi*  zfhttps?://api(?:-v2)?\.soundcloud\.com/playlists/(?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_countc                     U R                  U5      nUR                  S5      n0 nUR                  S5      nU(       a  XTS'   U R                  U R                  S-   U-   USX@R                  S9nU R                  Xe5      $ )Nr   r   rE   z
playlists/zDownloading playlistr  )r  ri  r   r\  r   r  )rH   r   r|  r  rI   r   r   s          rK   rL   "SoundcloudPlaylistIE._real_extract<  s    $$S)jj&

7#$).!~~,{:/umm  U   --rN   rO   Nr  rO   rN   rK   r=  r=  *  sE    zJ#G=UA*%01$U	
  F.rN   r=  c                   H    \ rS rSrSrSrSrSSSS.SS	./rS
rSr	S r
S rSrg)SoundcloudSearchIEiL  zsoundcloud:searchzSoundcloud searchscsearchzscsearch15:post-avant jazzcorezpost-avant jazzcorer     r@  r  2   c              +   :  #    [        UR                  SU R                  5      U R                  5      nUR	                  USSS.5        [        U R                  U-   U5      n[        R                  " S5       H  nU R                  XRSU 3SU R                  S9nUR                  S5      =(       d    /  HE  nU(       d  M  U R                  " US	   [        R                  5       40 U R                  US
S9D6v   MG     UR                  S5      nU(       a  M    g    g 7f)Nr  r   r   r  zDownloading page zUnable to download API pager  r  uriT)rp  r  )minrF   _DEFAULT_RESULTS_PER_PAGE_MAX_RESULTS_PER_PAGErk  r   r\  r  r  r   r   rG   r   r   r  )	rH   endpointcollection_idrI   r  next_urlr   r  items	            rK   _get_collection"SoundcloudSearchIE._get_collection\  s    IIgt==>&&( 	#$
 	
 $D$5$5$@%H#A~~+<QC)@-t}} & FH !\28b84//U\%8%8%:p>B>U>UVZim>U>np p 9
  ||K0H8 $s   B9D?ADDc                     U R                  [        R                  " U R                  SXUS9SU[	        S5      :X  a  S OU5      X5      $ )Nzsearch/tracks)r  qr   inf)r  r  islicerR  float)rH   rI   r   s      rK   _get_n_results!SoundcloudSearchIE._get_n_resultsu  sN    ##I$4$4  %E JqE%L(ta%127@ 	@rN   rO   N)rP   rQ   rR   rS   r  IE_DESC_SEARCH_KEYrV   rM  rL  rR  rY  rY   rO   rN   rK   rE  rE  L  sI    !G!GK/'*
  F   "2@rN   rE  )&r  r  r   rz   commonr   r   
networkingr   networking.exceptionsr   utilsr	   r
   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r[   r   r  r  r  r  r#  r,  r2  r=  rE  rO   rN   rK   <module>rb     s       	 6 $ -    +3( 3(lU7} U7p
t&# t&n	&
/ &
R-.. -.`2&$4 2&j]G4 ]G@d = d*B< B0-Q7 -Q`.3 .D,@)+> ,@rN   