
    i`                         S SK r SSKJr  SSKJrJrJrJrJrJ	r	J
r
JrJrJr  SSKJrJrJr   " S S\5      r " S	 S
\5      rg)    N   )InfoExtractor   )
ExtractorError
clean_htmldetermine_extmerge_dictsparse_durationparse_resolution
str_to_inturl_or_noneurlencode_postdataurljoin)find_elementtraverse_objtrim_strc                       \ rS rSrSrSSSSSSS	S
SSSSS.
S.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS./	rS rSrg)SpankBangIE   a0  (?x)
                    https?://
                        (?:[^/]+\.)?spankbang\.com/
                        (?:
                            (?P<id>[\da-z]+)/(?:video|play|embed)\b|
                            [\da-z]+-(?P<id_2>[\da-z]+)/playlist/[^/?#&]+
                        )
                    z4https://spankbang.com/56b3d/video/the+slut+maker+hmv 2D13903DE4ECC7895B5D55930741650A56b3dmp4zThe Slut Maker HMVz)Girls getting converted into cock slaves.zre:^https?://.*\.jpg$MindselfmindselfiD"c`20210330   )
idexttitledescription	thumbnailuploaderuploader_id	timestampupload_date	age_limit)urlmd5	info_dictz0http://spankbang.com/1vt0/video/solvane+gangbangT)r'   only_matchingzAhttp://spankbang.com/lklg/video/sex+with+anyone+wedding+edition+2z:http://m.spankbang.com/1o2de/video/can+t+remember+her+namez3https://spankbang.com/1vwqx/video/jade+kush+solo+4kz4https://m.spankbang.com/3vvn/play/fantasy+solo/480p/z!https://m.spankbang.com/3vvn/playz"https://spankbang.com/2y3td/embed/z8https://spankbang.com/2v7ik-7ecbgu/playlist/latina+bootyc                   ^ ^^ T R                  U5      nUR                  S5      =(       d    UR                  S5      mT R                  S5      =(       d    SnT R                  SSUR	                  5       5        T R                  UR                  ST S3ST S	35      TS
S9n[        R                  " SU5      (       a  [        ST S3S
S9e/ mUU U4S jnSn[        R                  " U S3U5       H  nU" UR                  SS5      5        M     T(       dw  T R                  SUSSS9nT R                  STS[        USS.5      USS.S
S9nUR                  5        H.  u  pU
(       a  [        U
[         5      (       a  U
S   n
U" X5        M0     T R#                  UT0 S9nT R%                  S US!S S9nT R                  S"US#S S9nT R'                  US S9nT R%                  S$US%S S9nT R%                  S&US'S S9n[)        T R                  S(US)S S95      n[+        T R                  S*US+S S95      nT R-                  U5      n[/        TU=(       d    TUUUUUUTUS,.
U5      $ )-Nr   id_2geo_bypass_countryUS.spankbang.comcountry/z/embedz/videoTimpersonatez'<[^>]+\b(?:id|class)=["\']video_removedzVideo z is not available)expectedc                   > [        U5      nU(       d  g [        U 5      n[        U5      nU R                  S5      (       d  US:X  a$  TR	                  TR                  UTSSSSS95        g U R                  S5      (       d  US:X  a"  TR	                  TR                  UTSSS	95        g US:X  d,  UR                  S
5      (       d  UR                  S5      (       a&  UR                  UU S.5        TR                  U5        g g )Nm3u8r   m3u8_nativehlsF)entry_protocolm3u8_idfatalmpddash)mpd_idr;   widthheight)r'   	format_id)
r   r   r   
startswithextend_extract_m3u8_formats_extract_mpd_formatsgetupdateappend)rA   
format_urlf_urlfr   formatsselfvideo_ids        G/app/mltbenv/lib/python3.13/site-packages/yt_dlp/extractor/spankbang.pyextract_format1SpankBangIE._real_extract.<locals>.extract_formatX   s    
+E +A&C##F++sf}t998U=!  :  0 1 %%e,,ut888F%  9  A Bw155?? !*  q! 4C    stream_url_z4(?P<id>[^\s=]+)\s*=\s*(["\'])(?P<url>(?:(?!\2).)+)\2r'   z5data-streamkey\s*=\s*(["\'])(?P<value>(?:(?!\1).)+)\1z
stream keyvalue)groupz'https://spankbang.com/api/videos/streamzDownloading stream JSONr   )r   dataXMLHttpRequest)RefererzX-Requested-With)rV   headersr3   )defaultz&(?s)<h1[^>]+\btitle=["\']([^"]+)["\']>r   z><div[^>]+\bclass=["\']bottom[^>]+>\s*<p>[^<]*</p>\s*<p>([^<]+)r    z8<svg[^>]+\bclass="(?:[^"]*?user[^"]*?)">.*?</svg>([^<]+)r"   z<a[^>]+href="/profile/([^"]+)"r#   z6<div[^>]+\bclass=["\']right_side[^>]+>\s*<span>([^<]+)durationz([\d,.]+)\s+playsz
view count)
r   r   r    r!   r"   r#   r[   
view_countrL   r&   )_match_valid_urlrU   	get_param_set_cookieupper_download_webpagereplaceresearchr   finditer_search_regex_download_jsonr   items
isinstancelist_search_json_ld_html_search_regex_og_search_thumbnailr
   r   _rta_searchr	   )rM   r'   mobjr0   webpagerP   STREAM_URL_PREFIX
stream_keystreamrA   rI   infor   r    r!   r"   r#   r[   r\   r&   rL   rN   s   `                   @@rO   _real_extractSpankBangIE._real_extractI   s   $$S)::d#9tzz&'9..!56>$)9gmmoF((KK!H:V,(6.BC$ ) ( 99?II 
"34tE E 	"( *KK%&&Z[]dfD4::dE23f ++HW , 6J ((98)0B$D 1  #(8  $ ) %F *0%	*Z">">!+AJy5 *8
 ##GXr#B''5wQU ( W((M]D ) 2 --gt-D	**GR\fj + l---wt . U!$"4"4EZ #5 #/ 0   2 2 '< !3 !G H
 $$W-	&h&" & $"
 
 	
rR    N)__name__
__module____qualname____firstlineno__
_VALID_URL_TESTSru   __static_attributes__rw   rR   rO   r   r      s    J F1)F1"%#%
" B S L E
 F 3 4 JQ+FZ]
rR   r   c                   0    \ rS rSrSrSSSS.SS.rS	 rS
rg)SpankBangPlaylistIE   zShttps?://(?:[^/]+\.)?spankbang\.com/(?P<id>[\da-z]+)/playlist/(?P<display_id>[^/]+)z3https://spankbang.com/ug0k/playlist/big+ass+tittiesug0kzBig Ass Titties)r   r   (   )r'   r)   playlist_mincountc                 4   U R                  U5      nUR                  S5      nU R                  S5      =(       d    SnU R                  SSUR	                  5       5        U R                  XSS9n[        R                  " SU5       Vs/ s HM  nU R                  [        XR                  S	5      5      [        R                  5       UR                  S5      S
9PMO     nn[        U[        SSSS91[        1[        SS9145      nU R!                  XcU5      $ s  snf )Nr   r-   r.   r/   r0   Tr2   zX<a[^>]+\bhref=(["\'])(?P<path>/?[\da-z]+-(?P<id>[\da-z]+)/playlist/[^"\'](?:(?!\1).)*)\1path)ierN   h1zdata-testidzplaylist-title)tagattrrT   z	 Playlist)end)r]   rU   r^   r_   r`   ra   rc   re   
url_resultr   r   ie_keyr   r   r   r   playlist_result)rM   r'   ro   playlist_idr0   rp   entriesr   s           rO   ru   !SpankBangPlaylistIE._real_extract   s   $$S)jj&..!56>$)9gmmoF((t(L
 k ??CF+,!!#djj.> # @ 	  Wd>NOPL845'7 8 ##G%@@s   ADrw   N)rx   ry   rz   r{   r|   _TESTru   r~   rw   rR   rO   r   r      s'    gJD&
  EArR   r   )rc   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   utils.traversalr   r   r   r   r   rw   rR   rO   <module>r      s@    	 !   C BS
- S
lA- ArR   