a
    h=                     @   s`   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	 ddl
mZmZ G dd deZdS )	    N   )InfoExtractor   )int_or_nonejwt_decode_hs256try_callurl_or_none)requiretraverse_objc                   @   s   e Zd ZdZdddddddeeeeedd	d
gdeedeedddidddddddddeeeeeddd
gddddddd d!d"d#dd$d%d&d'eeeeed(d)d
d*gd+d,d-d.d-d/d gZd0Zd1Zd2d3 Z	d4d5 Z
d6d7 Zd8S )9LocoIEzGhttps?://(?:www\.)?loco\.com/(?P<type>streamers|stream)/(?P<id>[^/?#]+)z$https://loco.com/streamers/teuzinfpsZ	teuzinfpsZmp4z,re:MS BOLADAO, RESENHA & GAMEPLAY ALTO NIVELz
bom e novoZ
RLUVE3S9JUzZhttps://static.ivory.getloconow.com/default_thumb/743701a9-98ca-41ae-9a8b-70bd5da070ad.jpgZMMORPGZGameplayZTibiais_live)idexttitledescriptionuploader_idchannelchannel_follower_countcomment_count
view_countconcurrent_view_count
like_count	thumbnailtagsseries	timestampmodified_timestampZlive_statusupload_datemodified_dateZskip_downloadZ
Livestream)url	info_dictparamsz<https://loco.com/stream/c64916eb-10fb-46a9-9a19-8c4b7ed064e7Z 8b9bda03eba4d066928ae8d71f19befbz$c64916eb-10fb-46a9-9a19-8c4b7ed064e7zPAULINHO LOKO NA LOCO!zlive on na locoZ
2MDO7Z1DPMZpaulinholokobri8  zZhttps://static.ivory.getloconow.com/default_thumb/59b5970b-23c1-4518-9e96-17ce341299fe.jpgzGTA 5igiWZ]hZ20250226Z20250626)r   r   r   r   r   r   r   r   r   r   r   durationr   r   r   r   r   r   r   )r   md5r    z<https://loco.com/stream/ac854641-ae0f-497c-a8ea-4195f6d8cc53Z 0513edf85c1e65c9521f555f665387d5z$ac854641-ae0f-497c-a8ea-4195f6d8cc53z-DUAS CONTAS DESAFIANTE, RUSH TOP 1 NO BRASIL!z$md5:aa77818edd6fe00dd4b6be75cba5f826Z
7Y9JNAZC3QZayelloli  zZhttps://static.ivory.getloconow.com/default_thumb/f5aa678b-6d04-45d9-a89a-859af0a8028f.jpgZCarryzLeague of Legendsi-UgZ20250305iUg)r   r   r   r   r   r   r   r   r   r   r   r"   r   r   r   r   r   r   r   Z(TlwKp1zmF6eKFpcisn3FyR18WkhcPkZtzwPVEEC3ZKp7tYlUN7LXvtcSpwYvIitgYcLparbtsQSe5AdyyCdiEJBP53Vt9J8eB4AsLdChIpcO2BM19RA3HsGtqDJFjWmwoonvMSG3ZQmnS8x1YIM8yl82xMXZGbE3NKiqmgBVUc                 C   s   t |d t  dk S )Nexpi,  )r   time)selftoken r(   J/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/loco.py_is_jwt_expired]   s    zLocoIE._is_jwt_expiredc                    s   t  fdd}|r" |s"|S t jd|ddtd j jddd	d	d
 dd	t
jdddd dd j jdddd}|r |s dd| |S d S )Nc                      s     dd jS )Nzhttps://loco.comaccess_token)Z_get_cookiesvaluer(   r&   r(   r)   <lambda>a       z*LocoIE._get_access_token.<locals>.<lambda>z2https://api.getloconow.com/v3/user/device_profile/zDownloading access tokenF   ZMozillaZWin32z5.0 (Windows))platformZ	client_idZclient_secretmodelos_nameZos_verZapp_verzapplication/json;charset=utf-8 0123456789abcdef    )kZliveenzen-US7)zContent-Typez	DEVICE-IDz
X-APP-LANGzX-APP-LOCALEzX-CLIENT-IDzX-CLIENT-SECRETz
X-PLATFORM)fataldataheadersr+   z	.loco.com)r   r*   r
   Z_download_jsonjsondumps
_CLIENT_ID_CLIENT_SECRETencodejoinrandomchoicesZ_set_cookie)r&   video_idr+   r(   r-   r)   _get_access_token`   s8    
	zLocoIE._get_access_tokenc                 C   s*  |  |dd\}}| ||}t| ||dddthttdhf}| | }rx| j	d|dd	d
|id|d id | 
|d d |||dkdt|dthfdthfdthfdthfdthfdthfdthfdthfdthfddthfdtddhfdtddhfd thfd!thfd"thfd#S )$Ntyper   .)NZssrData)ZliveStreamDatastreamZ
liveStreamzstream infoz)https://drm.loco.com/v1/streams/playback/zDownloading video authorizationFauthorizationZ
stream_uiduid)r:   r<   queryconfZhlsZ	streamers)formatsr   r   r   Z	game_nameZuser_uidaliasr   ZviewersCurrentZtotal_viewsZthumbnail_url_smallZlikesr   Z
started_ati  )ZscaleZ
updated_atZcomments_countZfollowers_countr"   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"   )Z_match_valid_urlgroupZ_download_webpager
   Z_search_nextjs_v13_datadictanyr	   rF   Z_request_webpageZ_extract_m3u8_formatsstrr   r   )r&   r   Z
video_typerE   ZwebpagerH   r+   r(   r(   r)   _real_extract{   sH    	
zLocoIE._real_extractN)__name__
__module____qualname__Z
_VALID_URLintrR   Z_TESTSr?   r@   r*   rF   rS   r(   r(   r(   r)   r   
   s   Nr   )r=   rC   r%   commonr   utilsr   r   r   r   Zutils.traversalr	   r
   r   r(   r(   r(   r)   <module>   s   