
    Ği                     N    d dl Z ddlmZ ddlmZmZmZmZ  G d de          ZdS )    N   )InfoExtractor   )ExtractorErrorlowercase_escapeurl_or_noneurlencode_postdatac                   |    e Zd ZdZdddddddd	did
ddddddddddddddddgZddddddZd Zd Zd ZdS )ChaturbateIEzahttps?://(?:[^/]+\.)?chaturbate\.(?P<tld>com|eu|global)/(?:fullvideo/?\?.*?\bb=)?(?P<id>[^/?&#]+)z$https://www.chaturbate.com/siswet19/siswet19mp4z:re:^siswet19 [0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$   T)idexttitle	age_limitis_liveskip_downloadzRoom is offline)url	info_dictparamsskipz*https://chaturbate.com/fullvideo/?b=caylin)r   only_matchingz#https://en.chaturbate.com/siswet19/zhttps://chaturbate.eu/siswet19/z)https://chaturbate.eu/fullvideo/?b=caylinz#https://chaturbate.global/siswet19/zRoom is currently offlinez#Room is currently in a private showzPerformer is currently awayzRoom is password protectedzHidden session in progress)offlineprivateawayzpassword protectedhiddenc                    |                      d| d|t          d|i          i |                                 ddddd	          pi }|                    d
          }|sw|                    d          }| j                            |          x}rt          |d          |dk    r|                                  |                     d| d           d S ||d| ddd|                     ||dd          dS )Nhttps://chaturbate.z/get_edge_hls_url_ajax/	room_slugXMLHttpRequestzapplication/json)zX-Requested-WithAcceptFT)dataheadersfatalimpersonater   room_statusexpectedpubliczGot status "z." from API; falling back to webpage extraction+https://roomimg.stream.highwebmedia.com/ri/.jpgr   r   )r   live)r   r   	thumbnailr   r   formats)	_download_jsonr	   geo_verification_headersget
_ERROR_MAPr   raise_geo_restrictedreport_warning_extract_m3u8_formats)selfvideo_idtldresponsem3u8_urlstatuserrors          `C:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/chaturbate.py_extract_from_apizChaturbateIE._extract_from_api4   sb   &&>#>>>#[($;<<//11$4,    ' . . 4 24 	 <<&& 	\\-00F++F333u ;$UT::::!!))+++ ev e e efff4 UxUUU11(H%VZ1[[
 
 	
    c                    |                      d| d| d||                                 d          g }|                     |                     dddd	          |t          d
          }|r9t          |                    d                    }|r|                    |           |sMt          j	        d          D ]7}|                    t	          |
                    d                               8|s@t          j	        d          D ]*}|                    |
                    d                     +g }|D ]:}||                    dd          }
}	|	|
fD ]}||vr|                    |           ;|sv|                     ddgddd           }|s6t          fd| j        d         ddfD                       r| j        d         }|rt          |d          t          d          g }|D ]K}dD ]}d| |v r|} nd }|                    |                     ||d|dk    rd nd |d
d!                     L||d"| d#|                               d|d$S )%Nr   /T)r$   r&   z9initialRoomDossier\s*=\s*(["\'])(?P<value>(?:(?!\1).)+)\1r#   z{}value)defaultgroupF)transform_sourcer%   
hls_sourcez'(\\u002[27])(?P<url>http.+?\.m3u8.*?)\1r   z"(["\'])(?P<url>http.+?\.m3u8.*?)\1_fast z?<span[^>]+class=(["\'])desc_span\1[^>]*>(?P<error>[^<]+)</span>zA<div[^>]+id=(["\'])defchat\1[^>]*>\s*<p><strong>(?P<error>[^<]+)<r=   )rE   rD   c              3       K   | ]}|v V  	d S )N ).0pwebpages     r>   	<genexpr>z2ChaturbateIE._extract_from_html.<locals>.<genexpr>y   s?       W WqG| W W W W W Wr@   r   offline_tippingtip_offliner(   zUnable to find stream URL)fastslow_r   rR   i)r   
preferencem3u8_idr%   r-   r+   r,   )r   r   r.   r   r   r/   )_download_webpager1   _parse_json_search_regexr   r   r2   appendrefinditerrE   replaceanyr3   r   extendr6   _rta_search)r7   r8   r9   found_m3u8_urlsr#   r;   m	m3u8_urlsfound_m3u8_urlm3u8_fast_urlm3u8_no_fast_urlr=   r/   known_idrV   rN   s                  @r>   _extract_from_htmlzChaturbateIE._extract_from_htmlQ   s   ((3#33333X1133 ) G G LW  > > '7u	   F F
  	1"488L#9#9::H 1&&x000 	I[>I I I I&&'7'G'GHHHH 	7[97D D 7 7&&qwwu~~6666	- 	/ 	/N.<n>T>TU\^`>a>a+M*,<= / /9,,$$X.../  	>&&SUW ' ? ?E  7 W W W W	24E}.V W W W W W 7 OI6E ;$UT:::: !<===! 	: 	:H,  !x>>X--&GE . NN455(")V"3"333u4	 6 9 9 : : : : UxUUU))'22
 
 	
r@   c                     |                      |                              dd          \  }}|                     ||          p|                     ||          S )Nr   r9   )_match_valid_urlrE   r?   rh   )r7   r   r8   r9   s       r>   _real_extractzChaturbateIE._real_extract   sV    --c2288uEE#%%h44^8O8OPXZ]8^8^^r@   N)	__name__
__module____qualname__
_VALID_URL_TESTSr3   r?   rh   rk   rK   r@   r>   r   r      s       uJ5Q
 
 T
 "  <  5  1  ;  5 3F> /8-:. J
 
 
:D
 D
 D
L_ _ _ _ _r@   r   )	r[   commonr   utilsr   r   r   r	   r   rK   r@   r>   <module>rs      s    				 ! ! ! ! ! !           M_ M_ M_ M_ M_= M_ M_ M_ M_ M_r@   