
    VGhd2                         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e      Z G d d	e      Z G d
 de      Z G d de      Z G d de      Z G d de      Zy)    N   )InfoExtractor   )ExtractorErrorformat_fieldint_or_nonestr_or_nonetraverse_objtry_getc                   $    e Zd ZdZddiZd Zd Zy)TrovoBaseIEzhttps?://(?:www\.)?trovo\.live/Originzhttps://trovo.livec                    d|j                  di       v rd}nd}| j                  ||t        j                  |g      j	                         ddiddj                  t        j                  t        j                  t        j                  z   d	
            i      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resps        _/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/trovo.py	_call_apizTrovoBaseIE._call_api   s    txxb99*C6C""

D6 2 9 9 ;hPbEcrwwv~~f.D.Dv}}.TXZ[\ #  	
 t <Xq0A)0L/M!NOOF|D122    c                     |j                  d      xs i }|j                  d      }|j                  d      t        |j                  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usernames       r,   _extract_streamer_infoz"TrovoBaseIE._extract_streamer_info$   s]    06B $$Z0%))*5&}'8'8'?@(49PQ
 	
r.   N)__name__
__module____qualname___VALID_URL_BASE_HEADERSr-   r9    r.   r,   r   r      s    8O./H3
r.   r   c                   `    e Zd Zej                  dz   Zdddddddddd	d
dddddddgZd Zy)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extr6   r5   	thumbnailr4   titlelive_statuszMay not be liver*   	info_dictskipc           	      2   | j                  |      }| j                  |ddd|iid      }|j                  d      dk(  rt        | dd	
      |d   }|d   }|d   }g }|j                  d      xs g D ]g  }|j                  d      }	|	s|j                  d      }
|j	                  |
|
rt        |
d d       nd |	|j                  d      | j                  d       i ||||j                  d      d	d}|j                  | j                  |             |S )N"live_LiveReaderService_GetLiveInfoparamsr1   )r   	variablesr   isLiver   z is offlineTexpectedprogramInforI   rL   
streamInfoplayUrldescbitrate)	format_idheightr*   tbrhttp_headerscoverUrl)rI   rL   formatsrK   rH   )		_match_idr-   r   r   appendr   r>   updater9   )r(   r*   r8   	live_infoprogram_info
program_idrL   rd   stream_infoplay_urlr_   infos               r,   _real_extractzTrovoIE._real_extractE   sD   >>#&NN8A3
N 	 =="a' H:[!9DII /!$'
W%(,,\:@b 	K"y1H#/INN&9B+in5"y1 $ 	 %))*5
 	D//	:;r.   N)r:   r;   r<   r   r=   
_VALID_URL_TESTSrn   r?   r.   r,   rA   rA   .   sc    ,,/ssJ( ? 828&|!O$	
 "F*&r.   rA   c                       e Zd Zej                  dz   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d0 Zd1 Z	y2)3
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)rI   rJ   rL   r4   	timestampupload_dater5   duration
view_count
like_countcomment_countcomments
categoriesr6   rK   )r*   rS   rO   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)rI   rJ   ry   rK   r5   r4   rL   r6   r{   r|   r}   rz   r~   r   zNot availablerN   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*   rO   z;https://trovo.live/video/ltv-100095501_100095501_1609596043rB   zdhttps://trovo.live/s/SkenonSLive/549759191497?foo=bar&vid=ltv-100829718_100829718_387702301737980280c                    | j                  |      }| j                  |ddd|giii d      }t        |d|ft              }|st	        dd	
      |j                  d      j                  d      }t        d       r+d   d   }|dk(  rt	        dd	
      t	        d| dd	
      j                  d      }g }j                  d      xs g D ]  }	|	j                  d      }
|
s|	j                  d      }|j                  dt        |	j                  d            ||rt        |d d       nd |dt        |	j                  d            |
| j                  d	        j                  d      }fd}|||j                  d       t        j                  d!            t        j                  d"             |d#       |d$       |d%      |r|gnd | j                  |      d&}|j                  | j                  |             |S )'N*vod_VodReaderService_BatchGetVodDetailInforS   vidsr   rT   r   rU   VodDetailInfos)expected_typez-This video not found or not available anymoreTrW   vodInforL   c                     | d   d   dk7  S )NplaybackRightsNormalr?   )xs    r,   <lambda>z*TrovoVodIE._real_extract.<locals>.<lambda>   s    q)9':;K'LPX'X r.   r   playbackRightsSettingSubscriberOnlyz,This video is only available for subscriberszThis video is not available ()languageName	playInfosr[   r\   rt   fileSizer]   m3u8_nativer^   )	rJ   filesizer_   r`   languageprotocolra   r*   rb   categoryNamec                 >    t        j                  | dz               S )NNum)r   r   )r   vod_infos    r,   r   z*TrovoVodIE._real_extract.<locals>.<lambda>   s    k(,,q5y*AB r.   rc   	publishTsr{   watchlikecomment)rI   rL   rd   rK   ry   r{   r|   r}   r~   r   __post_extractor)re   r-   r
   dictr   r   r   rf   r   r>   extract_commentsrg   r9   )r(   r*   vidr+   vod_detail_inforL   playback_rights_settingr   rd   	play_inforl   r_   category	get_countrm   r   s                  @r,   rn   zTrovoVodIE._real_extract   s,   nnS!
 ~~cISE
 )
~  't.>-DTXY !P[_``"&&y1W%8XY&./?&@AX&Y#&*::$%S^bcc$'DE\D]]^%_jnoo<</",,{39r 	I }}Y/H!f-INN'	j(AB&9B+in5$)"9==#;< $
 
	" <</B	 !j1$X\\+%>?#HLL$<=#G,#F+&y1(08*d $ 5 5c :
 	D//@Ar.   c              #     K   t        j                  d      D ]  }| j                  |ddd|ii d|diddid	
      }|d   D ]  }|j                  d      }|s|j                  d      xs i }|j                  d      }|j                  d      t	        |j                  d            t	        |j                  d            |t        |j                  d            |dk(  rdn
t	        |      d  |d   s y  y w)Nr   )public_CommentProxyService_GetCommentListrS   postIDc   )appInfopreviewpageSizepage	singleReqtruer   rU   commentListcontentauthorparentIDr2   r3   	commentID	createdAtr   root)r   	author_idrI   textry   parentlastPage)	itertoolscountr-   r   r	   r   )r(   r   r   comments_jsonr   r   r   r   s           r,   _get_commentszTrovoVodIE._get_comments   s    OOA& !	D NN3!L$c$ $&$& $	  6N M  )7 !++i0 X.4" Z0$jj4!,VZZ->!?%gkk+&>?#!,W[[-E!F(.!fV9L  Z(C!	s   C6C=9C=N)
r:   r;   r<   r   r=   ro   intrp   rn   r   r?   r.   r,   rr   rr   n   s   ,,/vvJK $'*=&#%& $12=0
* n># S&%A<% &-
   %( h># S&&6% '.
& M vy?FBAF"r.   rr   c                       e Zd Zd Zd Zy)TrovoChannelBaseIEc           
   #     K   t        j                  d      D ]  }| j                  || j                  dd|i|ddiddid	      }|j	                  d
g       }|D ]O  }|j	                  d      }t        |d      }| j                  d| d| d| t        j                                Q |j	                  d      }|r y  y w)Nr   rS   	spaceNamer   )terminalSpaceIDcurrPager   r   r   r   rU   vodInfosr   )	spaceInforoomIDzhttps://trovo.live/s//z?vid=)iehasMore)	r   r   r-   
_OPERATIONr   r
   
url_resultrr   ie_key)	r(   	spacenamer   vod_jsonvodsvodr   roomhas_mores	            r,   _entrieszTrovoChannelBaseIE._entries  s     OOA& 	D~~i!%', %)$&  7~ H <<
B/D ,ggen#C)@Aoo+I;avU3%H!((* & , ,,  ||I.H3	s   B=C Cc                 h    | j                  |      }| j                  | j                  |      |      S )N)playlist_id)re   playlist_resultr   )r(   r*   r   s      r,   rn   z TrovoChannelBaseIE._real_extract6  s/    NN3'	##DMM)$<)#TTr.   N)r:   r;   r<   r   rn   r?   r.   r,   r   r     s    8Ur.   r   c                   *    e Zd ZdZdZddddidgZdZy	)
TrovoChannelVodIEztrovovod:(?P<id>[^\s]+)z4All VODs of a trovo.live channel; "trovovod:" prefixztrovovod:OneTappedYou   rI   ru   r*   playlist_mincountrO   ,vod_VodReaderService_GetChannelLtvVideoInfosNr:   r;   r<   ro   IE_DESCrp   r   r?   r.   r,   r   r   ;  s2    +JDG '.
 F @Jr.   r   c                   *    e Zd ZdZdZddddidgZdZy	)
TrovoChannelClipIEztrovoclip:(?P<id>[^\s]+)z6All Clips of a trovo.live channel; "trovoclip:" prefixztrovoclip:OneTappedYou   rI   ru   r   -vod_VodReaderService_GetChannelClipVideoInfosNr   r?   r.   r,   r   r   J  s2    ,JFG (.
 F AJr.   r   )r   r   r#   r%   commonr   utilsr   r   r   r	   r
   r   r   rA   rr   r   r   r   r?   r.   r,   <module>r      ss        ! 
- 
:=k =@h hVU UD@* @A+ Ar.   