U
    $Pf                     @   sl   d dl mZ d dlZddlmZ ddl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dS )    )unicode_literalsN   )InfoExtractor   )ExtractorErrorint_or_nonestr_or_nonetry_getc                   @   s   e Zd ZdZdd ZdS )TrovoBaseIEzhttps?://(?:www\.)?trovo\.live/c                 C   s@   | dpi }| d}| dt| d|r8d| nd dS )NZstreamerInfoZuserNamenickNameuidzhttps://trovo.live/)uploaderuploader_idZuploader_url)getr   )selfdataZstreamer_infousername r   >/tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/extractor/trovo.py_extract_streamer_info   s    
z"TrovoBaseIE._extract_streamer_infoN)__name__
__module____qualname___VALID_URL_BASEr   r   r   r   r   r
      s   r
   c                   @   s   e Zd Zejd Zdd ZdS )TrovoIEz#(?!(?:clip|video)/)(?P<id>[^/?&#]+)c                 C   s   |  |}| jd|dd| idd d }|ddkrHtd	| d
d|d }|d }| |d }g }|dpvg D ]D}|d}	|	sqx|d}
||
|
rt|
d d nd |	d qx| | ||||dd
d}|| 	| |S )Nhttps://gql.trovo.live/queryz{
  getLiveInfo(params: {userName: "%s"}) {
    isLive
    programInfo	{
      coverUrl
      id
      streamInfo {
        desc
        playUrl
      }
      title
    }
    streamerInfo {
        nickName
        uid
        userName
    }
  }
})r   r   ZgetLiveInfoZisLiver   z%s is offlineT)expectedZprogramInfoidtitleZ
streamInfoplayUrldesc)	format_idheighturlcoverUrl)r   r   formats	thumbnailZis_live)
	_match_id_download_jsonr   r   Z_live_titleappendr   _sort_formatsupdater   )r   r%   r   Z	live_infoZprogram_infoZ
program_idr   r'   Zstream_infoplay_urlr#   infor   r   r   _real_extract   sN    
  



zTrovoIE._real_extractN)r   r   r   r
   r   
_VALID_URLr0   r   r   r   r   r      s   
r   c                   @   sP   e Zd Zejd Zdddddddd	d
eeeddgdddddgZdd ZdS )
TrovoVodIEz(?:clip|video)/(?P<id>[^/?&#]+)z;https://trovo.live/video/ltv-100095501_100095501_1609596043z"ltv-100095501_100095501_1609596043mp4z)Spontaner 12 Stunden Stream! - Ok Boomer!ZExsliq)_Z20210103Z	100095501iɫ  z
mincount:8zGrand Theft Auto V)r   extr   r   	timestampZupload_dater   duration
view_count
like_countcomment_countcomments
categories)r%   Z	info_dictz.https://trovo.live/clip/lc-5285890810184026005T)r%   Zonly_matchingc                    s  |  |}| jd|tdd| idd| ig ddid}|d d	 d
 d | }|d   d } d}g } dpg D ]h}|d}	|	sq|d}
|dt|d|
|
rt|
d d nd |dt|d|	ddid	 q| |  d} fdd}t	|dd t
p g }g }|D ]}|d}|sBq*|dpPi }|d }||d!t|d"t|d#|t|d$|dkrd%nt|d& q*||| d't d(t d)|d*|d+|d,||r|gnd d-}|| | |S ).Nr   r   zL{
  batchGetVodDetailInfo(params: {vids: ["%s"]}) {
    VodDetailInfos
  }
}z{
  getCommentList(params: {appInfo: {postID: "%s"}, pageSize: 1000000000, preview: {}}) {
    commentList {
      author {
        nickName
        uid
      }
      commentID
      content
      createdAt
      parentID
    }
  }
}zContent-Typezapplication/json)r   headersr   r   ZbatchGetVodDetailInfoZVodDetailInfosZvodInfor   ZlanguageNameZ	playInfosr    r!   r3   ZfileSizer"   Zm3u8_nativeZbitrateZOriginzhttps://trovo.live)	r4   filesizer#   r$   languageprotocolZtbrr%   Zhttp_headersZcategoryNamec                    s   t  | d S )NZNum)r   r   xZvod_infor   r   <lambda>       z*TrovoVodIE._real_extract.<locals>.<lambda>c                 S   s   | d d d d S )Nr   r   ZgetCommentListZcommentListr   r@   r   r   r   rC      rD   contentauthorZparentIDr   r   Z	commentIDZ	createdAtroot)rF   Z	author_idr   textr5   parentr&   Z	publishTsr6   Zwatchlikecomment)r   r   r'   r(   r5   r6   r7   r8   r9   r:   r;   )r)   r*   jsondumpsencoder   r+   r   r,   r	   listr   r-   r   )r   r%   ZvidrespZvod_detail_infor   r>   r'   Z	play_infor.   r#   categoryZ	get_countZcomment_listr:   rK   rE   rF   rI   r/   r   rB   r   r0   m   s    
     








zTrovoVodIE._real_extractN)	r   r   r   r
   r   r1   intZ_TESTSr0   r   r   r   r   r2   U   s,   
r2   )
__future__r   rL   commonr   utilsr   r   r   r	   r
   r   r2   r   r   r   r   <module>   s   9