
    V|hd2                         S SK r S SKrS SKrS SKrSSKJr  SSKJrJrJ	r	J
r
JrJr   " S S\5      r " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      rg)    N   )InfoExtractor   )ExtractorErrorformat_fieldint_or_nonestr_or_nonetraverse_objtry_getc                   ,    \ rS rSrSrSS0rS rS rSrg)	TrovoBaseIE   zhttps?://(?:www\.)?trovo\.live/Originzhttps://trovo.livec                    SUR                  S0 5      ;   a  SnOSnU R                  X1[        R                  " U/5      R	                  5       SS0SSR                  [        R                  " [        R                  [        R                  -   S	S
95      0S9S   nSU;   a  [        SUS   S   S    35      eUS   U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        P/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/trovo.py	_call_api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                     UR                  S5      =(       d    0 nUR                  S5      nUR                  S5      [        UR                  S5      5      [        US S5      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_info"TrovoBaseIE._extract_streamer_info$   s]    06B $$Z0%))*5&}'8'8'?@(49PQ
 	
r0    N)	__name__
__module____qualname____firstlineno___VALID_URL_BASE_HEADERSr.   r;   __static_attributes__r=   r0   r-   r   r      s    8O./H3
r0   r   c                   h    \ rS rSr\R
                  S-   rSSS.SSS.SSS	S
SSSSSS.SS./rS rSr	g)TrovoIE.   zA(?: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extr8   r7   	thumbnailr6   titlelive_statuszMay not be liver+   	info_dictskipc           	      L   U R                  U5      nU R                  USSSU00S.S9nUR                  S5      S:X  a  [        U S3S	S
9eUS   nUS   nUS   n/ nUR                  S5      =(       d    /  Hs  nUR                  S5      n	U	(       d  M  UR                  S5      n
UR	                  U
U
(       a  [        U
S S 5      OS U	UR                  S5      U R                  S.5        Mu     UUUUR                  S5      S	S.nUR                  U R                  U5      5        U$ )N"live_LiveReaderService_GetLiveInfoparamsr3   )r   	variablesr   isLiver   z is offlineTexpectedprogramInforO   rR   
streamInfoplayUrldescbitrate)	format_idheightr+   tbrhttp_headerscoverUrl)rO   rR   formatsrQ   rN   )		_match_idr.   r   r   appendr   rC   updater;   )r)   r+   r:   	live_infoprogram_info
program_idrR   rj   stream_infoplay_urlre   infos               r-   _real_extractTrovoIE._real_extractE   sC   >>#&NN8A3
N 	 =="a' H:[!9DII /!$'
W%(,,\:@b@K"y1H#/INN&9B+in5"y1 $  A %))*5
 	D//	:;r0   r=   N)
r>   r?   r@   rA   r   rB   
_VALID_URL_TESTSrt   rD   r=   r0   r-   rF   rF   .   sc    ,,/ssJ( ? 828&|!O$	
 "F*&r0   rF   c                       \ rS rSr\R
                  S-   rSSS0SSSS	S
SSS\\\SS/SSS.S.SSSSSSSSSS\\S\S/S.S S!.S"S#SS$S%S&S'S(S)S*\\S+\S,/S.S-.S.SS/.S0SS/./rS1 r	S2 r
S3rg4)5
TrovoVodIEn   zD(?: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)rO   rP   rR   r6   	timestampupload_dater7   duration
view_count
like_countcomment_countcomments
categoriesr8   rQ   )r+   rY   rU   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)rO   rP   r   rQ   r7   r6   rR   r8   r   r   r   r   r   r   zNot availablerT   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+   rU   z;https://trovo.live/video/ltv-100095501_100095501_1609596043rH   zdhttps://trovo.live/s/SkenonSLive/549759191497?foo=bar&vid=ltv-100829718_100829718_387702301737980280c                 D  ^ U R                  U5      nU R                  USSSU/000 S.S9n[        USU4[        S9nU(       d
  [	        SS	S
9eUR                  S5      mTR                  S5      n[        TS 5      (       a&  TS   S   nUS:X  a
  [	        SS	S
9e[	        SU S3S	S
9eTR                  S5      n/ nTR                  S5      =(       d    /  H  n	U	R                  S5      n
U
(       d  M  U	R                  S5      nUR                  S[        U	R                  S5      5      UU(       a  [        US S 5      OS US[        U	R                  S5      5      U
U R                  S.	5        M     TR                  S5      nU4S jnUUUTR                  S 5      [        TR                  S!5      5      [        TR                  S"5      5      U" S#5      U" S$5      U" S%5      U(       a  U/OS U R                  U5      S&.nUR                  U R                  U5      5        U$ )'N*vod_VodReaderService_BatchGetVodDetailInforY   vidsr   rZ   r   r[   VodDetailInfos)expected_typez-This video not found or not available anymoreTr]   vodInforR   c                     U S   S   S:g  $ )NplaybackRightsNormalr=   )xs    r-   <lambda>*TrovoVodIE._real_extract.<locals>.<lambda>   s    q)9':;K'LPX'Xr0   r   playbackRightsSettingSubscriberOnlyz,This video is only available for subscriberszThis video is not available ()languageName	playInfosra   rb   r|   fileSizerc   m3u8_nativerd   )	rP   filesizere   rf   languageprotocolrg   r+   rh   categoryNamec                 >   > [        TR                  U S-   5      5      $ )NNum)r   r   )r   vod_infos    r-   r   r      s    k(,,q5y*ABr0   ri   	publishTsr   watchlikecomment)rO   rR   rj   rQ   r   r   r   r   r   r   __post_extractor)rk   r.   r
   dictr   r   r   rl   r   rC   extract_commentsrm   r;   )r)   r+   vidr,   vod_detail_inforR   playback_rights_settingr   rj   	play_inforr   re   category	get_countrs   r   s                  @r-   rt   TrovoVodIE._real_extract   s-   nnS!
 ~~cISE
 )
~  't.>-DTXY !P[_``"&&y1W%8XYY&./?&@AX&Y#&*::$%S^bcc$'DE\D]]^%_jnoo<</",,{39r9I }}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r0   c              #   $  #    [         R                  " S5       H  nU R                  USSSU00 SUS.0SS0S	.S
9nUS    H  nUR                  S5      nU(       d  M  UR                  S5      =(       d    0 nUR                  S5      nUR                  S5      [	        UR                  S5      5      [	        UR                  S5      5      U[        UR                  S5      5      US:X  a  SO
[	        U5      S.v   M     US   (       d  M    g    g 7f)Nr   )public_CommentProxyService_GetCommentListrY   postIDc   )appInfopreviewpageSizepage	singleReqtruer   r[   commentListcontentauthorparentIDr4   r5   	commentID	createdAtr   root)r   	author_idrO   textr   parentlastPage)	itertoolscountr.   r   r	   r   )r)   r   r   comments_jsonr   r   r   r   s           r-   _get_comments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  8 Z((C 's   DDDr=   N)r>   r?   r@   rA   r   rB   rv   intrw   rt   r   rD   r=   r0   r-   ry   ry   n   s   ,,/vvJK $'*=&#%& $12=0
* n># S&%A<% &-
   %( h># S&&6% '.
& M vy?FBAF"r0   ry   c                        \ rS rSrS rS rSrg)TrovoChannelBaseIEi  c           
   #     #    [         R                  " S5       H  nU R                  UU R                  SSU0USS.0SS0S.S	9nUR	                  S
/ 5      nU HM  nUR	                  S5      n[        US5      nU R                  SU SU SU 3[        R                  5       S9v   MO     UR	                  S5      nU(       a  M    g    g 7f)Nr   rY   	spaceNamer   )terminalSpaceIDcurrPager   r   r   r   r[   vodInfosr   )	spaceInforoomIDzhttps://trovo.live/s//z?vid=)iehasMore)	r   r   r.   
_OPERATIONr   r
   
url_resultry   ie_key)	r)   	spacenamer   vod_jsonvodsvodr   roomhas_mores	            r-   _entriesTrovoChannelBaseIE._entries  s     OOA&D~~i!%', %)$&  7~ H <<
B/Dggen#C)@Aoo+I;avU3%H!((* & , ,   ||I.H83 's   B=CCc                 b    U R                  U5      nU R                  U R                  U5      US9$ )N)playlist_id)rk   playlist_resultr   )r)   r+   r   s      r-   rt    TrovoChannelBaseIE._real_extract6  s/    NN3'	##DMM)$<)#TTr0   r=   N)r>   r?   r@   rA   r   rt   rD   r=   r0   r-   r   r     s    8Ur0   r   c                   2    \ rS rSrSrSrSSSS0S./rS	rS
rg)TrovoChannelVodIEi;  ztrovovod:(?P<id>[^\s]+)z4All VODs of a trovo.live channel; "trovovod:" prefixztrovovod:OneTappedYou   rO   r}   r+   playlist_mincountrU   ,vod_VodReaderService_GetChannelLtvVideoInfosr=   N	r>   r?   r@   rA   rv   IE_DESCrw   r   rD   r=   r0   r-   r   r   ;  s2    +JDG '.
 F @Jr0   r   c                   2    \ rS rSrSrSrSSSS0S./rS	rS
rg)TrovoChannelClipIEiJ  ztrovoclip:(?P<id>[^\s]+)z6All Clips of a trovo.live channel; "trovoclip:" prefixztrovoclip:OneTappedYou   rO   r}   r   -vod_VodReaderService_GetChannelClipVideoInfosr=   Nr   r=   r0   r-   r   r   J  s2    ,JFG (.
 F AJr0   r   )r   r    r$   r&   commonr   utilsr   r   r   r	   r
   r   r   rF   ry   r   r   r   r=   r0   r-   <module>r      ss        ! 
- 
:=k =@h hVU UD@* @A+ Ar0   