
    VGh                     F    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y)    N   )InfoExtractor   )ExtractorErrorlowercase_escapeurl_or_noneurlencode_postdatac                   z    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y)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                    | j                  d| d|t        d|i      i | j                         ddddd	      xs i }|j                  d
      }|sf|j                  d      }| j                  j                  |      x}rt        |d      |dk(  r| j                          | j                  d| d       y ||d| ddd| j                  ||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          d/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/chaturbate.py_extract_from_apizChaturbateIE._extract_from_api4   s   &&!#&=>#[($;<//1$4,  ' . 4 24 	 <<&\\-0F++F33u3$UT::!))+,vh6d ef FxjPTU11(H%VZ1[
 	
    c                 2   | j                  d| d| d|| j                         d      g }| j                  | j                  dddd	      |t        d
      }|r-t        |j                  d            }|r|j                  |       |sDt        j                  d      D ]+  }|j                  t	        |j                  d                   - |s;t        j                  d      D ]"  }|j                  |j                  d             $ g }|D ]5  }||j                  dd      }
}	|	|
fD ]  }||vs|j                  |        7 |sg| j                  ddgddd       }|s3t        fd| j                  d   ddfD              r| j                  d   }|rt        |d      t        d      g }|D ]D  }dD ]  }d| |v s|} n d }|j                  | j!                  ||d|dk(  rd nd |d
d!             F ||d"| d#| j#                        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  
 y w)N ).0pwebpages     r>   	<genexpr>z2ChaturbateIE._extract_from_html.<locals>.<genexpr>y   s      WqG| Ws   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   ((!#az3X113 ) G LW  > '7u	   F
 "488L#9:H&&x0[[>I I&&'7'GHI [[97D 7&&qwwu~67 	- 	/N.<n>T>TU\^`>a+M*,<= /9,$$X./	/ &&SUW ' ?E  W	24E}.V W W OOI6E$UT:: !<==! 	:H, xj>X-&G
 NN455(")V"33u4	 6 9 :	: FxjPTU))'2
 	
r@   c                     | j                  |      j                  dd      \  }}| j                  ||      xs | j                  ||      S )Nr   r9   )_match_valid_urlrE   r?   rh   )r7   r   r8   r9   s       r>   _real_extractzChaturbateIE._real_extract   sJ    --c288uE#%%h4^8O8OPXZ]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
L_r@   r   )	r[   commonr   utilsr   r   r   r	   r   rK   r@   r>   <module>rs      s%    	 ! M_= M_r@   