o
    i)                     @   s   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 deZ	G dd	 d	e	Z
G d
d de
ZG dd de	ZG dd deZdS )    N   )InfoExtractor   )ExtractorErrorstr_or_nonetry_getc                       sT   e Zd ZdZdZdd Z fddZedd Z			
	d fdd	Z	dd Z
  ZS )AudiusBaseIENz/v1c                 C   sR   t |tr%|d}|d ur|S t|dkr%d|v r%td|d ddtd)Ndatar   messagezAPI error: {}TexpectedUnexpected API response)
isinstancedictgetlenr   format)selfresponseresponse_data r   K/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/audius.py_get_response_data   s   

zAudiusBaseIE._get_response_datac                    s@   t  jddddd}| |}t|trt|| _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__r   r   _select_api_base   s   

zAudiusBaseIE._select_api_basec                 C   sL   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_titler   r   r   _prepare_url"   s   
zAudiusBaseIE._prepare_urlDownloading JSON metadata Unable to download JSON metadatac              
      s|   | j d u r	|   zt j| j  | j | ||||d}W n ty8 } zdt|v r2tddd|d }~w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   r1   r   excr#   r   r   _api_request3   s    


zAudiusBaseIE._api_requestc                 C   s   | j d| |ddS )Nz/resolve?url=i  )r1   )r7   )r   r+   r5   r   r   r   _resolve_urlD   s   zAudiusBaseIE._resolve_url)Nr/   r0   N)__name__
__module____qualname__r!   r2   r   r%   staticmethodr.   r7   r8   __classcell__r   r   r#   r   r      s    

r   c                   @   sr   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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)idr,   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)rF   r,   rG   rI   rJ   rK   rL   rM   rN   rO   rP      i  i  )150x150480x480	1000x1000c                 C   sJ  |  |}t|dd }|d u r"|d}| ||}| ||}nd }| d| |}t|ts6td|	d}|d u rCtd|	d}g }t|tro|
 D ]\}}	d	|	i}
| j	|}|d uri||
d
< ||
 qS||	d|| j d| dd|	d|	d|	dt|dd t|	d||	d|	d|	ddS )Nc                 S   s
   |  dS )Ntrack_id)groupxr   r   r   <lambda>|   s   
 z(AudiusIE._real_extract.<locals>.<lambda>r,   z/tracks/r   rF   zUnable to get ID of the trackartworkr+   
preferencez/v1/tracks/z/streamrA   rH   rI   c                 S   s   | d d S )Nusernamer   r^   r   r   r   r`      s    rL   
play_countfavorite_countrP   )rF   r,   r+   rG   rH   rI   rJ   rK   rL   
thumbnailsrN   rO   rP   )_match_valid_urlr   r]   r.   r8   r7   r   r   r   r   items_ARTWORK_MAPappendr!   r3   )r   r+   mobjr\   r,   
track_dataartworks_datarg   quality_keythumbnail_urlrM   quality_coder   r   r   _real_extractz   sJ   






zAudiusIE._real_extractN)	r9   r:   r;   
_VALID_URLIE_DESCint_TESTSrj   rr   r   r   r   r   r>   I   sP    )r>   c                   @   s,   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)r9   r:   r;   rs   IE_NAMErt   rv   r   r   r   r   rw      s    rw   c                   @   s<   e Zd ZdZdZdZdddddd	d
Zdd Zd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)rF   r,   rH      r+   rR   playlist_countc                 C   s^   g }|D ](}t |tstdt|d}|std|| jd| t |d q|S )Nr   rF   z$Unable to get track ID from playlistzaudius:)ievideo_id)	r   r   r   r   r   rk   
url_resultrw   ie_key)r   tracksentriesrJ   r\   r   r   r   _build_playlist   s   

z AudiusPlaylistIE._build_playlistc           	      C   s   |    | |}|d}| ||}| ||}t|tr%t|dkr)td|d }t|t	s6td|
d}|d u rCtd| jd| d|d	d
d}t|tsYtd| |}| |||
d||
dS )Nr,   r   r   r   rF   zUnable to get playlist IDz/playlists//tracksz$Downloading playlist tracks metadataz+Unable to download playlist tracks metadatar   playlist_namerH   )r%   rh   r]   r.   r8   r   r   r   r   r   r   r7   r   playlist_result)	r   r+   rl   r,   playlist_responseplaylist_dataplaylist_idplaylist_tracksr   r   r   r   rr      s2   







zAudiusPlaylistIE._real_extractN)	r9   r:   r;   rs   ry   rt   _TESTr   rr   r   r   r   r   rz      s    
rz   c                   @   s4   e Zd ZdZdZdZdddddd	d
Zd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)rF   rH   r,      r}   c              
   C   s   |    | |}z
| d| |}W n ty' } ztdt| d }~ww |d d }|d d}| d| d|}| | ||||S )Nz/full/users/handle/z!Could not download profile info; r   rF   bior   )r%   	_match_idr7   r   r3   r   r   r   )r   r+   
profile_id_profile_dataeprofile_audius_idprofile_bioapi_callr   r   r   rr     s   
zAudiusProfileIE._real_extractN)r9   r:   r;   ry   rt   rs   r   rr   r   r   r   r   r      s    
r   )r   urllib.parser'   commonr   utilsr   r   r   r   r>   rw   rz   r   r   r   r   r   <module>   s    Ab;