U
    gqh                     @   s(  d dl Z d dlZd dlZd dlZ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 ddlm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 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)NaverBaseIE)	YoutubeIE   )	HTTPError)	ExtractorErrorUserNotLivefloat_or_noneint_or_nonestr_or_nonetraverse_objtry_callupdate_url_queryurl_or_nonec                   @   sz   e Zd ZdZdZddee dZdd Z	dd	 Z
dddZdd Zdd Zdd Zdd Zdd Zdd Zdd Zd
S )WeverseBaseIEweversez%https://accountapi.weverse.io/web/apiapplication/jsonhttps://weverse.io/)AcceptZRefererzWEV-device-Idc              
   C   s
  | j drd S ddddtt tt d}t| j| j dd dd	|i|d
dd}|sjtdddd|d< z6| j| j dd t	j
|d|ddd |dd}W nH tk
r } z*t|jtr|jjdkrtddd W 5 d }~X Y nX d|d  tj d< d S )NAuthorizationZ 5419526f1c624b38b10787e5c10b2a7az3.3.6enr   )zx-acc-app-secretzx-acc-app-versionzx-acc-languagezx-acc-service-idzx-acc-trace-idzx-clog-user-device-idz/v2/signup/email/statuszChecking usernameemail)i  i  )notequeryheadersZexpected_statusZhasPasswordzInvalid username providedTexpectedr   zcontent-typez/v3/auth/token/by-credentialsZBY_PASS)r   ZotpSessionIdpassword),:)
separatorsz
Logging in)datar   r     zInvalid password providedBearer ZaccessToken)_API_HEADERSgetstruuiduuid4r   _download_json_ACCOUNT_API_BASEr   jsondumpsencode
isinstancecauser   statusr   )selfusernamer   r   Zvalid_usernameauthe r6   </tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/weverse.py_perform_login%   sR    


    
   
zWeverseBaseIE._perform_loginc                    s8    j drd S t fdd}|r4d| tj d< d S )Nr   c                      s     dd jS )Nr   Zwe2_access_token)Z_get_cookiesvaluer6   r2   r6   r7   <lambda>J       z0WeverseBaseIE._real_initialize.<locals>.<lambda>r$   )r%   r&   r   r   )r2   tokenr6   r:   r7   _real_initializeF   s
    zWeverseBaseIE._real_initializeNDownloading API JSONc              
   C   s$  d}t |dddddd}tt d }ttj||d d  |  tj	d	
  }|rjd
dini }	z*| jd| |||| j|	||ddW S  tk
r }
 zft|
jtr|
jjdkr| d n<t|
jtr|
jjdkrd| jkrtddd|    W 5 d }
~
X Y nX d S )Ns(   1b9cb6378d959b45714bec49971ade22e6e24e42Z be4d79eb8fc7bd008ee82c8ec4ff6fd4r   ZWEBZpc)ZappIdlanguageosplatformZwpf     )	digestmodzContent-Typer   z,https://global.apis.naver.com/weverse/wevweb)wmsgpadwmd)r   r"   r   r   r#   zESession token has expired. Log in again or refresh cookies in browseri  r   z1Your account does not have access to this contentTr   )r   inttimebase64	b64encodehmacHMACr.   hashlibsha1digestdecoder*   r%   r   r/   r0   r   r1   Zraise_login_required)r2   epvideo_idr"   r   keyZapi_pathrF   rG   r   r5   r6   r6   r7   	_call_apiN   sH         zWeverseBaseIE._call_apic                 C   s*   d| j krdnd}| d| | d|S )Nr    z/previewz/post/v1.0/post-z?fieldSet=postV1)r%   rU   )r2   rS   pathr6   r6   r7   _call_post_apio   s    zWeverseBaseIE._call_post_apic                 C   s   t | jd| |ddd S )Nz>/community/v1.0/communityIdUrlPathByUrlPathArtistCode?keyword=zFetching community IDr   communityId)r'   rU   )r2   channelr6   r6   r7   _get_community_ids   s     zWeverseBaseIE._get_community_idc           	      C   s   t |dddd dddthfddthfd	d
dthfd
dthfdthfddthfdf}t |ddd fD ]}i }t |ddd fD ]}|dd||d < q| j|d |ddd|d}|r|D ]&}t|d ||d< tj||d< q|	| qh|S )NZvideoslistc                 S   s   t |d S )Nsourcer   _vr6   r6   r7   r;   y   r<   z,WeverseBaseIE._get_formats.<locals>.<lambda>r^   ZencodingOptionwidthheighttypeZbitratevideoaudiosizeid)urlrc   rd   ZvcodecZvbrZabrfilesizeZ	format_idZstreamsc                 S   s   |d dkot |d S )Nre   HLSr^   r_   r`   r6   r6   r7   r;      r<   keysc                 S   s   |d dko|d S )Nre   paramnamer6   r`   r6   r6   r7   r;      r<   r9   rV   ro   mp4hlsF)m3u8_idfatalr   rj   Zextra_param_to_segment_url)
r   r   r   r&   _extract_m3u8_formatsr   urllibparse	urlencodeextend)	r2   r"   rS   formatsstreamr   rn   Zfmtsfmtr6   r6   r7   _get_formatsx   s8    





     zWeverseBaseIE._get_formatsc                    s6   d  fdd}t  |r0||d||dgS |gS )Nz\.(?:ttml|vtt)c                    s   t  || S )N)resub)xyZsubs_ext_rer6   r7   r;      r<   z)WeverseBaseIE._get_subs.<locals>.<lambda>z.ttmlz.vtt)r}   search)r2   Zcaption_urlZreplace_extr6   r   r7   	_get_subs   s
    zWeverseBaseIE._get_subsc                 C   s   t |dthfdthfddthfddthfddthtfdd	thfd
ddthfddd hfd
dddd hfd
dthfd
ddthfd
ddthfdthfdddS )N))	extension	mediaInfotitler   ))r   r   bodyr   authorprofileNameZmemberId	communitycommunityNamer   r   rZ   r   rf   playTimepublishedAtc                 S   s
   t | dS NrC   r   r   r6   r6   r7   r;      r<   z0WeverseBaseIE._parse_post_meta.<locals>.<lambda>ZonAirStartAtc                 S   s
   t | dS r   r   r   r6   r6   r7   r;      r<   ))r   	thumbnailrj   )rf   ZthumbZ	playCountZ	likeCountcommentCount)r   descriptionuploaderuploader_idcreators
channel_idduration	timestamprelease_timestampr   
view_count
like_countcomment_countFget_all)r   r'   allr   r
   r   r   )r2   metadatar6   r6   r7   _parse_post_meta   s"    



zWeverseBaseIE._parse_post_metac                 C   s*   | j f t|ddddfdtdddiS )	N))r   rf   NZpaidmembershipOnly)Zneeds_premiumZneeds_subscriptionF)r   Zexpected_type
needs_authT)Z_availabilityr   boolr2   r"   r6   r6   r7   _extract_availability   s     z#WeverseBaseIE._extract_availabilityc                 C   sZ   t |ddthfpi }|ddkrHt ddddd|d	thfpFdS |d
rVdS dS )Nr   rf   re   ZLIVEis_live	post_liveis_upcoming)ZONAIRZDONEZSTANDBYZDELAYr1   Z	liveToVodwas_livenot_live)r   dictr&   r'   r   r6   r6   r7   _extract_live_status   s    z"WeverseBaseIE._extract_live_status)Nr?   )__name__
__module____qualname__Z_NETRC_MACHINEr+   r'   r(   r)   r%   r8   r>   rU   rX   r\   r|   r   r   r   r   r6   r6   r6   r7   r      s    
!
!r   c                "   @   s   e Zd ZdZdddddddd	d
dddgddddddeeeddddddddddddddddgd d!d d!d"deee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/d0d/deeedd1d2d3d4gZd5d6 Zd7S )8	WeverseIEzJhttps?://(?:www\.|m\.)?weverse\.io/(?P<artist>[^/?#]+)/live/(?P<id>[\d-]+)z+https://weverse.io/billlie/live/0-107323480Z 1fa849f00181eef9100d3c8254c47979z0-107323480rp   u   행복한 평이루💜rV   BilllieZ 5ae14aed7b7cdc65fa87c41fe06cc936billlie72https://weverse.io/billliei.$QcZ20221020i*$Qci  re:^https?://.*\.jpe?g$r   r   ri   extr   r   r   r   r[   r   channel_urlr   r   upload_dater   release_dater   r   r   r   r   availabilitylive_statusrj   md5	info_dictz.https://weverse.io/lesserafim/live/2-102331763Z e46125c08b13a6c8c1f4565035cca987z2-102331763u   🎂김채원 생신🎂zLE SSERAFIM Z d26ddc1e258488a0a2b795218d14d59d
lesserafim47https://weverse.io/lesserafimLE SSERAFIMi8bZ20220801i  zcount:2)	id_IDen_USes_ESvi_VNth_THzh_CNzh_TWja_JPko_KR)ri   r   r   r   r   r   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Z	subtitlesz,https://weverse.io/treasure/live/2-117230416z2-117230416u+   re:스껄도려님 첫 스무살 생파🦋ZTREASUREZ 77eabbc449ca37f7970054a136f60082ZtreasureZ20zhttps://weverse.io/treasurei,d20230405i,dr   )ri   r   r   r   r   r   r[   r   r   creatorr   r   r   r   r   r   r   r   r   r   Livestream has endedrj   r   skipc                 C   s  |  |dd\}}| |}|d d d }| |}| |}i g  }}	|dkrh| jddd	 nv|d
kr| jd| d|dd}| |d |}
t|
ddd dt	hfdd}| j
||dddd}	n|dkr|dkr| | | jddd	 n|d d d }| jd| d|dd d!d" }| jd#| |d$|t|d%pDd&tt tt d' d(|d)rnd*nd+d+d+d,d-d,d.d/d0d1}| ||}	t|d2d3d4tjhfd5k}|r|	r| d6| n|r|	s| | ||d7| |	||d8| |t|| jS )9Nartistri   r   rf   videoIdr   zLivestream has not yet startedTr   r   z/video/v1.2/lives/z0/playInfo?preview.format=json&preview.version=v2Downloading live JSONrY   ZlipPlaybackmediac                 S   s   |d dkS )Nprotocolrl   r6   r`   r6   r6   r7   r;   )  r<   z)WeverseIE._real_extract.<locals>.<lambda>rW   Fr   rp   rq   )rr   liver   )Zpremium_onlyZsubscriber_onlyz:Livestream has ended and downloadable VOD is not availableZinfraVideoIdz/video/v1.1/vod/z/inKey?preview=falses   {}zDownloading VOD API key)r"   r   ZinKeyz:https://global.apis.naver.com/rmcnmv/rmcnmv/vod/play/v2.0/zDownloading VOD JSON)r   rf   Z	serviceIdZ2070rC   Zhtml5_pcr   YNr   prodz[{"adSystem":"null"}]/)rT   ZsidpidnonceZdevtZprvZaupZstpbZcplenvlcZadiZadu)r   r   metaZproviderro   ZdrmzIRequested content is DRM-protected, only a 30-second preview is availabler   )ri   r[   r   ry   r   r   )_match_valid_urlgrouprX   r   r   raise_no_formatsrU   Z_parse_jsonr   r   rt   Z
report_drmr*   r'   r(   r)   rH   rI   r&   r|   lowerZreport_warningr   r   process_subtitlesr   )r2   rj   r[   rS   postapi_video_idr   r   
video_infory   ZplaybackZm3u8_urlZinfra_video_idZin_keyZhas_drmr6   r6   r7   _real_extract  s    




    
 
   
 
zWeverseIE._real_extractNr   r   r   
_VALID_URLrH   _TESTSr   r6   r6   r6   r7   r      s   &Zr   c                   @   s   e Zd ZdZdddddddd	dd
ddddddddeeeeddgdddddddddddddd d!d"dgd#d$d#d$d%d&eeed'dd(d)gZd*d+ Zd,S )-WeverseMediaIEzKhttps?://(?:www\.|m\.)?weverse\.io/(?P<artist>[^/?#]+)/media/(?P<id>[\d-]+)z,https://weverse.io/billlie/media/4-116372884ze-C9wLSQs6orp   z5Billlie | 'EUNOIA' Performance Video (heartbeat ver.)z$md5:6181caaf2a2397bca913ffe368c104e5r   ZUCyc9sUCxELTDK9vELO5Fzegz8https://www.youtube.com/channel/UCyc9sUCxELTDK9vELO5Fzegz@Billliez https://www.youtube.com/@BilllieZ20230403i*d   r   Tr   publicz4https://i.ytimg.com/vi/e-C9wLSQs6o/maxresdefault.jpgZEntertainmentzcount:7z	count:100)ri   r   r   r   r[   r   r   r   r   Zuploader_urlr   r   r   Z	age_limitZplayable_in_embedr   r   r   r   r   Zchannel_follower_countr   
categoriestagsZchannel_is_verifiedZheatmap)rj   r   z,https://weverse.io/billlie/media/3-102914520Z 031551fcbd716bc4f080cb6174a43d8az3-102914520u   From. SUHYEON🌸u.   Billlie 멤버별 독점 영상 공개💙💜ZBilllie_officialZ f569c6e92f7eaffef0a395037dcaa54fr   r   r   i0cZ20220903g      1@r   r   r   r   c                 C   s   |  |dd\}}| |}t|dddtjhf}t|dddthf}|dkrj| d	| d
| tS |dkr|r| |tS |dkr| j	ddd n|rt
d| d| 	d d S )Nr   ri   r   r   Z	mediaTypeyoutubeZyoutubeVideoIdZvodr   /live/imagez!No video content found in webpageTr   zUnsupported media type "")r   r   rX   r   r'   r   
url_resultr   r   r   r   )r2   rj   r[   rS   r   
media_typeZ
youtube_idr6   r6   r7   r     s    
zWeverseMediaIE._real_extractNr   r6   r6   r6   r7   r   ^  sr   :r   c                   @   sH   e Zd ZdZdddddddd	d
dgddddeedddgZdd ZdS )WeverseMomentIEzchttps?://(?:www\.|m\.)?weverse\.io/(?P<artist>[^/?#]+)/moment/(?P<uid>[\da-f]+)/post/(?P<id>[\d-]+)zXhttps://weverse.io/secretnumber/moment/66a07e164b56a696ee71c99315ffe27b/post/1-117229444Z 87733ac19a54081b7dfc2442036d282bz1-117229444rp   u.   今日もめっちゃいい天気☀️🌤️u   레아Z 66a07e164b56a696ee71c99315ffe27bZsecretnumberZ56zSECRET NUMBER
   r   i,dr   r   )ri   r   r   r   r   r[   r   r   r   r   r   r   r   r   r   r   c                 C   s   |  |ddd\}}}| |}|d d d d }| jd| d	| |d
dd }|||| ||| |dt|dthfddthfddthfddthfdddddt	hfddd hfdddddt
hfdthfdthfd	ddt|| jS )Nr   uidri   r   momentrf   r   z/cvideo/v1.0/cvideo-z/playInfo?videoId=zDownloading moment JSONrY   ZplayInfo)ri   r[   r   ry   r   ))r   r   r   r   r   r   r   r   rZ   Z
uploadInfor   r   c                 S   s
   t | dS r   r   r   r6   r6   r7   r;     r<   z/WeverseMomentIE._real_extract.<locals>.<lambda>ZimageUrlZemotionCountr   )	r   r   r   r   r   r   r   r   r   Fr   )r   r   rX   rU   r|   r   r   r'   r   r
   r   r   r   r   r   )r2   rj   r[   r   rS   r   r   r   r6   r6   r7   r     s>    
 




zWeverseMomentIE._real_extractNr   r6   r6   r6   r7   r     s*   r   c                   @   s,   e Zd ZdZdZi ZdZdd Zdd ZdS )WeverseTabBaseIENc                 c   s   | j  }tdD ]}|dkr$|n(| jt| j| ||d| j d| d}t|ddd fD ]\}| j	d| d	| j d	|d
  | j
|d
 f| ||d| | || |dV  q`t|dddthf|d< |d s qqd S )Nr   Downloading z
 tab page rY   r"   c                 S   s   |d S )NpostIdr6   r`   r6   r6   r7   r;     r<   z+WeverseTabBaseIE._entries.<locals>.<lambda>r   r   r  )r[   r   r   r   ZpagingZ
nextParamsafter)_QUERYcopy	itertoolscountrU   r   	_ENDPOINT_PATHr   r   
_RESULT_IEr   r   r   r'   )r2   r   r[   
first_pager   pageZpostsr   r6   r6   r7   _entries  s,    
   zWeverseTabBaseIE._entriesc              
   C   s   |  |}| |}| jt| j| | j|d| j dd}| j| |||| d| j ft	|ddddt
hfd	d
thfdfddS )Nr   z tab page 1rY   -r"   .r   r   r   ZprofileImageUrl)Zplaylist_titler   Fr   )	_match_idr\   rU   r   r  r  r  Zplaylist_resultr  r   r'   r   )r2   rj   r[   r   r
  r6   r6   r7   r     s$    

  

zWeverseTabBaseIE._real_extract)	r   r   r   r  r  r  r	  r  r   r6   r6   r6   r7   r     s   r   c                   @   s:   e Zd ZdZdddddddgZd	Zd
ZddiZeZ	dS )WeverseLiveTabIEzChttps?://(?:www\.|m\.)?weverse\.io/(?P<id>[^/?#]+)/live/?(?:[?#]|$)z https://weverse.io/billlie/live/7   zbilllie-liver   r   ri   r   r   rj   Zplaylist_mincountr   z$/post/v1.0/community-%s/liveTabPostsr   fieldSetpostsV1N)
r   r   r   r   r   r  r  r  r   r	  r6   r6   r6   r7   r    s   
r  c                   @   sL   e Zd ZdZdddddddd	d
ddd
dgZdZdZdddZeZ	dS )WeverseMediaTabIEzRhttps?://(?:www\.|m\.)?weverse\.io/(?P<id>[^/?#]+)/media(?:/|/all|/new)?(?:[?#]|$)z!https://weverse.io/billlie/media/   zbilllie-mediar   r   r  r  z'https://weverse.io/lesserafim/media/allTrj   Zonly_matchingz'https://weverse.io/lesserafim/media/newz/media/v1.0/community-%s/morer   r  ZRECENT)r  Z
filterTypeN)
r   r   r   r   r   r  r  r  r   r	  r6   r6   r6   r7   r    s&   	
r  c                   @   s   e Zd ZdZdddddddd	d
ddgdddddeeedddddddddddddddgdddd dd!eeeddd"ddd#d$d%gZd&d' Zd(S ))WeverseLiveIEz>https?://(?:www\.|m\.)?weverse\.io/(?P<id>[^/?#]+)/?(?:[?#]|$)zhttps://weverse.io/purplekissz3-116560493rp   u   re:모하냥🫶🏻u   내일은 금요일~><u   채인Z 1ffb1d9d904d6b3db2783f876eb9229dZ
purplekissZ35zPURPLE KISSi\.dZ20230406iS.dz6https://weverse-live.pstatic.net/v1.0/live/62044/thumbr   r   )ri   r   r   r   r   r   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   z4-181521628u   re:심심해서요rV   u
   채채🤎Z d49b8b06f3cc1d92d655b25ab27ac2e7r   r   r   igZ20241010igz)re:https://phinf\.wevpstatic\.net/.+\.png)ri   r   r   r   r   r   r[   r   r   r   r   r   r   r   r   r   r   r   r   r   zhttps://weverse.io/billlie/Tr  c                    s|     |} |}t jtd| dddd|dddd	 fd
ddthfdd}|sdt|d d| d| tS )Nz/post/v1.0/community-z/liveTabtruezXonAirLivePosts.fieldSet(postsV1).limit(10),reservedLivePosts.fieldSet(postsV1).limit(10))ZdebugMessagefieldsr   rY   )ZonAirLivePostsZreservedLivePostsr"   c                    s     |dkS )N)r   r   )r   r`   r:   r6   r7   r;   x  r<   z-WeverseLiveIE._real_extract.<locals>.<lambda>r  Fr   )rS   r   r   )	r  r\   r   rU   r   r'   r	   r   r   )r2   rj   r[   r   rS   r6   r:   r7   r   n  s*    

  
  	
zWeverseLiveIE._real_extractNr   r6   r6   r6   r7   r  5  sl   7r  )$rJ   rN   rL   r  r,   r}   rI   urllib.parseru   r(   commonr   Znaverr   r   r   Znetworking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r6   r6   r6   r7   <module>   s.   , ! #N5*