
    Ği)                         d dl Z d dlZddlmZ ddlmZmZ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dS )    N   )InfoExtractor   )ExtractorErrorstr_or_nonetry_getc                   Z     e Zd ZdZdZd Z fdZed             Z	 	 	 d
 fd	Z	d	 Z
 xZS )AudiusBaseIENz/v1c                     t          |t                    rZ|                    d          }||S t          |          dk    r.d|v r*t	          d                    |d                   d          t	          d          )Ndatar   messagezAPI error: {}TexpectedUnexpected API response)
isinstancedictgetlenr   format)selfresponseresponse_datas      \C:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/audius.py_get_response_datazAudiusBaseIE._get_response_data   s    h%% 	4$LL00M($$8}}!!i8&;&;$_%;%;HY<O%P%P.24 4 4 46777    c                     t                                          dddd          }|                     |          }t          |t                    rt          j        |          | _        dS t          d          )z2Selecting one of the currently available API hostszhttps://api.audius.co/NzRequesting available API hostsz%Unable to request available API hostsnoteerrnotez!Unable to get available API hosts)	super_download_jsonr   r   listrandomchoice	_API_BASEr   )r   r   hosts	__class__s      r   _select_api_basezAudiusBaseIE._select_api_base   sx    77))$d1; * = = ''11eT"" 	#]511DNF@AAAr   c                    t           j                            |           } t           j                            |          }d|v sd|v r@|                    dd                              dd          }|                     ||          S | S )a  
        Audius removes forward slashes from the uri, but leaves backslashes.
        The problem is that the current version of Chrome replaces backslashes
        in the address bar with a forward slashes, so if you copy the link from
        there and paste it into youtube-dl, you won't be able to download
        anything from this link, since the Audius API won't be able to resolve
        this url
        /z%2Fz%5C)urllibparseunquotereplace)urltitlefixed_titles      r   _prepare_urlzAudiusBaseIE._prepare_url"   s{     l""3''$$U++%<<5E>>--U33;;E5IIK;;uk222
r   Downloading JSON metadata Unable to download JSON metadatac                 @   | j         |                                  	 t                                          | j          | j         | ||||          }n6# t
          $ r)}dt          |          v rt          dd          |d }~ww xY w|                     |          S )N)r   r   expected_statuszFailed to parse JSONz1An error occurred while receiving data. Try againTr   )r%   r(   r    r!   _API_Vr   strr   )	r   pathitem_idr   r   r6   r   excr'   s	           r   _api_requestzAudiusBaseIE._api_request3   s     >!!!###		ww-->64;666d . B BHH  	 	 	%S11$%X.24 4 4 4I	 &&x000s   6A 
B$BBc                 8    |                      d| |d          S )Nz/resolve?url=i  )r6   )r<   )r   r/   r:   s      r   _resolve_urlzAudiusBaseIE._resolve_urlD   s/      !6!6!614 ! 6 6 	6r   )Nr3   r4   N)__name__
__module____qualname__r%   r7   r   r(   staticmethodr2   r<   r>   __classcell__)r'   s   @r   r
   r
      s        IF8 8 8
B 
B 
B 
B 
B   \  5P?%)1 1 1 1 1 1"6 6 6 6 6 6 6r   r
   c                   r    e Zd ZdZdZddddddd	dd
ddeeeddddddddddddeeeddgZddddZd ZdS )AudiusIEz_(?x)https?://(?:www\.)?(?:audius\.co/(?P<uploader>[\w\d-]+)(?!/album|/playlist)/(?P<title>\S+))z	Audius.coz]https://audius.co/test_acc/t%D0%B5%D0%B5%D0%B5est-1.%5E_%7B%7D/%22%3C%3E.%E2%84%96~%60-198631 92c35d3e754d5a0f17eef396b0d33582xd8gYu/   Tеееest/ 1.!@#$%^&*()_+=[]{};'\":<>,.?/№~`mp3Description   test
Electroniczre:https?://.*\.jpg)idr0   extdescriptiondurationtrackartistgenre	thumbnail
view_count
like_countrepost_count)r/   md5	info_dictz%https://audius.co/voltra/radar-103692 491898a0a8de39f20c5d6a8a80ab5132KKdy2RADARi>  voltraTrance)rM   r0   rN   rP   rQ   rR   rS   rT   rU   rV   rW      i  i  )150x150480x480	1000x1000c                 2   |                      |          }t          |d           }|B|                    d          }|                     ||          }|                     ||          }nd }|                     d| |          }t          |t                    st          d          |	                    d          }|t          d          |	                    d          }g }t          |t                    rT|
                                D ]?\  }}	d|	i}
| j        	                    |          }|||
d	<   |                    |
           @||	                    d|          | j         d
| dd|	                    d          |	                    d          |	                    d          t          |d t                    |	                    d          ||	                    d          |	                    d          |	                    d          dS )Nc                 ,    |                      d          S )Ntrack_id)groupxs    r   <lambda>z(AudiusIE._real_extract.<locals>.<lambda>|   s    177:+>+> r   r0   z/tracks/r   rM   zUnable to get ID of the trackartworkr/   
preferencez/v1/tracks/z/streamrH   rO   rP   c                     | d         d         S )Nusername rg   s    r   ri   z(AudiusIE._real_extract.<locals>.<lambda>   s    AfIf4E r   rS   
play_countfavorite_countrW   )rM   r0   r/   rN   rO   rP   rQ   rR   rS   
thumbnailsrU   rV   rW   )_match_valid_urlr   rf   r2   r>   r<   r   r   r   r   items_ARTWORK_MAPappendr%   r8   )r   r/   mobjre   r0   
track_dataartworks_datarr   quality_keythumbnail_urlrT   quality_codes               r   _real_extractzAudiusIE._real_extractz   s&   $$S))4!>!>??JJw''E##C//C**366JJE**+@h+@+@(KKJ*d++ 	< !:;;;>>$'' !@AAA"y11
mT** 	-.;.A.A.C.C - -*]=	  $044[AA+.:Il+!!),,,, ^^GU33nBBBBB%>>-88"z22^^G,,j*E*EsKK^^G,,$$..66$..)9::&NN>::
 
 	
r   N)	r?   r@   rA   
_VALID_URLIE_DESCint_TESTSru   r}   ro   r   r   rE   rE   I   s        wJG s5P,P %3!! # 		
 	
* ;5  "!3!! # 		
 	
)&FR  L.
 .
 .
 .
 .
r   rE   c                   .    e Zd ZdZdZdZddddddgZdS )	AudiusTrackIEzE(?x)(?:audius:)(?:https?://(?:www\.)?.+/v1/tracks/)?(?P<track_id>\w+)zaudius:trackz3Audius track ID or API link. Prepend with "audius:"zaudius:9RWloT)r/   only_matchingzRaudius:http://discoveryprovider.audius.prod-us-west-2.staked.cloud/v1/tracks/9RWloN)r?   r@   rA   r~   IE_NAMEr   r   ro   r   r   r   r      sI        ]JGCG "!	
 	

 h!	
 	
	FFFr   r   c                   :    e Zd ZdZdZdZdddddd	d
Zd Zd ZdS )AudiusPlaylistIEzVhttps?://(?:www\.)?audius\.co/(?P<uploader>[\w\d-]+)/(?:album|playlist)/(?P<title>\S+)zaudius:playlistzAudius.co playlistsz7https://audius.co/test_acc/playlist/test-playlist-22910DNvjNztest playlistzTest description

lol)rM   r0   rO      r/   rY   playlist_countc                 L   g }|D ]}t          |t                    st          d          t          |                    d                    }|st          d          |                    |                     d| t                                          |                     |S )Nr   rM   z$Unable to get track ID from playlistzaudius:)ievideo_id)	r   r   r   r   r   rv   
url_resultr   ie_key)r   tracksentriesrQ   re   s        r   _build_playlistz AudiusPlaylistIE._build_playlist   s     	? 	?EeT** @$%>???"599T??33H M$%KLLLNN4??$($$ ''))H + > > ? ? ? ? r   c                    |                                   |                     |          }|                    d          }|                     ||          }|                     ||          }t          |t                    rt          |          dk    rt          d          |d         }t          |t                    st          d          |
                    d          }|t          d          |                     d| d|d	d
          }t          |t                    st          d          |                     |          }|                     |||
                    d|          |
                    d                    S )Nr0   r   r   r   rM   zUnable to get playlist IDz/playlists//tracksz$Downloading playlist tracks metadataz+Unable to download playlist tracks metadatar   playlist_namerO   )r(   rs   rf   r2   r>   r   r"   r   r   r   r   r<   r   playlist_result)	r   r/   rw   r0   playlist_responseplaylist_dataplaylist_idplaylist_tracksr   s	            r   r}   zAudiusPlaylistIE._real_extract   s   $$S))

7##U++ --c599+T22 	<c:K6L6LPQ6Q6Q !:;;;)!,-.. 	< !:;;;#''-- !<===++.+...>A , C C /400 	< !:;;;&&77##G[$1$5$5ou$M$M$1$5$5m$D$DF F 	Fr   N)	r?   r@   rA   r~   r   r   _TESTr   r}   ro   r   r   r   r      sm        jJG#GH$4
 

  E  F F F F Fr   r   c                   4    e Zd ZdZdZdZdddddd	d
Zd ZdS )AudiusProfileIEzaudius:artistzAudius.co profile/artist pagesz6https?://(?:www)?audius\.co/(?P<id>[^\/]+)/?(?:[?#]|$)zhttps://audius.co/pzl/ezRo7z&TAMALE

Contact: officialpzl@gmail.compzl)rM   rO   r0      r   c                    |                                   |                     |          }	 |                     d|z   |          }n1# t          $ r$}t          dt	          |          z             d }~ww xY w|d         d         }|d                             d          }|                     d| d|          }|                     |                     |          |||          S )Nz/full/users/handle/z!Could not download profile info; r   rM   bior   )r(   	_match_idr<   r   r8   r   r   r   )r   r/   
profile_id_profile_dataeprofile_audius_idprofile_bioapi_calls           r   r}   zAudiusProfileIE._real_extract  s    ^^C((
	O --.Cj.PR\]]MM 	O 	O 	O !Ds1vv!MNNN	O)!,T2#A&**511$$%N:%N%N%NPZ[[##D$8$8$B$BDUWacnooos   A 
A3A..A3N)r?   r@   rA   r   r   r~   r   r}   ro   r   r   r   r      s^        G.GJJ'E
 

  Ep p p p pr   r   )r#   urllib.parser+   commonr   utilsr   r   r   r
   rE   r   r   r   ro   r   r   <module>r      sD        ! ! ! ! ! ! 8 8 8 8 8 8 8 8 8 8>6 >6 >6 >6 >6= >6 >6 >6B_
 _
 _
 _
 _
| _
 _
 _
D    H    8F 8F 8F 8F 8F| 8F 8F 8Fvp p p p p& p p p p pr   