a
    hQ@                     @   s   d dl Z d dlZd dlZ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mZmZmZmZmZmZ ddl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G dd deZG dd deZ dS )    N   )InfoExtractor   )InAdvancePagedListISO639UtilsOnDemandPagedList
clean_htmlint_or_none
js_to_jsonmake_archive_id
orderedSetsmuggle_urlunified_strdateunified_timestampunsmuggle_urlurl_basenameurl_or_noneurlencode_postdataurljoinvariadic)traverse_objc                   @   sn   e Zd ZdZdZh dZejdd Zdd Z	di fd	d
Z
edddZedddZdd ZdddZdS )JioSaavnBaseIEz%https?://(?:www\.)?(?:jio)?saavn\.comz https://www.jiosaavn.com/api.php>   Z16128320Z32Z64c              
   C   sT   | j dddgdd}t|| j  }rPtdd| ddt| jtd	 |S )
Nbitrater   r   ZJioSaavn)Zie_keyzInvalid bitrate(s): , z. Valid bitrates are: )key)Z_configuration_argset_VALID_BITRATES
ValueErrorjoinsortedint)selfrequested_bitratesZinvalid_bitrates r%   N/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/jiosaavn.pyr$   "   s    z!JioSaavnBaseIE.requested_bitratesc                 c   s   t |ddthf }r"|d| | jD ]}| j| j|d d| dtdd||d dd	}t |d
thfs| d|  q(|	d}|d
 |dkrdn||t
|ddV  q(d S )N	more_infoencrypted_media_urlidzDownloading format info for Fzsong.generateAuthTokenjson)__call_formatr   url)fataldataZauth_urlz"Unable to extract format info for typeZmp4m4anone)r-   extZ	format_idZabrZvcodec)r   str
setdefaultr$   _download_json_API_URLr   r   Zreport_warninggetr"   )r#   	item_dataZ	media_urlr   Z
media_datar3   r%   r%   r&   _extract_formats+   s.    

	
zJioSaavnBaseIE._extract_formatsZAPIc                 C   s8   | j | j|d| dd| ddddd||d|d	S )
NzDownloading z JSONzUnable to download z
webapi.getr*   0Zweb6dot0)r+   r,   Z_markerctxtokenr0   )query)r6   r7   )r#   type_r=   Znoteparamsr%   r%   r&   	_call_apiF   s    zJioSaavnBaseIE._call_apiNc                 C   sR  t | dthfdthtfddthtfddthtfddthtfddthtfddtd	htfdd
thtfdthfdthdd hfdthfddd hfdthfdddddthtt	fd}|
dp| }rt||d< tt|d g|d< t | ddd hf }r|d | t | dthtf }r8|d |d t|d pHd |d< |S ) Nr)   )songtitleNr'   albumdurationlabelZlabel_idZ	label_urlzhttps://www.jiosaavn.com/release_dateyearimagec                 S   s   t dd| S )Nz
-\d+x\d+\.z	-500x500.)resubxr%   r%   r&   <lambda>_       z.JioSaavnBaseIE._extract_song.<locals>.<lambda>Z
play_countlanguagec                 S   s   t |  pdS )NZund)r   
short2longcasefoldrM   r%   r%   r&   rO   a   rP   	perma_urlr'   Z	artistMapprimary_artists.name)r)   rC   rE   rF   channel
channel_idchannel_urlrH   release_year	thumbnail
view_countrQ   webpage_urlartistsr]   
display_id_old_archive_idsc                 S   s   | r|  dS d S Nr   splitrM   r%   r%   r&   rO   i   rP   r^   featured_artistsr   )r   r4   r   anyr	   r   r   r   filterallr8   r   r   JioSaavnSongIEextendrc   r   )Z	song_datar-   infor]   rU   rd   r%   r%   r&   _extract_songS   s2    
zJioSaavnBaseIE._extract_songc                 C   s   t | |}|dd  |t| ddthfddthfddthfddthfddthfddthfdd	thfdd
thfddd hfd	 |S )Nr`   r'   descriptionZrelease_timeZ
show_titleshow_idZseason_titleZ	season_no	season_idepisode_numberZstarringc                 S   s   | r|  dS d S ra   rb   rM   r%   r%   r&   rO   ~   rP   z1JioSaavnBaseIE._extract_episode.<locals>.<lambda>)	rl   	timestampseries	series_idseasonseason_numberrn   ro   cast)r   rk   popupdater   r4   r   r	   )Zepisode_datar-   rj   r%   r%   r&   _extract_episodeq   s    








zJioSaavnBaseIE._extract_episodec                 C   s   t |\}}t|dthfdthfd}d|v rFd|v rFd|d i}n$| || || d }|||}t| ||d< |S )Nr)   r(   r)   r(   r   formats)r   r   r4   rA   	_match_idlistr:   )r#   r-   ZendpointZresponse_key
parse_funcZsmuggled_datar/   resultr%   r%   r&   _extract_jiosaavn_result   s    
z'JioSaavnBaseIE._extract_jiosaavn_resultc              
   c   s   |du r| j }t|g t|ttttfdd R D ]R}||}t|d t|dthfddthtfd}| j	|| j
fd	d
i|V  q4dS )z/Subclasses using this method must set _ENTRY_IENc                 S   s   |d o|d S )Nr)   rT   r%   )_vr%   r%   r&   rO      rP   z-JioSaavnBaseIE._yield_items.<locals>.<lambda>r]   r)   rD   r(   ry   Zurl_transparentT)rk   r   r   r4   bytesdictr   r   re   Z
url_result	_ENTRY_IE)r#   playlist_datakeysr}   r9   rj   r-   r%   r%   r&   _yield_items   s    
zJioSaavnBaseIE._yield_items)N)N)NN)__name__
__module____qualname___URL_BASE_REr7   r   	functoolscached_propertyr$   r:   rA   staticmethodrk   rx   r   r   r%   r%   r%   r&   r      s   
r   c                   @   s   e Zd ZdZejd Zdddddddd	d
edg ddgddddddddddddddd	dedddgddddd ddd!d"d#gZd$d% Z	d&S )'rh   zjiosaavn:songz9(?:/song/[^/?#]+/|/s/song/(?:[^/?#]+/){3})(?P<id>[^/?#]+)z1https://www.jiosaavn.com/song/leja-re/OQsEfQFVUXkZ 3b84396d15ed9e083c3106f1fa589c04ZIcoLuefJZOQsEfQFVUXkr1   zLeja Rere:https?://.+/.+\.jpg   i  )zSandesh ShandilyazDhvani BhanushalizTanishk Bagchizjiosaavnsong OQsEfQFVUXkzT-SeriesZhinZ34297z;https://www.jiosaavn.com/label/t-series-albums/6DLuXO3VoTo_Z20181124)r)   r_   r3   rC   rE   r[   rF   r\   rZ   r^   r`   rW   rQ   rX   rY   rH   r-   md5	info_dictz5https://www.jiosaavn.com/song/chuttamalle/P1FfWjZkQ0QZ 96296c58d6ce488a417ef0728fd2d680ZO94kBTtwZP1FfWjZkQ0QZChuttamallezDevara Part 1 - Telugu   i  zcount:3zjiosaavnsong P1FfWjZkQ0QtelZ20240926zJhttps://www.saavn.com/s/song/hindi/Saathiya/O-Humdum-Suniyo-Re/KAMiazoCblUTr-   Zonly_matchingc                 C   s   |  |dd| jS )NrB   songs)r   rk   r#   r-   r%   r%   r&   _real_extract   s    zJioSaavnSongIE._real_extractN
r   r   r   IE_NAMEr   r   
_VALID_URLr"   _TESTSr   r%   r%   r%   r&   rh      s^   
/rh   c                   @   sf   e Zd ZdZejd Zddddddd	d
ddddddddeddddddddddddgZdd Z	dS )JioSaavnShowIEzjiosaavn:showz./shows/[^/?#]+/(?P<id>[^/?#]{11,})/?(?:$|[?#])zNhttps://www.jiosaavn.com/shows/non-food-ways-to-boost-your-energy/XFMcKICOCgc_Z 0733cd254cfe74ef88bea1eaedcf1f4fZqqzh3RKZZXFMcKICOCgc_Zmp3z"Non-Food Ways To Boost Your Energyz$md5:26e7129644b5c6aada32b8851c3997c8z	Episode 1i az%Holistic Lifestyle With Neha RanglaniZ52397r   Z61273r   i7  i  ZengzSaavn OGZ1953876Z20211227)r)   r_   r3   rC   rl   episoderp   rq   rr   rs   rt   rn   r[   rF   r\   rZ   rQ   rW   rX   ro   Zupload_daterH   r   z=https://www.jiosaavn.com/shows/himesh-reshammiya/Kr8fmfSN4vo_Tr   c                 C   s   |  |dd| jS )Nr   Zepisodes)r   rx   r   r%   r%   r&   r      s    zJioSaavnShowIE._real_extractNr   r%   r%   r%   r&   r      sB   
 r   c                   @   s:   e Zd ZdZejd ZddddddgZeZ	d	d
 Z
dS )JioSaavnAlbumIEzjiosaavn:albumz/album/[^/?#]+/(?P<id>[^/?#]+)z.https://www.jiosaavn.com/album/96/buIOjYZDrNA_ZbuIOjYZDrNA_Z96r)   rC   
   )r-   r   Zplaylist_countc                 C   s8   |  |}| d|}| | |d|t|dthfS )NrE   r   rC   )r{   rA   playlist_resultr   r   r4   )r#   r-   r_   Z
album_datar%   r%   r&   r     s
    
zJioSaavnAlbumIE._real_extractN)r   r   r   r   r   r   r   r   rh   r   r   r%   r%   r%   r&   r      s   
r   c                   @   sn   e Zd ZdZejd Zddddddd	d
ddddddddddgZeZ	dZ
dd Zdd Zdd ZdS )JioSaavnPlaylistIEzjiosaavn:playlistz@/(?:s/playlist/(?:[^/?#]+/){2}|featured/[^/?#]+/)(?P<id>[^/?#]+)zjhttps://www.jiosaavn.com/s/playlist/2279fbe391defa793ad7076929a2f5c9/mood-english/LlJ8ZWT1ibN5084vKHRj2Q__ZLlJ8ZWT1ibN5084vKHRj2Q__zMood Englishr   i-  r-   r   Zplaylist_mincountzhhttps://www.jiosaavn.com/s/playlist/2279fbe391defa793ad7076929a2f5c9/mood-hindi/DVR,pFUOwyXqIp77B1JF,A__zDVR,pFUOwyXqIp77B1JF,A__z
Mood Hindii  z:https://www.jiosaavn.com/featured/taaza-tunes/Me5RridRfDk_ZMe5RridRfDk_zTaaza Tunes2   c                 C   s   |  d|d| || jdS )NZplaylistzplaylist page )pnrA   
_PAGE_SIZE)r#   r=   pager%   r%   r&   _fetch_page1  s    zJioSaavnPlaylistIE._fetch_pagec                 c   s.   |s|n|  ||d }| |dE d H  d S )Nr   r   )r   r   )r#   r=   Zfirst_page_datar   	page_datar%   r%   r&   _entries5  s    zJioSaavnPlaylistIE._entriesc                 C   s^   |  |}| |d}tt|d | j }| tt	| j
|||| j|t|dthfS )Nr   Z
list_countZlistname)r{   r   mathceilr"   r   r   r   r   partialr   r   r4   )r#   r-   r_   r   Ztotal_pagesr%   r%   r&   r   9  s    
z JioSaavnPlaylistIE._real_extractNr   r   r   r   r   r   r   r   rh   r   r   r   r   r   r%   r%   r%   r&   r     s4   
r   c                   @   sN   e Zd ZdZejd ZddddddgZeZ	d	Z
d
d Zdd Zdd ZdS )JioSaavnShowPlaylistIEzjiosaavn:show:playlistz0/shows/(?P<show>[^#/?]+)/(?P<season>\d+)/[^/?#]+z;https://www.jiosaavn.com/shows/talking-music/1/PjReFP-Sguk_ztalking-music-1zTalking Musicr      r   r   c                 C   s$   |  d|d| |d||dddS )Nshowz
show page zshow.getAllEpisodes4desc)r   r+   rm   rt   api_version
sort_order)rA   )r#   rm   rn   r   r%   r%   r&   r   Q  s    z"JioSaavnShowPlaylistIE._fetch_pagec                 c   s.   |  |||d }| j|d | jdE d H  d S )Nr   )r   r}   )r   r   rx   )r#   rm   rn   r   r   r%   r%   r&   r   [  s    zJioSaavnShowPlaylistIE._entriesc           	   
   C   s   |  |dd\}}| d| }| ||}| jd|d|tdd }|d }tt| j||| j	}| 
||t|dd	d
thfS )Nr   rs   -zwindow\.__INITIAL_DATA__\s*=zinitial data)Ztransform_sourceZshowViewZ
current_idrC   text)Z_match_valid_urlgroupZ_download_webpageZ_search_jsonr
   r   r   r   r   r   r   r   r4   )	r#   r-   Z	show_slugrn   Zplaylist_idZwebpageZ	show_inform   entriesr%   r%   r&   r   _  s    z$JioSaavnShowPlaylistIE._real_extractN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r%   r%   r%   r&   r   C  s   

r   c                   @   s^   e Zd ZdZejd Zddddddd	d
ddddgZeZ	dZ
dd Zdd Zdd ZdS )JioSaavnArtistIEzjiosaavn:artistz/artist/[^/?#]+/(?P<id>[^/?#]+)z8https://www.jiosaavn.com/artist/krsna-songs/rYLBEve2z3U_ZrYLBEve2z3U_zKR$NAr   &   r   z=https://www.jiosaavn.com/artist/sanam-puri-songs/SkNEv3qRhDE_ZSkNEv3qRhDE_z
Sanam Puri3   r   c                 C   s0   |  d|d|d  || j| jddddddS )	NZartistzartist page r    r   ZalphabeticalZasc)r   Zn_songZn_albumZsub_typeZincludeMetaTagsr   categoryr   r   )r#   	artist_idr   r%   r%   r&   r     s    zJioSaavnArtistIE._fetch_pagec                 c   sN   t  D ]@}|s|n
| ||}t|ddthfs6 qJ| |dE d H  qd S )NZtopSongs.)	itertoolscountr   r   r   r   )r#   r   
first_pager   r   r%   r%   r&   r     s
    zJioSaavnArtistIE._entriesc                 C   s8   |  |}| |d}| | |||t|dthfS )Nr   rV   )r{   r   r   r   r   r4   )r#   r-   r   r   r%   r%   r&   r     s    
zJioSaavnArtistIE._real_extractNr   r%   r%   r%   r&   r   n  s(   
r   )!r   r   r   rK   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Zutils.traversalr   r   rh   r   r   r   r   r   r%   r%   r%   r&   <module>   s   L 6'.+