o
    id2                     @   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 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format_fieldint_or_nonestr_or_nonetraverse_objtry_getc                   @   s(   e Zd ZdZddiZdd Zdd ZdS )	TrovoBaseIEzhttps?://(?:www\.)?trovo\.live/Originzhttps://trovo.livec                 C   s   d| di v rd}nd}| j||t|g ddiddtjtj	tj
 d	d
idd }d|v r@td|d d d  |d |d  S )NpersistedQuery
extensionszhttps://gql.trovo.livez"https://api-web.trovo.live/graphqlAcceptzapplication/jsonqid    )k)dataheadersqueryr   errorszTrovo said: messager   operationName)get_download_jsonjsondumpsencodejoinrandomchoicesstringascii_uppercasedigitsr   )selfvideo_idr   urlresp r)   J/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/trovo.py	_call_api   s   zTrovoBaseIE._call_apic                 C   s<   | dpi }| d}| dt| dt|d ddS )NstreamerInfouserNamenickNameuidzhttps://trovo.live/%s)uploaderuploader_iduploader_url)r   r   r   )r%   r   streamer_infousernamer)   r)   r*   _extract_streamer_info$   s   

z"TrovoBaseIE._extract_streamer_infoN)__name__
__module____qualname___VALID_URL_BASE_HEADERSr+   r5   r)   r)   r)   r*   r      s
    r   c                   @   sN   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d ZdS )TrovoIEzA(?:s/)?(?!(?:clip|video)/)(?P<id>(?!s/)[^/?&#]+(?![^#]+[?&]vid=))zhttps://trovo.live/ExslTr'   only_matchingz-https://trovo.live/s/SkenonSLive/549759191497z&https://trovo.live/s/zijo987/208251706104125853_104125853_1656439572flvzhttps://trovo.live/zijo987	104125853zahttps://livecover.trovo.live/screenshot/73846_104125853_104125853-2022-06-29-04-00-22-852x480.jpgzijo987u8   💥IGRAMO IGRICE UPADAJTE💥2500/5000 2022-06-28 22:01is_live)idextr2   r1   	thumbnailr0   titlelive_statuszMay not be liver'   	info_dictskipc              	   C   s   |  |}| j|ddd|iidd}|ddkr#t| dd	d
|d }|d }|d }g }|dp7g D ](}|d}	|	sBq8|d}
||
|
rTt|
d d nd |	|d| jd q8||||dd	d}|| | |S )N"live_LiveReaderService_GetLiveInfoparamsr-   )r   	variablesr   isLiver   z is offlineTexpectedprogramInforC   rF   
streamInfoplayUrldescbitrate)	format_idheightr'   tbrhttp_headerscoverUrl)rC   rF   formatsrE   rB   )		_match_idr+   r   r   appendr   r:   updater5   )r%   r'   r4   	live_infoprogram_info
program_idrF   r]   stream_infoplay_urlrX   infor)   r)   r*   _real_extractE   sD   




	zTrovoIE._real_extractN)r6   r7   r8   r   r9   
_VALID_URL_TESTSrg   r)   r)   r)   r*   r;   .   s,    

r;   c                   @   s   e Zd Zejd Zdddiddddd	d
ddeeeddgddddddddddddddeededgddd d!d"dd#d$d%d&d'd(d)eed*ed+gdd,d-dd.d/dd.gZd0d1 Zd2d3 Z	d4S )5
TrovoVodIEzD(?:clip|video|s)/(?:[^/]+/\d+[^#]*[?&]vid=)?(?P<id>(?<!/s/)[^/?&#]+)z:https://trovo.live/clip/lc-5285890818705062210?ltab=videosgetcommentsTzlc-5285890818705062210mp4u&   fatal moaning for a super good🤣🤣OneTappedYouis`20210521	100719456   z
mincount:1zCall of Duty: Mobilezhttps://trovo.live/OneTappedYouzre:^https?://.*\.jpg)rC   rD   rF   r0   	timestampupload_dater1   duration
view_count
like_countcomment_countcomments
categoriesr2   rE   )r'   rL   rI   z\https://trovo.live/s/SkenonSLive/549759191497?vid=ltv-100829718_100829718_387702301737980280z*ltv-100829718_100829718_387702301737980280ibzwhttp://vod.trovo.live/1f09baf0vodtransger1301120758/ef9ea3f0387702301737980280/coverBySnapshot/coverBySnapshot_10_0.jpg	100829718SkenonSLivez*Trovo u secanju, uz par modova i muzike :)zhttps://trovo.live/SkenonSLiveiN*  20220611	Minecraft)rC   rD   rq   rE   r1   r0   rF   r2   rs   rt   ru   rr   rv   rx   zNot availablerH   zVhttps://trovo.live/s/Trovo/549756886599?vid=ltv-100264059_100264059_387702304241698583z*ltv-100264059_100264059_387702304241698583i*czwhttp://vod.trovo.live/be5ae591vodtransusw1301120758/cccb9915387702304241698583/coverBySnapshot/coverBySnapshot_10_0.jpg	100264059TrovozDev Corner 8/25zhttps://trovo.live/Trovoi  20220826z
Talk Shows)r'   rI   z;https://trovo.live/video/ltv-100095501_100095501_1609596043r<   zdhttps://trovo.live/s/SkenonSLive/549759191497?foo=bar&vid=ltv-100829718_100829718_387702301737980280c                    s  |  |}| j|ddd|giii dd}t|d|ftd}|s&tdd	d
|d  d}t dd rQ d d }|dkrGtdd	d
td| dd	d
 d}g } dp^g D ]3}	|	d}
|
siq_|	d}|dt|	d||rt|d d nd |dt|	d|
| j	d	 q_ d} fd d}||| d!t d"t d#|d$|d%|d&|r|gnd | 
|d'}|| | |S )(N*vod_VodReaderService_BatchGetVodDetailInforL   vidsr   rM   r   rN   VodDetailInfos)expected_typez-This video not found or not available anymoreTrP   vodInforF   c                 S   s   | d d dkS )NplaybackRightsNormalr)   xr)   r)   r*   <lambda>   s    z*TrovoVodIE._real_extract.<locals>.<lambda>r   playbackRightsSettingSubscriberOnlyz,This video is only available for subscriberszThis video is not available ()languageName	playInfosrT   rU   rl   fileSizerV   m3u8_nativerW   )	rD   filesizerX   rY   languageprotocolrZ   r'   r[   categoryNamec                    s   t  | d S )NNum)r   r   r   vod_infor)   r*   r      s    r\   	publishTsrs   watchlikecomment)rC   rF   r]   rE   rq   rs   rt   ru   rv   rx   __post_extractor)r^   r+   r	   dictr   r   r
   r_   r   r:   extract_commentsr`   r5   )r%   r'   vidr(   vod_detail_inforF   playback_rights_settingr   r]   	play_infore   rX   category	get_countrf   r)   r   r*   rg      sj   









zTrovoVodIE._real_extractc              
   c   s    t dD ]^}| j|ddd|ii d|diddid	d
}|d D ]:}|d}|s,q"|dp2i }|d}|dt|dt|d|t|d|dkrUdnt|dV  q"|d rd d S qd S )Nr   )public_CommentProxyService_GetCommentListrL   postIDc   )appInfopreviewpageSizepage	singleReqtruer   rN   commentListcontentauthorparentIDr.   r/   	commentID	createdAtr   root)r   	author_idrC   textrq   parentlastPage)	itertoolscountr+   r   r   r   )r%   r   r   comments_jsonr   r   r   r   r)   r)   r*   _get_comments   s@   



	zTrovoVodIE._get_commentsN)
r6   r7   r8   r   r9   rh   intri   rg   r   r)   r)   r)   r*   rj   n   s    
ACrj   c                   @   s   e Zd Zdd Zdd ZdS )TrovoChannelBaseIEc           	   	   c   s    t dD ]J}| j|| jdd|i|ddiddidd	}|d
g }|D ]}|d}t|d}| jd| d| d| t dV  q&|d}|sP d S qd S )Nr   rL   	spaceNamer   )terminalSpaceIDcurrPager   r   r   r   rN   vodInfosr   )	spaceInforoomIDzhttps://trovo.live/s//z?vid=)iehasMore)	r   r   r+   
_OPERATIONr   r	   
url_resultrj   ie_key)	r%   	spacenamer   vod_jsonvodsvodr   roomhas_morer)   r)   r*   _entries  s6   





zTrovoChannelBaseIE._entriesc                 C   s   |  |}| j| ||dS )N)playlist_id)r^   playlist_resultr   )r%   r'   r   r)   r)   r*   rg   6  s   
z TrovoChannelBaseIE._real_extractN)r6   r7   r8   r   rg   r)   r)   r)   r*   r     s    r   c                   @   *   e Zd ZdZdZddddidgZdZd	S )
TrovoChannelVodIEztrovovod:(?P<id>[^\s]+)z4All VODs of a trovo.live channel; "trovovod:" prefixztrovovod:OneTappedYou   rC   rm   r'   playlist_mincountrI   ,vod_VodReaderService_GetChannelLtvVideoInfosNr6   r7   r8   rh   IE_DESCri   r   r)   r)   r)   r*   r   ;      r   c                   @   r   )
TrovoChannelClipIEztrovoclip:(?P<id>[^\s]+)z6All Clips of a trovo.live channel; "trovoclip:" prefixztrovoclip:OneTappedYou   rC   rm   r   -vod_VodReaderService_GetChannelClipVideoInfosNr   r)   r)   r)   r*   r   J  r   r   )r   r   r    r"   commonr   utilsr   r   r   r   r	   r
   r   r;   rj   r   r   r   r)   r)   r)   r*   <module>   s     
@ ,"