U
    g5                     @   s   d dl Z d dlZd dlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ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dS )    N   )InfoExtractor   )HEADRequest)ExtractorErrorUnsupportedErrordetermine_extint_or_noneparse_resolutionstr_or_nonetraverse_objunified_timestampurl_basenameurl_or_noneurljoinc                   @   s8   e Zd ZdZdZddiZdd Zddd	ZdddZd
S )TrillerBaseIEZtrillerzhttps://social.triller.co/v1.5ZOriginzhttps://triller.coc                 C   s   | j drd S | j ddi}t| j| j dd ddd|tjd|id	d
 dd}|rftddd| j| j dd ddd|tj||dd	d
 dpi }|ds|ddkrtdddtdd|d  | j d< d S )NAuthorizationzContent-Typezapplication/jsonz/api/user/is-valid-usernamezChecking usernameFi  username),:)
separators)notefatalZexpected_statusheadersdatastatusz!Unable to login: Invalid usernameTexpectedz
/user/authz
Logging in)r   password
auth_tokenerrori  z#Unable to login: Incorrect passwordzUnable to loginBearer )	_API_HEADERSgetr   _download_json_API_BASE_URLjsondumpsencoder   )selfr   r   r   Z
user_checklogin r+   </tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/triller.py_perform_login   sJ    
    
     
zTrillerBaseIE._perform_login   c              
   c   sn   | j | j d| d|dd| jd|idp,i }|ds<d S t|ddd	thfd
dddthfdfE d H  d S )N/api/videos/z/comments_v2FzDownloading comments API JSONlimit)r   r   r   querycomments.idbody)authorr   )r5   user_id	timestamp)r3   textr5   Z	author_idr7   )r$   r%   r"   r#   r   r   r   )r)   video_idr0   Zcomment_infor+   r+   r,   _get_comments6   s&       
zTrillerBaseIE._get_commentsNc                    s  t |d }|p|d}t|d ddd hfddrB| jdd	d
 dd }g }t|ddkr~|| j|d |dddd t|ddd fD ]>}|||d t|d|dt	|ddd qt|ddt
d}	|	r|||	ddit|dd d!d"t	d t
|d#}
|
r2|||
 t|d$t	hf}||| p^t|d%d&thftd'| d(|d'| t tj||| ||d)t|d*d+d hfd*d%d, fd-dffd.fd/t
hfd0thfd1t	hfd2t	hfd3t	hfd4d5d6
ddS )7Nr3   Z
video_uuid)transcoded_url	video_url
stream_url	audio_urlc                 S   s   t d| S )Nz/copyright/)researchxr+   r+   r,   <lambda>K       z1TrillerBaseIE._parse_video_info.<locals>.<lambda>Fget_all9This video has been removed due to licensing restrictionsTr   c                 S   s   | t | t| dd dS )N.r   )urlextZ	format_id)r   r   split)rI   r+   r+   r,   format_infoN   s    z4TrillerBaseIE._parse_video_info.<locals>.format_infor;   Zm3u8mp4Zhls)Zm3u8_idr   Z	video_setc                 S   s   t |d S )NrI   )r   _vr+   r+   r,   rC   [   rD   rI   
resolutioncodecZbitratei  )vcodecZvbrr<   r=   )Zexpected_typerS   Zh264widthheightfilesize)rT   rU   rV   r>   comment_countuserr6   zhttps://triller.co/@z/video/)r3   
display_iduploaderuploader_idZwebpage_urluploader_urlZextractor_keyZ	extractorformatsrW   Z__post_extractordescriptionc                 S   s   |  ddS )Nz
 )replacerA   r+   r+   r,   rC      rD   Zusersc                    s   t |d  kS )Nr6   )strrN   r6   r+   r,   rC      rD   nameZthumbnail_urlr7   durationZ
play_countZlikes_countZsong_artistZ
song_title)
titler^   creator	thumbnailr7   rd   
view_count
like_countartisttrack)ra   r#   r   Zraise_no_formatsr   extendZ_extract_m3u8_formatsappendr
   r	   r   r   r   	TrillerIEZie_keyZIE_NAMEZextract_commentsr   )r)   
video_infor   r6   rY   r9   rL   r]   videor<   r>   rW   r+   rb   r,   _parse_video_infoE   s         
 

zTrillerBaseIE._parse_video_info)r.   )N)	__name__
__module____qualname__Z_NETRC_MACHINEr%   r"   r-   r:   rq   r+   r+   r+   r,   r      s   
r   c                   @   s   e Zd ZdZddddddddd	d
dddeed
ddedddddddddddddddddeeddd ed!d"d#d$d%dd&d'dd(dd	d
d)d*d+eed,d,ded!d"gZd-d. Zd/S )0rn   z(?x)
            https?://(?:www\.)?triller\.co/
            @(?P<username>[\w.]+)/video/(?P<id>[\da-f]{8}-(?:[\da-f]{4}-){3}[\da-f]{12})
        zKhttps://triller.co/@theestallion/video/2358fcd7-3df2-4c77-84c8-1d091610a6cfZ 228662d783923b60d78395fedddc0a20Z71595734rM   z$md5:9a2bf9435c5c4292678996a464669416.re:^https://uploads\.cdn\.triller\.co/.+\.jpg$theestallion18992236zMegan Thee StallioniηbZ20220815/   ZHer https://triller.co/@theestallion)r3   rJ   re   rg   r^   rZ   r[   rf   r7   upload_daterd   rh   ri   rj   rk   r\   rW   rG   )rI   md5	info_dictskipzLhttps://triller.co/@charlidamelio/video/46c6fcfa-aa9e-4503-a50c-68444f44cddcZ 874055f462af5b0699b9dbb527a505a0Z71621339z$md5:4c91ea82760fe0fffb71b8c3aa7295fcz$46c6fcfa-aa9e-4503-a50c-68444f44cddccharlidamelio1875551zcharli damelioicbZ20220817   ZDixiezSomeone to Blame!https://triller.co/@charlidamelior3   rJ   re   rY   rg   r^   rZ   r[   rf   r7   rz   rd   rh   ri   rj   rk   r\   rW   rI   r{   r|   zKhttps://triller.co/@theestallion/video/07f35f38-1f51-48e2-8c5f-f7a8e829988fZ af7b3553e4b8bfca507636471ee2eb41Z71837829uV   UNGRATEFUL VIDEO OUT NOW 👏🏾👏🏾👏🏾 💙💙 link my bio  #womeninhiphopz$07f35f38-1f51-48e2-8c5f-f7a8e829988fuW   UNGRATEFUL VIDEO OUT NOW 👏🏾👏🏾👏🏾 💙💙 link my bio
 #womeninhiphopicZ20220906   Unknownc                 C   sL   |  |dd\}}| j| j d| || jdd d }| ||d |S )Nr   r3   r/   )r   videosr   )Z_match_valid_urlgroupr$   r%   r"   rq   )r)   rI   r   rY   ro   r+   r+   r,   _real_extract   s     zTrillerIE._real_extractNrr   rs   rt   
_VALID_URLint_TESTSr   r+   r+   r+   r,   rn      s   Grn   c                   @   sR   e Zd ZdZdddddddd	d
dddddgZdd ZdddZdd ZdS )TrillerUserIEz:https?://(?:www\.)?triller\.co/@(?P<id>[\w.]+)/?(?:$|[#?])ry      rw   rv   ru   )r3   re   rg   )rI   Zplaylist_mincountr|   r      r   r~   c              	   C   s\   | j dsX| j| j dd dd| j dddd}|d	sDtd
d|d	  | j d< d S )Nr   z/user/create_guestzCreating guest sessionrD   ZWeb )platformZapp_version)r   r   r   r1   r   z7Unable to fetch required auth token for user extractionr!   )r"   r#   r$   r%   r   )r)   Zguestr+   r+   r,   _real_initialize   s    
   
zTrillerUserIE._real_initialize   c                 c   s   d|i}t dD ]h}| j| j d| d|d| | j|d}t|dD ]}| |||V  qJt|d|d	< |d	 s q|qd S )
Nr0   r   z/api/users/z/videosz!Downloading user video list page )r   r   r1   )r   .)r   r7   Zbefore_time)	itertoolscountr$   r%   r"   r   rq   )r)   r   r6   r0   r1   pager   rp   r+   r+   r,   _entries  s      zTrillerUserIE._entriesc                 C   s   |  |}t| j| j d| |d| jddthfp8i }|dr`|ddkr`tdd	d
n t|dthfddrtdd	d
t	|d}|std| j
| |||||ddS )Nz/api/users/by_username/zDownloading user info)r   r   rX   privateZfollowed_by_me)TtruezThis user profile is privateTr   )Zblocked_by_userZblocking_userFrE   z"The author of the video is blockedr6   zUnable to extract user IDZ
avatar_url)rg   )	_match_idr   r$   r%   r"   dictr#   r   boolr   Zplaylist_resultr   )r)   rI   r   Z	user_infor6   r+   r+   r,   r     s0    
  
   zTrillerUserIE._real_extractN)r   )rr   rs   rt   r   r   r   r   r   r+   r+   r+   r,   r      s&   	
r   c                   @   sL   e Zd ZdZddddddddd	d
ddddeedddeddgZdd ZdS )TrillerShortIEz#https?://v\.triller\.co/(?P<id>\w+)zhttps://v.triller.co/WWZNWkZ 5eb8dc2c971bd8cd794ec9e8d5e9d101Z66210052rM   z$md5:2dfc89d154cd91a4a18cd9582ba03e16z$f4480e1f-fb4e-45b9-a44c-9e6c679ce7ebru   ZstatefairentZ	487545193u   Official Summer Fair of LAi"aZ20210822   r   z https://triller.co/@statefairentr   r   c                 C   s4   |  t|| |j}| |r*t|| |S )N)Z_request_webpager   r   rI   Zsuitabler   Z
url_result)r)   rI   Zreal_urlr+   r+   r,   r   E  s    
zTrillerShortIE._real_extractNr   r+   r+   r+   r,   r   *  s0   r   )r   r&   r?   commonr   Z
networkingr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   rn   r   r   r+   r+   r+   r,   <module>   s   4zVD