a
    h[                     @   s  d dl Z 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 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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int_or_nonejoin_nonemptytry_callurl_or_noneurljoin)traverse_objc                   @   s   e Zd ZdZdgZdZdZdddddd	d
dddddddddddddddddddddZdd Zd+d!d"Z	d#d$ Z
d%d& Zd'd( Zd)d* Zd S ),ZingMp3BaseIEzThttps?://(?:mp3\.zing|zingmp3)\.vn/(?P<type>(?:%s))/[^/?#]+/(?P<id>\w+)(?:\.html|\?)ZVNzhttps://zingmp3.vn2   z/api/v2/page/get/songz/api/v2/page/get/videoz/api/v2/lyric/get/lyricz/api/v2/song/get/streamingz/api/v2/livestream/get/infoz /api/v2/page/get/podcast-episodez%/api/v2/podcast/episode/get/streamingz/api/v2/page/get/playlistz /api/v2/page/get/podcast-programz /api/v2/podcast/episode/get/listz!/api/v2/page/get/podcast-categoryz(/api/v2/podcast/program/get/list-by-catez#/api/v2/page/get/podcast-categoriesz/api/v2/page/get/chart-homez/api/v2/page/get/week-chartz!/api/v2/page/get/newrelease-chartz/api/v2/video/get/listz/api/v2/page/get/artistz/api/v2/song/get/listz/api/v2/page/get/hub-detailz/api/v2/chart/get/new-releasez/api/v2/page/get/top-100z(/api/v2/podcast/program/get/list-by-typez'/api/v2/podcast/program/get/top-episode)bai-hatembed
video-cliplyricsong-streamingZ	liveradioepsepisode-streamingZplaylistalbumpgrpgr-listcgrcgr-listcgrs
zing-chartzing-chart-tuanmoi-phat-hanhzthe-loai-videoinfo-artistuser-list-songuser-list-videohubnew-releasetop100podcast-newtop-podcastc                 C   s   | j | }|ddi tddd t| D   }i |dt	
d| |  tj d}| j | d	tj| S )
Nctime1 c                 s   s    | ]\}}| d | V  qdS )=N ).0kvr*   r*   M/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/zingmp3.py	<genexpr>>       z)ZingMp3BaseIE._api_url.<locals>.<genexpr>Z X5BM3w8N7MKozC0B85o4KMlzLZKhV00ys    acOrvUS15XRW2o9JksiK1KgQ6Vbds8ZW)ZapiKeysig?)
_API_SLUGSupdatehashlibsha256joinsorteditemsencode	hexdigesthmacnewsha512_DOMAINurllibparse	urlencode)selfurl_typeparamsZapi_slugr6   datar*   r*   r.   _api_url:   s    
zZingMp3BaseIE._api_urlNc                 K   sD   | j | |||p|dfdd| di|}|p8i dpBi S )NidnotezDownloading z JSON metadatarF   )_download_jsonrG   get)rC   rD   rE   
display_idkwargsrespr*   r*   r.   	_call_apiG   s    
zZingMp3BaseIE._call_apic                 C   s&   | j s"| j| dddid dd d S )Nr   rH   r(   zUpdating cookies)rI   )Z_cookies_passedZ_request_webpagerG   )rC   r*   r*   r.   _real_initializeM   s    zZingMp3BaseIE._real_initializec                 c   s,   t |dpg D ]}| t| j|V  qd S )N).link)r   Z
url_resultr
   r?   )rC   r9   urlr*   r*   r.   _parse_itemsR   s    zZingMp3BaseIE._parse_itemsc                 C   s   t dd S )Nz-This method must be implemented by subclasses)NotImplementedError)rC   Zid_rD   pager*   r*   r.   _fetch_pageV   s    zZingMp3BaseIE._fetch_pagec                 #   sp   d t dD ]\}| |||t| d} t|7  |E d H  drft fddr qlqd S )Nr   r   r9   ZhasMorec                      s    d kS )Ntotalr*   r*   countrF   r*   r.   <lambda>`   r0   z+ZingMp3BaseIE._paged_list.<locals>.<lambda>)	itertoolsrY   rV   listrS   rK   lenr   )rC   _idrD   rU   entriesr*   rX   r.   _paged_listY   s    
zZingMp3BaseIE._paged_list)N)__name__
__module____qualname___VALID_URL_TMPL_GEO_COUNTRIESr?   	_PER_PAGEr3   rG   rO   rP   rS   rV   r`   r*   r*   r*   r.   r      sL   "
r   c                   @   s   e Zd Zejd ZdZdZdddddd	d
ddigidddddd
ddddddd	dddddd	ddddddd	ddd d!d d	dd"d#d$d%dd&d	d%d'd(d'd)	dd*d+d,d-d+d,gZd.d/ Z	d0S )1	ZingMp3IEzbai-hat|video-clip|embed|epsZzingmp3z
zingmp3.vnz;https://mp3.zing.vn/bai-hat/Xa-Mai-Xa-Bao-Thy/ZWZB9WAB.htmlZ ead7ae13693b3205cbc89536a077daedZZWZB9WABu
   Xa Mãi Xamp3zre:^https?://.+\.jpgoriginextZlrc   u	   Bảo ThyzSpecial Album)
rH   titlerj   	thumbnail	subtitlesdurationtrackartistr   album_artist)rR   md5	info_dictzGhttps://zingmp3.vn/video-clip/Suong-Hoa-Dua-Loi-K-ICM-RYO/ZO8ZF7C7.htmlZ 92c6e7a019f06b4682a6c35ae5785fabZZO8ZF7C7u   Sương Hoa Đưa Lốimp4   z
K-ICM, RYOu    Sương Hoa Đưa Lối (Single))	rH   rl   rj   rm   ro   rp   rq   r   rr   zOhttps://zingmp3.vn/bai-hat/Nguoi-Yeu-Toi-Lanh-Lung-Sat-Da-Mr-Siro/ZZ6IW7OU.htmlZ 3e9f7a9bd0d965573dbff8d7c68b629dZZZ6IW7OUu*   Người Yêu Tôi Lạnh Lùng Sắt Đái/  zMr. Sirou3   Người Yêu Tôi Lạnh Lùng Sắt Đá (Single)z>https://zingmp3.vn/eps/Cham-x-Ban-Noi-Goi-La-Nha/ZZD9ACWI.htmlZ d52f9f63e2631e004e4f15188eedcf80ZZZD9ACWIu$   Chạm x Bạn - Nơi Gọi Là Nhài  zOn AirzTop Podcast)	rH   rl   rj   ro   rm   rp   rq   r   rr   z2https://zingmp3.vn/embed/song/ZWZEI76B?start=falseTrR   Zonly_matchingz:https://zingmp3.vn/bai-hat/Xa-Mai-Xa-Bao-Thy/ZWZB9WAB.htmlc                 C   s  |  |dd\}}| |d|i}|dp2|}|dkrr|d}| jd|dtd|iidd	d
|d< n*|dkr| dd|i}n| dd|i}g }|pi  D ]\}}	|	r|	dkrq|dvr|d|t	|| 
|	dd q|	 D ]R\}
}|sq|dkr*|| j||d|dd q|d|
 |t	|
d qq|s||ddkrr| j| jdd n
| d |dp| jdd|iddd }|t|d!d"t|d#d$t	|d%t|d!d"t|d&d'd(t|d)d*dd+t|d,d(dd+||rd-d.|igind d/
S )0NrH   typeencodeIdr   	streamingz4http://api.mp3.zing.vn/api/mobile/video/getvideoinfoZrequestdatazDownloading mp4 JSON metadata)queryrI   sourceru   r   r   r   ZVIP)ru   hlsrh   none)rj   	format_idZtbrrR   Zvcodecr}   F)Zm3u8_idfatalzmp4-)r   rR   heightmsgz5Sorry, this content is not available in your country.T)Z	countriesZmetadata_availablez"The song is only for VIP accounts.r   r   filerl   aliasrm   
thumbnailMro   artistsNamesartists_names)Zartistsr   name)r   )r   rl   )Zgenresr   r   get_all)r   )r   r   ri   rR   )
rH   rl   rm   ro   rp   rq   r   rr   formatsrn   )_match_valid_urlgrouprO   rK   rJ   jsondumpsr9   appendr   Z_proto_relative_urlextendZ_extract_m3u8_formatsZraise_geo_restrictedre   Zraise_no_formatsr   )rC   rR   song_idrD   itemZitem_idr|   r   r,   r-   resZ	video_urlr   r*   r*   r.   _real_extract   sr    



&


zZingMp3IE._real_extractN)
ra   rb   rc   r   rd   
_VALID_URLIE_NAMEZIE_DESC_TESTSr   r*   r*   r*   r.   rg   d   s   
Erg   c                   @   sV   e 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dZdd ZdS )ZingMp3AlbumIEzalbum|playlistzZhttps://zingmp3.vn/album/Ca-Phe-Quan-Quen-Hoang-Dung-My-Anh-Da-LAB-Thinh-Suy/ZOC7WUZC.htmlZZOC7WUZCu   Cà Phê Quán QuenrH   rl   
   rR   rt   Zplaylist_mincountzQhttps://zingmp3.vn/album/Nhung-Bai-Hat-Hay-Nhat-Cua-Mr-Siro-Mr-Siro/ZWZAEZZD.htmlZZWZAEZZDu+   Những Bài Hát Hay Nhất Của Mr. Siro   zChttp://mp3.zing.vn/playlist/Duong-Hong-Loan-apollobee/IWCAACCB.htmlTrw   zKhttps://zingmp3.vn/album/Lau-Dai-Tinh-Ai-Bang-Kieu-Minh-Tuyet/ZWZBWDAF.htmlzzingmp3:albumc                 C   sP   |  |dd\}}| |d|i}| | t|dt|ddt|ddS )NrH   rx   )songr9   ry   r   rl   )r   r   rO   playlist_resultrS   r   rC   rR   r   rD   rF   r*   r*   r.   r     s    zZingMp3AlbumIE._real_extractN)	ra   rb   rc   r   rd   r   r   r   r   r*   r*   r*   r.   r      s,   
r   c                   @   sX   e Zd ZdZdddidddddiddd	dd
idddddiddgZdZdd ZdS )ZingMp3ChartHomeIEzkhttps?://(?:mp3\.zing|zingmp3)\.vn/(?P<id>(?:zing-chart|moi-phat-hanh|top100|podcast-discover))/?(?:[#?]|$)zhttps://zingmp3.vn/zing-chartrH   r   d   r   z https://zingmp3.vn/moi-phat-hanhr   zhttps://zingmp3.vn/top100r#   r   z#https://zingmp3.vn/podcast-discoverpodcast-discover   zzingmp3:chart-homec                 C   s   |  |}d|i}|dkr"d|d< | ||}g }|dkrV|t|dddthf n<|dkrz|t|d	ddthf n|t|ddthf | | ||S )
NrH   r   Zdiscoverrx   r#   .r9   r   ZRTChart)	_match_idrO   r   r   dictr   rS   )rC   rR   rD   rE   rF   r9   r*   r*   r.   r   +  s    
z ZingMp3ChartHomeIE._real_extractN)ra   rb   rc   r   r   r   r   r*   r*   r*   r.   r     s0   r   c                   @   sV   e Zd Zejd ZdZddddddd	d
ddddddddddgZdd ZdS )ZingMp3WeekChartIEr   zzingmp3:week-chartzAhttps://zingmp3.vn/zing-chart-tuan/Bai-hat-Viet-Nam/IWZ9Z08I.htmlIWZ9Z08Izzing-chart-vnr   r   r   z>https://zingmp3.vn/zing-chart-tuan/Bai-hat-US-UK/IWZ9Z0BW.htmlZIWZ9Z0BWzzing-chart-usz=https://zingmp3.vn/zing-chart-tuan/Bai-hat-KPop/IWZ9Z0BO.htmlZIWZ9Z0BOzzing-chart-koreac              	   C   sL   |  |dd\}}| |d|i}| | |d |d|dd S )NrH   rx   r9   zzing-chart-Zcountryr(   )r   r   rO   r   rS   rK   r   r*   r*   r.   r   U  s
    z ZingMp3WeekChartIE._real_extractN)	ra   rb   rc   r   rd   r   r   r   r   r*   r*   r*   r.   r   ;  s,   
r   c                   @   sh   e Zd ZdZdZddddddd	d
ddddddddddddddddgZdd Zdd ZdS )ZingMp3ChartMusicVideoIEz]https?://(?:mp3\.zing|zingmp3)\.vn/(?P<type>the-loai-video)/(?P<regions>[^/]+)/(?P<id>[^\.]+)zzingmp3:chart-music-videoz8https://zingmp3.vn/the-loai-video/Viet-Nam/IWZ9Z08I.htmlr   zthe-loai-video_Viet-Namr   i  r   z5https://zingmp3.vn/the-loai-video/Au-My/IWZ9Z08O.htmlZIWZ9Z08Ozthe-loai-video_Au-My(   z8https://zingmp3.vn/the-loai-video/Han-Quoc/IWZ9Z08W.htmlZIWZ9Z08Wzthe-loai-video_Han-Quoc   z9https://zingmp3.vn/the-loai-video/Khong-Loi/IWZ9Z086.htmlZIWZ9Z086zthe-loai-video_Khong-Loir   c                 C   s   |  ||d|| jdS )NZgenrerH   rx   rU   rY   rO   rf   )rC   r   rD   rU   r*   r*   r.   rV   }  s    z$ZingMp3ChartMusicVideoIE._fetch_pagec                 C   s:   |  |ddd\}}}| | |||| d| S )NrH   regionsrx   _)r   r   r   r`   )rC   rR   r   r   rD   r*   r*   r.   r     s    z&ZingMp3ChartMusicVideoIE._real_extractNra   rb   rc   r   r   r   rV   r   r*   r*   r*   r.   r   \  s:   r   c                	   @   s   e Zd ZdZdZddddddd	d
dddddd	ddddddd	ddddddd	dddidd	dddidd	gZdd Zdd ZdS )ZingMp3UserIEzhhttps?://(?:mp3\.zing|zingmp3)\.vn/(?P<user>[^/]+)/(?P<type>bai-hat|single|album|video|song)/?(?:[?#]|$)zzingmp3:userz"https://zingmp3.vn/Mr-Siro/bai-hatZIWZ98609zMr. Siro - bai-hatz$md5:5bdcf45e955dc1b8d7f518f322ffef36rH   rl   description[   r   z https://zingmp3.vn/Mr-Siro/albumzMr. Siro - album   z!https://zingmp3.vn/Mr-Siro/singlezMr. Siro - singler   z https://zingmp3.vn/Mr-Siro/videozMr. Siro - video   z#https://zingmp3.vn/new-release/songrH   znew-release-songr   z$https://zingmp3.vn/new-release/albumznew-release-albumc                 C   s(   |dkrdnd}|  ||d|| jdS )Nr   r   r    rq   r   r   )rC   Zuser_idrD   rU   r*   r*   r.   rV     s    zZingMp3UserIE._fetch_pagec              	      s   |  |dd\}}|sd}| jdi |d|id}|dkrt|dv rt| d	| }| | | jdd|i|d
|S |dv r| |d |}n0|dkrdnd | t|d fddddf}| ||d t|d|dd|dS d S )Nuserrx   r   r   r   )r{   r"   )r   r   -)rE   rL   )r   videorH   r   ZaAlbumZaSinglesectionsc                    s   |d  kS )N	sectionIdr*   r   r-   Z
section_idr*   r.   rZ     r0   z-ZingMp3UserIE._real_extract.<locals>.<lambda>r9   .r   z - )delimZ	biography)	r   r   rO   r   rS   r`   r   r   rK   )rC   rR   r   rD   Z	user_infor^   r_   r*   r   r.   r     s*    zZingMp3UserIE._real_extractNr   r*   r*   r*   r.   r     sV   				.	r   c                   @   sD   e Zd ZdZdZddddddd	d
dddddd	gZdd ZdS )ZingMp3HubIEzzingmp3:hubzIhttps?://(?:mp3\.zing|zingmp3)\.vn/(?P<type>hub)/[^/?#]+/(?P<id>[^./?#]+)z-https://zingmp3.vn/hub/Nhac-Moi/IWZ9Z0CA.htmlZIWZ9Z0CAu   BXH Nhạc Mớiz$md5:1cc31b68a6f746427b07b2756c22a558r   r   r   z.https://zingmp3.vn/hub/Nhac-Viet/IWZ9Z087.htmlZIWZ9Z087u   Nhạc Việtz$md5:acc976c8bdde64d5c6ee4a92c39f7a77r   c                 C   s^   |  |dd\}}| |d|i}| t|ddd ddf}| |||d|d	S )
NrH   rx   r   c                 S   s   |d dkS )Nr   r!   r*   r   r*   r*   r.   rZ     r0   z,ZingMp3HubIE._real_extract.<locals>.<lambda>r9   .rl   r   )r   r   rO   rS   r   r   rK   )rC   rR   r   rD   Z
hub_detailr_   r*   r*   r.   r     s    zZingMp3HubIE._real_extractNra   rb   rc   r   r   r   r   r*   r*   r*   r.   r     s$   	r   c                   @   s`   e Zd ZdZdZdddddeded	d
ddiddddddeded	d
ddidgZdd ZdS )ZingMp3LiveRadioIEzzingmp3:liveradiozShttps?://(?:mp3\.zing|zingmp3)\.vn/(?P<type>(?:liveradio))/(?P<id>\w+)(?:\.html|\?)z*https://zingmp3.vn/liveradio/IWZ979UB.htmlZIWZ979UBz
re:^V\-POPz$md5:aa857f8a91dc9ce69e862a809e4bdc10ru   zre:^https?://.*\.jpgis_live)rH   rl   r   rj   
view_countrm   
like_countZlive_statusZskip_downloadT)rR   rt   rE   z*https://zingmp3.vn/liveradio/IWZ97CWB.htmlZIWZ97CWBzre:^Live\s247z$md5:d41d8cd98f00b204e9800998ecf8427eZm4ac              	   C   s   |  |dd\}}| |d|i}|d}|s@tddd| j||dd\}}|d||d	t|d
dthfdthfdthfddddS )Nrx   rH   rz   zThis radio is offline.T)expectedFr   )rH   r   r   rn   rl   )rm   r   Z
thumbnailVZ
thumbnailHZactiveUsersZtotalReactionr   )rl   rm   r   r   r   r   )	r   r   rO   rK   r   Z#_extract_m3u8_formats_and_subtitlesr   r	   r   )rC   rR   rD   Zlive_radio_idinfoZmanifest_urlZfmtsrn   r*   r*   r.   r     s*    
z ZingMp3LiveRadioIE._real_extractN)ra   rb   rc   r   r   intr   r   r*   r*   r*   r.   r     s<    r   c                   @   sP   e Zd ZdZejd Zddddddd	d
ddddd	gZdd Zdd Z	dS )ZingMp3PodcastEpisodeIEzzingmp3:podcast-episodezpgr|cgrz6https://zingmp3.vn/pgr/Nhac-Moi-Moi-Ngay/68Z9W66B.htmlZ68Z9W66Bu   Nhạc Mới Mỗi Ngàyz$md5:2875dfa951f8e5356742f1610cf20691r   r   r   z,https://zingmp3.vn/cgr/Am-nhac/IWZ980AO.htmlZIWZ980AOu
   Âm nhạcr   r   c                 C   s   |  |||| jdS )N)rH   rU   rY   r   )rC   Zeps_idrD   rU   r*   r*   r.   rV   H  s
    z#ZingMp3PodcastEpisodeIE._fetch_pagec                 C   sZ   |  |dd\}}| |d|i}| ||dkr8dnd}| |||d|dS )NrH   rx   r   r   r   rl   r   )r   r   rO   r`   r   rK   )rC   rR   Z
podcast_idrD   Zpodcast_infor_   r*   r*   r.   r   O  s    z%ZingMp3PodcastEpisodeIE._real_extractN)
ra   rb   rc   r   r   rd   r   r   rV   r   r*   r*   r*   r.   r   4  s$   
	r   c                   @   sJ   e Zd ZdZdZdddiddddd	id
ddddiddgZdd ZdS )ZingMp3PodcastIEzzingmp3:podcastzVhttps?://(?:mp3\.zing|zingmp3)\.vn/(?P<id>(?:cgr|top-podcast|podcast-new))/?(?:[#?]|$)zhttps://zingmp3.vn/cgrrH   r      r   zhttps://zingmp3.vn/top-podcastr%      zhttps://zingmp3.vn/podcast-newr$   r   c                 C   sP   |  |}d|i}|dkr"d|d< | |dkr2dn||d }| | ||S )NrH   r$   r=   rx   r   r   r9   )r   rO   r   rS   )rC   rR   rD   rE   r9   r*   r*   r.   r   n  s    
zZingMp3PodcastIE._real_extractNr   r*   r*   r*   r.   r   W  s&   r   )r5   r<   r[   r   urllib.parser@   commonr   utilsr   r   r   r   r	   r
   Zutils.traversalr   r   rg   r   r   r   r   r   r   r   r   r   r*   r*   r*   r.   <module>   s&    Q 
!-!.S9#