
    VGh)                         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y)    N   )InfoExtractor   )ExtractorErrorstr_or_nonetry_getc                   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      `/var/www/it7/html/youtubeDownloader/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   r4   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  )r4   )r:   )r   r/   r8   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%   r5   r   r(   staticmethodr2   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)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)rK   r0   rL   rN   rO   rP   rQ   rR   rS   rT   rU      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              rO|j                         D ]<  \  }}	d|	i}
| j                  j                  |      }|||
d	<   |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   r0   z/tracks/r   rK   zUnable to get ID of the trackartworkr/   
preferencez/v1/tracks/z/streamrF   rM   rN   c                     | d   d   S )Nusername re   s    r   rg   z(AudiusIE._real_extract.<locals>.<lambda>   s    AfIf4E r   rQ   
play_countfavorite_countrU   )rK   r0   r/   rL   rM   rN   rO   rP   rQ   
thumbnailsrS   rT   rU   )_match_valid_urlr   rd   r2   r<   r:   r   r   r   r   items_ARTWORK_MAPappendr%   r6   )r   r/   mobjrc   r0   
track_dataartworks_datarp   quality_keythumbnail_urlrR   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 -*]=	  $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_TESTSrs   r{   rm   r   r   rC   rC   I   s    wJG s5P,P %3!! #		
* ;5  "!3!! #		
)&FR L.
r   rC   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)r/   only_matchingzRaudius:http://discoveryprovider.audius.prod-us-west-2.staked.cloud/v1/tracks/9RWloN)r=   r>   r?   r|   IE_NAMEr}   r   rm   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)rK   r0   rM      r/   rW   playlist_countc                    g }|D ]|  }t        |t              st        d      t        |j	                  d            }|st        d      |j                  | j                  d| t        j                         |             ~ |S )Nr   rK   z$Unable to get track ID from playlistzaudius:)ievideo_id)	r   r   r   r   r   rt   
url_resultr   ie_key)r   tracksentriesrO   rc   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 )Nr0   r   r   r   rK   zUnable to get playlist IDz/playlists//tracksz$Downloading playlist tracks metadataz+Unable to download playlist tracks metadatar   playlist_namerM   )r(   rq   rd   r2   r<   r   r"   r   r   r   r   r:   r   playlist_result)	r   r/   ru   r0   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{   rm   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)rK   rM   r0      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   rK   bior   )r(   	_match_idr:   r   r6   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\]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{   rm   r   r   r   r      s4    G.GJJ'E

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