
    uki                     v    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e      Zy)	    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            
           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        Zd Zd Zy)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                 N    t        |       d   t        j                         z
  dk  S )Nexpx   )r	   time)tokens    X/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/appleconnect.py_jwt_is_expiredzAppleConnectIE._jwt_is_expired@   s"    &u-		;cAA    c           
         | j                   r'| j                  | j                         s| j                   S t        |t        dddd      ht        hdt        | j                        ht        d      hf      }| j                  ||dd	      }t        i dd
dd      j                  d      d   }| j                  d| d|dd      | _         | j                  | j                         rt        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)_jwtr2   r   r   r   r   	_BASE_URLr   _download_webpager
   split_search_regexr   )selfwebpagevideo_idjs_urljsheaders         r1   
_get_tokenzAppleConnectIE._get_tokenD   s   99T11$))<99gh]"4PQ %'$..*A)BWXEVDW(Y Z ##H46SU BGL,QRXXY\]^_`&&vh&:;RAQY^ ' `			* !GHHyyr3   c           
         | j                  |      }| j                  ||      }| j                  d|d| j                  ||       | j                  d|dd      }t        |ddd	t        t        d
      hf      }g }t        t        | j                  j                                     }t        |dt        j                  hd f      D ]S  \  }}	|j                  d|| j                  j                  |       ||      |	dt!        t#        |	d       d             U ||| j%                  g d|      dt        |dt&        hfdt)        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)rA   querydata.
attributeszvideo informationassetTokensc                     t        |d         S )Nr   )r   )_vs     r1   <lambda>z.AppleConnectIE._real_extract.<locals>.<lambda>f   s    k!A$6G r3   r   )r"   	format_idheightqualityr(   )rV   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_idrG   _download_jsonrP   rF   r   anyr   r   list
_QUALITIESkeysdictitemsappendgetr   r   _html_search_metastrr   r   r   )
rJ   r(   rL   rK   videosrX   rb   r`   r^   src_urls
             r1   _real_extractzAppleConnectIE._real_extractV   s   >>#&((h7$$K#*4??7H+M*N!O.. &G4 % 6 "&CsW5H-I,J+L M
 D!5!5!789".zDJJ<)G<
 # 
	Iw NN&//--i8"9- #:gT#BDQ 
	 //DgO

 : 3%5D8Q7RS ,.?@BSE3O )K=9( 
 	
r3   )__name__
__module____qualname__IE_NAMEIE_DESCrF   ro   
_VALID_URL_TESTSrE   staticmethodr2   rP   ry    r3   r1   r   r      s    #G#G)I"& #J GJ;/%
 <K/%'
F0 DB B$'
r3   r   )r/   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   utils.traversalr   r   r   r   r   r3   r1   <module>r      s7     !    e
] e
r3   