U
    gd2                     @   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/ZOriginzhttps://trovo.livec                 C   s   d| di krd}nd}| j||t|g ddiddtjtj	tj
 d	d
idd }d|krtd|d d d  |d |d  S )NZpersistedQuery
extensionszhttps://gql.trovo.livez"https://api-web.trovo.live/graphqlAcceptzapplication/jsonZqid    )k)dataheadersqueryr   errorszTrovo said: messager   operationName)getZ_download_jsonjsondumpsencodejoinrandomchoicesstringascii_uppercasedigitsr   )selfZvideo_idr   urlresp r$   :/tmp/pip-unpacked-wheel-q5ljy6pj/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 )NZstreamerInfouserNamenickNameuidzhttps://trovo.live/%s)uploaderuploader_iduploader_url)r   r   r   )r!   r   Zstreamer_infousernamer$   r$   r%   _extract_streamer_info$   s    

z"TrovoBaseIE._extract_streamer_infoN)__name__
__module____qualname___VALID_URL_BASE_HEADERSr&   r.   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"   Zonly_matchingz-https://trovo.live/s/SkenonSLive/549759191497z&https://trovo.live/s/zijo987/208251706Z104125853_104125853_1656439572Zflvzhttps://trovo.live/zijo987Z	104125853zahttps://livecover.trovo.live/screenshot/73846_104125853_104125853-2022-06-29-04-00-22-852x480.jpgZzijo987u8   💥IGRAMO IGRICE UPADAJTE💥2500/5000 2022-06-28 22:01is_live)idextr,   r+   	thumbnailr*   titleZlive_statuszMay not be liver"   	info_dictskipc              	   C   s   |  |}| j|ddd|iidd}|ddkrFt| dd	d
|d }|d }|d }g }|dpng D ]P}|d}	|	sqp|d}
||
|
rt|
d d nd |	|d| jd qp||||dd	d}|| | |S )NZ"live_LiveReaderService_GetLiveInfoparamsr'   )r   	variablesr   ZisLiver   z is offlineTexpectedZprogramInfor7   r:   Z
streamInfoplayUrldescbitrate)	format_idheightr"   tbrhttp_headerscoverUrl)r7   r:   formatsr9   r6   )		_match_idr&   r   r   appendr   r3   updater.   )r!   r"   r-   Z	live_infoZprogram_infoZ
program_idr:   rL   Zstream_infoplay_urlrG   infor$   r$   r%   _real_extractE   sF    
 



	zTrovoIE._real_extractN)r/   r0   r1   r   r2   
_VALID_URL_TESTSrR   r$   r$   r$   r%   r4   .   s*   

r4   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`Z20210521Z	100719456   z
mincount:1zCall of Duty: Mobilezhttps://trovo.live/OneTappedYouzre:^https?://.*\.jpg)r7   r8   r:   r*   	timestampupload_dater+   duration
view_count
like_countcomment_countcomments
categoriesr,   r9   )r"   r>   r<   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.jpgZ	100829718ZSkenonSLivez*Trovo u secanju, uz par modova i muzike :)zhttps://trovo.live/SkenonSLiveiN*  Z20220611Z	Minecraft)r7   r8   rZ   r9   r+   r*   r:   r,   r\   r]   r^   r[   r_   ra   zNot availabler;   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.jpgZ	100264059ZTrovozDev Corner 8/25zhttps://trovo.live/Trovoi  Z20220826z
Talk Shows)r"   r<   z;https://trovo.live/video/ltv-100095501_100095501_1609596043r5   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}|sLtdd	d
|d  d}t dd r d d }|dkrtdd	d
ntd| dd	d
 d}g } dpg D ]h}	|	d}
|
sq|	d}|dt|	d||rt|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 )(NZ*vod_VodReaderService_BatchGetVodDetailInfor>   Zvidsr   r?   r   r@   ZVodDetailInfos)Zexpected_typez-This video not found or not available anymoreTrA   ZvodInfor:   c                 S   s   | d d dkS )NplaybackRightsZNormalr$   xr$   r$   r%   <lambda>       z*TrovoVodIE._real_extract.<locals>.<lambda>rc   ZplaybackRightsSettingZSubscriberOnlyz,This video is only available for subscriberszThis video is not available ()ZlanguageNameZ	playInfosrC   rD   rW   ZfileSizerE   Zm3u8_nativerF   )	r8   filesizerG   rH   languageprotocolrI   r"   rJ   ZcategoryNamec                    s   t  | d S )NZNum)r   r   rd   Zvod_infor$   r%   rf      rg   rK   Z	publishTsr\   Zwatchlikecomment)r7   r:   rL   r9   rZ   r\   r]   r^   r_   ra   Z__post_extractor)rM   r&   r	   dictr   r   r
   rN   r   r3   Zextract_commentsrO   r.   )r!   r"   vidr#   Zvod_detail_infor:   Zplayback_rights_settingrj   rL   Z	play_inforP   rG   categoryZ	get_countrQ   r$   rl   r%   rR      sl    
 








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 ]t}|d}|sVqB|dpbi }|d}|dt|dt|d|t|d|dkrdnt|dV  qB|d r
 qq
d S )Nr   Z)public_CommentProxyService_GetCommentListr>   ZpostIDc   )ZappInfopreviewpageSizepage	singleReqtruerb   r@   ZcommentListcontentauthorZparentIDr(   r)   Z	commentIDZ	createdAtr   root)ry   Z	author_idr7   textrZ   parentZlastPage)	itertoolscountr&   r   r   r   )r!   rp   ru   Zcomments_jsonrn   rx   ry   r|   r$   r$   r%   _get_comments   s>      



	zTrovoVodIE._get_commentsN)
r/   r0   r1   r   r2   rS   intrT   rR   r   r$   r$   r$   r%   rU   n   s   
ACrU   c                   @   s   e Zd Zdd Zdd ZdS )TrovoChannelBaseIEc           	   	   c   s   t dD ]}| 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  qJ|d}|s
 qq
d S )Nr   r>   Z	spaceNamerr   )ZterminalSpaceIDZcurrPagert   rv   rw   rb   r@   ZvodInfosrp   )Z	spaceInfoZroomIDzhttps://trovo.live/s//z?vid=)ZieZhasMore)	r}   r~   r&   
_OPERATIONr   r	   Z
url_resultrU   Zie_key)	r!   	spacenameru   Zvod_jsonZvodsZvodrp   roomZhas_morer$   r$   r%   _entries  s4     
 




zTrovoChannelBaseIE._entriesc                 C   s   |  |}| j| ||dS )N)Zplaylist_id)rM   Zplaylist_resultr   )r!   r"   r   r$   r$   r%   rR   6  s    
z TrovoChannelBaseIE._real_extractN)r/   r0   r1   r   rR   r$   r$   r$   r%   r     s   r   c                   @   s*   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   r7   rX   r"   Zplaylist_mincountr<   Z,vod_VodReaderService_GetChannelLtvVideoInfosNr/   r0   r1   rS   ZIE_DESCrT   r   r$   r$   r$   r%   r   ;  s    r   c                   @   s*   e Zd ZdZdZddddidgZdZd	S )
TrovoChannelClipIEztrovoclip:(?P<id>[^\s]+)z6All Clips of a trovo.live channel; "trovoclip:" prefixztrovoclip:OneTappedYou   r7   rX   r   Z-vod_VodReaderService_GetChannelClipVideoInfosNr   r$   r$   r$   r%   r   J  s    r   )r}   r   r   r   commonr   utilsr   r   r   r   r	   r
   r   r4   rU   r   r   r   r$   r$   r$   r%   <module>   s    
@ ,"