U
    g\                     @   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   }|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*   </tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/zingmp3.py	<genexpr>>   s     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_slugr5   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 metadatarE   )_download_jsonrF   get)rB   rC   rD   
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   rG   r(   zUpdating cookies)rH   )Z_cookies_passedZ_request_webpagerF   )rB   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>   )rB   r8   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)rB   Zid_rC   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   r8   ZhasMorec                      s    d kS )Ntotalr*   r*   countrE   r*   r.   <lambda>`       z+ZingMp3BaseIE._paged_list.<locals>.<lambda>)	itertoolsrX   rU   listrR   rJ   lenr   )rB   _idrC   rT   entriesr*   rW   r.   _paged_listY   s    
zZingMp3BaseIE._paged_list)N)__name__
__module____qualname___VALID_URL_TMPL_GEO_COUNTRIESr>   	_PER_PAGEr2   rF   rN   rO   rR   rU   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)
rG   titlerj   	thumbnail	subtitlesdurationtrackartistr   album_artist)rQ   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))	rG   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)	rG   rl   rj   ro   rm   rp   rq   r   rr   z2https://zingmp3.vn/embed/song/ZWZEI76B?start=falseTrQ   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k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 )0NrG   typeencodeIdr   	streamingz4http://api.mp3.zing.vn/api/mobile/video/getvideoinfoZrequestdatazDownloading mp4 JSON metadata)queryrH   sourceru   r   r   r   ZVIP)ru   hlsrh   none)rj   	format_idZtbrrQ   Zvcodecr}   F)Zm3u8_idfatalzmp4-)r   rQ   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   rQ   )
rG   rl   rm   ro   rp   rq   r   rr   formatsrn   )_match_valid_urlgrouprN   rJ   rI   jsondumpsr8   appendr   Z_proto_relative_urlextendZ_extract_m3u8_formatsZraise_geo_restrictedre   Zraise_no_formatsr   )rB   rQ   song_idrC   itemZitem_idr|   r   r,   r-   resZ	video_urlr   r*   r*   r.   _real_extract   sv    
 


&


 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rG   rl   
   rQ   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 )NrG   rx   )songr8   ry   r   rl   )r   r   rN   playlist_resultrR   r   rB   rQ   r   rC   rE   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-chartrG   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 )
NrG   r   Zdiscoverrx   r#   .r8   r   ZRTChart)	_match_idrN   r   r   dictr   rR   )rB   rQ   rC   rD   rE   r8   r*   r*   r.   r   +  s    
z ZingMp3ChartHomeIE._real_extractN)ra   rb   rc   r   r   r   r   r*   r*   r*   r.   r     s8       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 )NrG   rx   r8   zzing-chart-Zcountryr(   )r   r   rN   r   rR   rJ   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rG   rx   rT   rX   rN   rf   )rB   r   rC   rT   r*   r*   r.   rU   }  s    z$ZingMp3ChartMusicVideoIE._fetch_pagec                 C   s:   |  |ddd\}}}| | |||| d| S )NrG   regionsrx   _)r   r   r   r`   )rB   rQ   r   r   rC   r*   r*   r.   r     s    z&ZingMp3ChartMusicVideoIE._real_extractNra   rb   rc   r   r   r   rU   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rG   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/songrG   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   )rB   Zuser_idrC   rT   r*   r*   r.   rU     s    zZingMp3UserIE._fetch_pagec              	      s   |  |dd\}}|sd}| jdi |d|id}|dkrt|dkrt| d	| }| | | jdd|i|d
|S |dk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   -)rD   rK   )r   videorG   r   ZaAlbumZaSinglesectionsc                    s   |d  kS )N	sectionIdr*   r   r-   Z
section_idr*   r.   rY     rZ   z-ZingMp3UserIE._real_extract.<locals>.<lambda>r8   .r   z - )delimZ	biography)	r   r   rN   r   rR   r`   r   r   rJ   )rB   rQ   r   rC   Z	user_infor^   r_   r*   r   r.   r     s4     
    zZingMp3UserIE._real_extractNr   r*   r*   r*   r.   r     sZ   				  .	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:hubzRhttps?://(?:mp3\.zing|zingmp3)\.vn/(?P<type>hub)/(?P<regions>[^/]+)/(?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   sb   |  |ddd\}}}| |d|i}| t|ddd ddf}| |||d	|d
S )NrG   r   rx   r   c                 S   s   |d dkS )Nr   r!   r*   r   r*   r*   r.   rY     rZ   z,ZingMp3HubIE._real_extract.<locals>.<lambda>r8   .rl   r   )r   r   rN   rR   r   r   rJ   )rB   rQ   r   r   rC   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)rG   rl   r   rj   
view_countrm   
like_countZlive_statusZskip_downloadT)rQ   rt   rD   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   rG   rz   zThis radio is offline.T)expectedFr   )rG   r   r   rn   rl   )rm   r   Z
thumbnailVZ
thumbnailHZactiveUsersZtotalReactionr   )rl   rm   r   r   r   r   )	r   r   rN   rJ   r   Z#_extract_m3u8_formats_and_subtitlesr   r	   r   )rB   rQ   rC   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)rG   rT   rX   r   )rB   Zeps_idrC   rT   r*   r*   r.   rU   H  s
    z#ZingMp3PodcastEpisodeIE._fetch_pagec                 C   sZ   |  |dd\}}| |d|i}| ||dkr8dnd}| |||d|dS )NrG   rx   r   r   r   rl   r   )r   r   rN   r`   r   rJ   )rB   rQ   Z
podcast_idrC   Zpodcast_infor_   r*   r*   r.   r   O  s       z%ZingMp3PodcastEpisodeIE._real_extractN)
ra   rb   rc   r   r   rd   r   r   rU   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/cgrrG   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 )NrG   r$   r<   rx   r   r   r8   )r   rN   r   rR   )rB   rQ   rC   rD   r8   r*   r*   r.   r   n  s    
zZingMp3PodcastIE._real_extractNr   r*   r*   r*   r.   r   W  s,      r   )r4   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#