
    }j)                         d dl Z d dlZddlmZ ddlmZ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y)    N   )InfoExtractor   )ExtractorErrorstr_or_nonetry_geturl_or_nonec                   T     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              rF|j                  d      }||S t        |      dk(  r#d|v rt	        dj                  |d         d      t	        d      )Ndatar   messagezAPI error: {}TexpectedUnexpected API response)
isinstancedictgetlenr   format)selfresponseresponse_datas      J/root/.hermes/venv/lib/python3.12/site-packages/yt_dlp/extractor/audius.py_get_response_datazAudiusBaseIE._get_response_data   sg    h%$LL0M($$8}!i8&;$_%;%;HY<O%P.24 4677    c                     t         |   dddd      }| j                  |      }t        |t              rt        j                  |      | _        y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   s]    7)$d1; * = ''1eT"#]]51DN@AAr   c                     t         j                  j                  |       } t         j                  j                  |      }d|v sd|v r4|j                  dd      j                  dd      }| j                  ||      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"   sl     ll""3'$$U+%<5E>--U3;;E5IK;;uk22
r   c                    | j                   | j                          	 t        |   | j                    | j                   | ||||      }| j                  |      S # t
        $ r!}dt        |      v rt        dd      |d }~ww xY w)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    r5   r   excr(   s	           r   _api_requestzAudiusBaseIE._api_request3   s     >>!!!#		w->>"4;;-v6d . BH &&x00  	%S1$%X.24 4I	s   .A 	B'BBc                 0    | j                  d| |d      S )Nz/resolve?url=i  )r5   )r;   )r   r0   r9   s      r   _resolve_urlzAudiusBaseIE._resolve_urlD   s(      =!614 ! 6 	6r   )NzDownloading JSON metadataz Unable to download JSON metadataN)__name__
__module____qualname__r&   r6   r   r)   staticmethodr3   r;   r=   __classcell__)r(   s   @r   r   r      sB    IF8
B    5P?%)1"6r   r   c                   p    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y)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)idr1   extdescriptiondurationtrackartistgenre	thumbnail
view_count
like_countrepost_count)r0   md5	info_dictz%https://audius.co/voltra/radar-103692 491898a0a8de39f20c5d6a8a80ab5132KKdy2RADARi>  voltraTrance)rL   r1   rM   rO   rP   rQ   rR   rS   rT   rU   rV      i  i  )150x150480x480	1000x1000c                    | j                  |      }t        |d       }|6|j                  d      }| j                  ||      }| j	                  ||      }nd }| j                  d| |      }t        |t              st        d      |j                  d      }|t        d      |j                  d      }g }t        |t              r[|j                         D ]H  \  }}	t        |	      sd|	i}
| j                  j                  |      }|||
d	<   |j                  |
       J ||j                  d|      | j                   d
| dd|j                  d      |j                  d      |j                  d      t        |d t              |j                  d      ||j                  d      |j                  d      |j                  d      dS )Nc                 $    | j                  d      S )Ntrack_id)groupxs    r   <lambda>z(AudiusIE._real_extract.<locals>.<lambda>|   s    177:+> r   r1   z/tracks/r   rL   zUnable to get ID of the trackartworkr0   
preferencez/v1/tracks/z/streamrG   rN   rO   c                     | d   d   S )Nusername rf   s    r   rh   z(AudiusIE._real_extract.<locals>.<lambda>   s    AfIf4E r   rR   
play_countfavorite_countrV   )rL   r1   r0   rM   rN   rO   rP   rQ   rR   
thumbnailsrT   rU   rV   )_match_valid_urlr   re   r3   r=   r;   r   r   r   r   itemsr	   _ARTWORK_MAPappendr&   r7   )r   r0   mobjrd   r1   
track_dataartworks_datarq   quality_keythumbnail_urlrS   quality_codes               r   _real_extractzAudiusIE._real_extractz   s   $$S)4!>?JJw'E##C/C**36JE**XhZ+@(KJ*d+ !:;;>>$' !@AA"y1
mT*.;.A.A.C 	-*]"=1=	  $0044[A+.:Il+!!),	- ^^GU3nn%[
'B%>>-8"z2^^G,j*EsK^^G,$$..6$..)9:&NN>:
 	
r   N)	r>   r?   r@   
_VALID_URLIE_DESCint_TESTSrt   r|   rn   r   r   rD   rD   I   s    wJG s5P,P %3!! #		
* ;5  "!3!! #		
)&FR L0
r   rD   c                   ,    e Zd ZdZdZdZddddddgZy)	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)r0   only_matchingzRaudius:http://discoveryprovider.audius.prod-us-west-2.staked.cloud/v1/tracks/9RWloN)r>   r?   r@   r}   IE_NAMEr~   r   rn   r   r   r   r      s3    ]JGCG "!	

 h!	
	Fr   r   c                   8    e Zd ZdZdZdZdddddd	d
Zd Zd Zy)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)rL   r1   rN      r0   rX   playlist_countc                    g }|D ]|  }t        |t              st        d      t        |j	                  d            }|st        d      |j                  | j                  d| t        j                         |             ~ |S )Nr   rL   z$Unable to get track ID from playlistzaudius:)ievideo_id)	r   r   r   r   r   ru   
url_resultr   ie_key)r   tracksentriesrP   rd   s        r   _build_playlistz AudiusPlaylistIE._build_playlist   s     	?EeT*$%>??"599T?3H$%KLLNN4??($ '')H + > ?	? r   c                 l   | j                          | j                  |      }|j                  d      }| j                  ||      }| j	                  ||      }t        |t              rt        |      dk7  rt        d      |d   }t        |t              st        d      |j                  d      }|t        d      | j                  d| d|d	d
      }t        |t              st        d      | j                  |      }| j                  |||j                  d|      |j                  d            S )Nr1   r   r   r   rL   zUnable to get playlist IDz/playlists//tracksz$Downloading playlist tracks metadataz+Unable to download playlist tracks metadatar   playlist_namerN   )r)   rr   re   r3   r=   r   r#   r   r   r   r   r;   r   playlist_result)	r   r0   rv   r1   playlist_responseplaylist_dataplaylist_idplaylist_tracksr   s	            r   r|   zAudiusPlaylistIE._real_extract   sB   $$S)

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

 EFr   r   c                   2    e Zd ZdZdZdZdddddd	d
Zd Zy)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)rL   rN   r1      r   c                 j   | j                          | j                  |      }	 | j                  d|z   |      }|d   d   }|d   j                  d      }| j                  d| d|      }| j                  | j                  |      |||      S # t        $ r}t        dt	        |      z         d }~ww xY w)Nz/full/users/handle/z!Could not download profile info; r   rL   bior   )r)   	_match_idr;   r   r7   r   r   r   )r   r0   
profile_id_profile_dataeprofile_audius_idprofile_bioapi_calls           r   r|   zAudiusProfileIE._real_extract  s    ^^C(
	O --.Cj.PR\]M *!,T2#A&**51$$'::,g%NPZ[##D$8$8$BDUWacnoo  	O !Ds1v!MNN	Os   B 	B2B--B2N)r>   r?   r@   r   r~   r}   r   r|   rn   r   r   r   r      s4    G.GJJ'E

 Epr   r   )r$   urllib.parser,   commonr   utilsr   r   r   r	   r   rD   r   r   r   rn   r   r   <module>r      sZ      ! E E>6= >6Ba
| a
HH  8F| 8Fvp& pr   