o
    i                     @   sp   d dl Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
mZmZmZmZ ddlmZmZmZ G dd deZdS )	    N   )InfoExtractor   )ExtractorErrorextract_attributesfloat_or_nonejwt_decode_hs256
jwt_encodeparse_resolution	qualitiesunified_strdate
update_urlurl_or_noneurljoin)find_elementrequiretraverse_objc                
   @   s   e Zd ZdZdZdZdddddddZd	Zd
dddddddddddddddddddgZdZ	e
dd Zdd Zdd ZdS ) AppleConnectIEzapple:music:connectzApple Music Connectzhttps://music.apple.comNi  i  i8  )provisionalUploadVideosdVideosdVideoWithPlusAudiosd480pVideo720pHdVideo1080pHdVideoz2https?://music\.apple\.com/[\w-]+/post/(?P<id>\d+)z*https://music.apple.com/us/post/1018290019
1018290019m4vEnergygx&=f@zre:https?://.+\.png20150710Drake)idexttitleduration	thumbnailupload_dateuploader)url	info_dictz*https://music.apple.com/us/post/1016746627
1016746627z4Body Shop (Madonna) - Chellous Lima (Acoustic Cover)g7A`Hj@20150706zChellous Limac                 C   s   t | d t  dk S )Nexpx   )r   time)token r.   Q/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/appleconnect.py_jwt_is_expired@   s   zAppleConnectIE._jwt_is_expiredc                 C   s   | j r| | j s| j S t|tdddddhthdt| jhtdhf}| ||dd	}t	i dd
ddd
dd }| jd| d|ddd| _ | | j rTtd| j S )Nscriptcrossorigin T)tagattrvaluehtmlsrczJS URLzDownloading token JSzUnable to download token JSES256
WebPlayKid)algkid)headers.r   z(["\'])(?P<jwt>z(?:\.[\w-]+){2})\1zJSON Web Tokenjwt)groupz$The fetched token is already expired)_jwtr0   r   r   r   r   	_BASE_URLr   _download_webpager	   split_search_regexr   )selfwebpagevideo_idjs_urljsheaderr.   r.   r/   
_get_tokenD   s    zAppleConnectIE._get_tokenc           
   	   C   s   |  |}| ||}| jd|d| || | jd|ddd}t|ddd	ttd
hf}g }tt	| j
 }t|dtjhdd fD ]\}}	|d|| j
||||	dtt|	d ddd qF||| g d|dt|dthfdtddhfdthfdthtfdthfdS )Nz=https://amp-api.music.apple.com/v1/catalog/us/uploaded-videoszBearer )AuthorizationOriginzen-US)idsl)r=   querydata.
attributeszvideo informationassetTokensc                 S   s   t |d S )Nr   )r   )_vr.   r.   r/   <lambda>f   s    z.AppleConnectIE._real_extract.<locals>.<lambda>r   )r    	format_idheightqualityr&   )rQ   T)lenient)zog:imagezog:image:secure_urlztwitter:image)r   formatsr#   namedurationInMillisecondsi  )scale
uploadDate)
artistNameuploadingArtistNamepostUrl)r!   r"   r$   r%   webpage_url)	_match_idrC   _download_jsonrL   rB   r   anyr   r   list
_QUALITIESkeysdictitemsappendgetr
   r   _html_search_metastrr   r   r   )
rF   r&   rH   rG   videosrS   r\   rZ   rX   src_urlr.   r.   r/   _real_extractV   sR   



zAppleConnectIE._real_extract)__name__
__module____qualname__IE_NAMEIE_DESCrB   ri   
_VALID_URL_TESTSrA   staticmethodr0   rL   rs   r.   r.   r.   r/   r      sL    
r   )r,   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   r   utils.traversalr   r   r   r   r.   r.   r.   r/   <module>   s
    4