
    ukihf                         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
mZmZmZmZmZmZmZmZmZ d Z G d d      Z G d	 d
e      Z G d de      Z G d de      Zy)    N   )InfoExtractor   )ExtractorError
clean_htmldetermine_extdict_getextract_attributesfloat_or_noneint_or_nonejoin_nonemptyparse_durationstr_or_nonetry_getunified_strdateurl_or_nonec                 *    | | dk  rddz  z  S ddz  z  S )Nr   r   l         )ns    T/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/xhamster.pyto_signed_32r      s%    q1uu,--!u,--    c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)_ByteGeneratorc                     	 t        | d|       | _        t	        |      | _        y # t        $ r t        d| d      w xY w)N_algozUnknown algorithm ID "")getattr
_algorithmAttributeErrorr   r   _s)selfalgo_idseeds      r   __init__z_ByteGenerator.__init__   sS    	F%deG9,=>DO t$  	F #9'!!DEE	Fs	   ' A c                 6    t        |dz  dz         x}| _        |S )Nif i_n<r   r"   r#   ss     r   _algo1z_ByteGenerator._algo1#   s#     #1w;#;<<DGr   c                     t        ||dz  z        }t        ||dz  dz	  z        }t        ||dz  z        x}| _        |S )N             r(   r)   s     r   _algo2z_ByteGenerator._algo2)   sL     a2g'q:~"456"1Q<00DGr   c                     t        |dz         x}| _        t        ||dz  dz	  z        }t        |t        d      z        }t        ||dz  dz	  z        }t        |t        d      z        }t        ||dz  dz	  z        S )N   yn< r.      l   wJ r-   l   =.e r(   r)   s     r   _algo3z_ByteGenerator._algo31   s     #1z>22DGq:~"456\*556q:~"456\*556A!j.R!7899r   c                     t        |dz         x}| _        t        |dz  |dz  dz	  z        }t        |dz         }t        ||dz  dz	  z        }t        |dz        S )Niy+m   r.      r3      i-'r(   r)   s     r   _algo4z_ByteGenerator._algo4<   sh    "1z>22DG!q&a*n%;<=Z(q:~"456A
N++r   c                     t        ||dz  z        }t        ||dz  dz	  z        }t        ||dz  z        }t        |dz         x}| _        |S )Nr7   r.   	      l   %KK r(   r)   s     r   _algo5z_ByteGenerator._algo5D   sX    a1f&q:~!345a1f&"1z>22DGr   c                     t        |t        d      z  t        d      z         x}| _        t        ||dz  dz	  z        }|dz  dz	  dz  }t        |dz  |z	        S )Niw,l   KX r.            r(   )r#   r*   s2shifts       r   _algo6z_ByteGenerator._algo6L   sf    "1|J'?#?,zBZ#Z[[DG!J2567ZB&+R*_677r   c                     t        |t        d      z         x}| _        t        ||dz  z        }t        |t        d      z        }t        ||dz  dz	  z        }t        |t        d      z        S )Nr3   r0   i-5r.      l   & r(   )r#   r*   es      r   _algo7z_ByteGenerator._algo7S   sp    "1|J'?#?@@DGa1f&\*556q:~"456AZ 8899r   c                 >    | j                  | j                        dz  S )N   )r    r"   )r#   s    r   __next__z_ByteGenerator.__next__[   s    tww'$..r   N)__name__
__module____qualname__r&   r+   r1   r5   r:   r>   rE   rI   rL   r   r   r   r   r      s/    %	:,8:/r   r   c                   2   e Zd ZdZde dZdddddd	d
ddddddddeedddddddddddddededddd giid!d"d#d$d%dd&d'd(d)d)d*ded+dedd,d-d.d/d0d1d2d0d1d3d0d1d4d0d1d5d0d1d6d0d1d7d0d1d8d0d1d9d0d1d:d0d1d;d0d1d<d0d1d=d0d1d>d0d1d?d0d1gZd@ ZdA ZdB Z	yC)D
XHamsterIEzX(?:xhamster\.(?:com|one|desi)|xhms\.pro|xhamster\d+\.(?:com|desi)|xhday\.com|xhvid\.com)zI(?x)
                    https?://
                        (?:[^/?#]+\.)?z/
                        (?:
                            movies/(?P<id>[\dA-Za-z]+)/(?P<display_id>[^/]*)\.html|
                            videos/(?P<display_id_2>[^/]*)-(?P<id_2>[\dA-Za-z]+)
                        )
                    zIhttps://xhamster.com/videos/femaleagent-shy-beauty-takes-the-bait-1509445 e009ea6b849b129e3bebaeb9cf0dee511509445z%femaleagent-shy-beauty-takes-the-baitmp4z%FemaleAgent Shy beauty takes the baitiVzP20121014Ruseful2011ruseful2011i}  r@   re:https?://.+\.jpgz&https://xhamster.com/users/ruseful2011 )id
display_idexttitle	timestampupload_dateuploaderuploader_idduration	age_limit	thumbnailuploader_urldescription
view_countcomment_count)urlmd5	info_dictzAhttps://xhamster.com/videos/britney-spears-sexy-booty-2221348?hd=2221348zbritney-spears-sexy-bootyzBritney Spears  Sexy Bootyi3R20130914
jojo747400   )rZ   r[   r\   r]   r^   r_   r`   rb   rc   rf   rg   rd   rh   genericimpersonatechromem3u8)extractor_argsskip_downloadri   rk   paramsz(http://xhamster.com/movies/5667973/.html5667973z....iV20160208
parejafreeH   z%https://xhamster.com/users/parejafree)rZ   r\   r]   r^   r_   r`   ra   rb   rc   rh   re   rf   rg   rd   zInvalid URL)ri   rk   skipzLhttps://m.xhamster.com/videos/cute-teen-jacqueline-solo-masturbation-8559111Tri   only_matchingzChttps://xhamster.com/movies/2272726/amber_slayed_by_the_knight.htmlz9https://it.xhamster.com/movies/7263980/la_mia_vicina.htmlz9https://pt.xhamster.com/videos/euro-pedal-pumping-7937821zIhttps://xhamster.one/videos/femaleagent-shy-beauty-takes-the-bait-1509445zJhttps://xhamster.desi/videos/femaleagent-shy-beauty-takes-the-bait-1509445zJhttps://xhamster2.com/videos/femaleagent-shy-beauty-takes-the-bait-1509445zKhttps://xhamster11.com/videos/femaleagent-shy-beauty-takes-the-bait-1509445zKhttps://xhamster26.com/videos/femaleagent-shy-beauty-takes-the-bait-1509445zMhttp://xhamster.com/movies/1509445/femaleagent_shy_beauty_takes_the_bait.htmlzDhttp://xhamster.com/movies/2221348/britney_spears_sexy_booty.html?hdzRhttp://de.xhamster.com/videos/skinny-girl-fucks-herself-hard-in-the-forest-xhnBJZxz4https://xhday.com/videos/strapless-threesome-xhh7yVfz&https://xhvid.com/videos/lk-mm-xhc6wn6zPhttps://xhamster20.desi/videos/my-verification-video-scottishmistress23-11937369c                 <  
 t         j                  j                  |      }| j                  d|j                  ddd      \  }}|s| j                  d| d       y t        j                  |      }t        j                  |dd	 d
d      }	 t        |d   |      
t        
fd|d	d  D              j                  d      }	|j                  d|	 |       j!                         S # t        $ r+}| j                  d| d|j                          Y d }~y d }~ww xY w)Nz+^/(?P<hex>[0-9a-fA-F]{12,})(?P<rem>[/,].+)$zurl componentsNN)hexrem)defaultgroupzSkipping format "z": unsupported URL formatr   r0   littleT)	byteordersignedr   z": c              3   :   K   | ]  }|t              z    y w)N)next).0bytebyte_gens     r   	<genexpr>z2XHamsterIE._decipher_format_url.<locals>.<genexpr>   s     Otd8n4Os   zlatin-1/)path)urllibparseurlparse_search_regexr   report_warningbytesfromhexint
from_bytesr   r   msg	bytearraydecode_replacegeturl)r#   
format_url	format_id
parsed_url
hex_stringpath_remainder	byte_datar%   rH   
decipheredr   s             @r   _decipher_format_urlzXHamsterIE._decipher_format_url   s"   \\**:6
%)%7%7:JOOM]  &8 &8"
N "3I;>W XYMM*-	~~i!n~N	%ilD9H
 O12OOVVW`a
""!J<7G(H"IPPRR  	"3I;c!%% IJ	s   C' '	D0!DDc           
          |D ]K  }|j                  d      rdD ]2  t        fd|d   |j                  dd      fD              s-|d<    K M |S )Nvcodec)av1h264c              3   .   K   | ]  }d  d |v   yw).Nr   )r   f_urlr   s     r   r   z,XHamsterIE._fixup_formats.<locals>.<genexpr>   s     a%6(!}-as   ri   manifest_urlrY   )getany)r#   formatsfr   s      @r   _fixup_formatszXHamsterIE._fixup_formats   se     	AuuX) aAeHaeeN\^F_;`aa"(AhK	 r   c                      j                  |      }|j                  d      xs |j                  d      }|j                  d      xs |j                  d      }t        j                  dd|      } j	                  ||      \  }} j                  d|dd 	      }|rt        |d
       j                  |      }	 fd}
 j                   j                  d|dd	      |d      }|r|d   }|d   }g }t               }i }t        |d t              xs i }|j                         D ]  \  }}t        |t              st        |d t              xs i }|j                         D ]3  \  }}t        |t              st        |j!                  d            ||<   5 |j                         D ]x  \  }}|dk(  r|}t#        |      }|r||v r |j%                  |       |j'                  | d| |t)        |d       |
|      |j!                  |      d|j*                  id       z  t        |d t              }|r|j!                  d      }t        |t              rndD ]i  }|j!                  |      }|s j-                  |d|       }|r||v r3|j%                  |       |j/                   j1                  ||dd dd!             k |j!                  d"      }t        |t              rB|j                         D ].  \  }}t        |t2              s|D ]  } t        | t              sdD ]  }!| j!                  |!      }"|"st5        | j!                  d#            xs t5        | j!                  d$            xs d%}t7        ||      } j-                  |"|      }"|"r|"|v rv|j%                  |"       t)        |"d      }#|#d&k(  r'|j/                   j1                  |"|dd dd!             |j'                  ||"|# |
|      |j!                  |      d|j*                  id
d'         1 |j!                  d(      }$t        |$t2              rNg }%|$D ]F  }&t        |&t              s|&j!                  d)      }'t        |'t8              s6|%j'                  |'       H nd }%t#        t        |d*             }(i d|d|d|d+|j!                  d+      d,t;        |j!                  d-            d.t        |d/ t8              d0|(d1|(r|(j=                  d2      d3   nd d4|j!                  d5      d6t;        |j!                  d6            d7t;        |j!                  d8            d9t;        t        |d: t>                    d;t;        t        |d< t>                    d=t;        |j!                  d>            d?|	|	nd@d(|%dA jA                  |      dBdCiS  j                  g dD|d      }g }t               } j                   j                  dE|dFd	      |d      }|j                         D ]D  \  }}t#        |      }|s||v r|j%                  |       |j'                  || |
|      dG       F  j                  g dH|dIdd J      })|)r|)|vr|j'                  dK|)i       t        jB                  dL|      }|r|j                  dM      nd }*tE         j                  dN|dOd            }+ j                  dP|d.dQ	      }, j                  dRdSg|d4dd4T      }-tG         j                  dUdVg|d6d            }.t;         j                  dW|dXd            }/t        jB                  dY|      }|r"|j                  dZ      |j                  d[      fnd\\  }0}1t        jB                  d]|      }|r|j                  d^      nd_}2 j                  d`|d(d 	      }3|3r-t        jH                  da|3      D 4cg c]  }4tK        |4       c}4nd }%i d|d|d|d+|*db|+d.|,d1|,r|,jM                         nd d4|-d6|.d7|/d9t;        |0      d;t;        |1      d=t;        |2      d?|	d(|%dA|S c c}4w )cNrZ   id_2r[   display_id_2z^(https?://(?:.+?\.)?)m\.z\1z2<div[^>]+id=["\']videoClosed["\'][^>]*>(.+?)</div>errorr   T)expectedc                 @    t        j                  d| dd             S )Nz
^(\d+)[pP]heightr   )r   r   )r*   r#   s    r   
get_heightz,XHamsterIE._real_extract.<locals>.get_height	  s+    t11q(D  2  : ; ;r   )z.window\.initials\s*=\s*({.+?})\s*;\s*</script>z"window\.initials\s*=\s*({.+?})\s*;initialsz{}F)fatal
videoModelr]   c                     | d   S )Nsourcesr   xs    r   <lambda>z*XHamsterIE._real_extract.<locals>.<lambda>  s
    q| r   c                     | d   S )Ndownloadr   r   s    r   r   z*XHamsterIE._real_extract.<locals>.<lambda>  s
    a
m r   sizer   -rT   Referer)r   ri   r\   r   filesizehttp_headersc                     | d   d   S )NxplayerSettingsr   r   r   s    r   r   z*XHamsterIE._real_extract.<locals>.<lambda>7  s    A&7$8$C r   hls)ri   fallbackzhls-m3u8_native)entry_protocolm3u8_idr   standardqualitylabelrY   rs   )r   ri   r\   r   r   r   __needs_testing
categoriesnamec                     | d   d   S )NauthorpageURLr   r   s    r   r   z*XHamsterIE._real_extract.<locals>.<lambda>{  s    (I@V r   rf   r^   createdr`   c                     | d   d   S )Nr   r   r   r   s    r   r   z*XHamsterIE._real_extract.<locals>.<lambda>  s    Qx[%8 r   re   ra   r   r   rd   thumbURLrb   rg   views
like_countc                     | d   d   S )Nratinglikesr   r   s    r   r   z*XHamsterIE._real_extract.<locals>.<lambda>  s    Qx[%9 r   dislike_countc                     | d   d   S )Nr   dislikesr   r   s    r   r   z*XHamsterIE._real_extract.<locals>.<lambda>  s    Qx[%< r   rh   commentsrc   r@   r   _format_sort_fields)resz
proto:m3u8tbr)z<h1[^>]*>([^<]+)</h1>z6<meta[^>]+itemprop=".*?caption.*?"[^>]+content="(.+?)"zY<title[^>]*>(.+?)(?:,\s*[^,]*?\s*Porn\s*[^,]*?:\s*xHamster[^<]*| - xHamster\.com)</title>zsources\s*:\s*({.+?})\s*,?\s*\nr   )r   ri   r   )z(file\s*:\s*(?P<q>["'])(?P<mp4>.+?)(?P=q)z<<a\s+href=(?P<q>["'])(?P<mp4>.+?)(?P=q)\s+class=["']mp4Thumbz3<video[^>]+file=(?P<q>["'])(?P<mp4>.+?)(?P=q)[^>]*>z	video url)r   r   ri   z!<span>Description: </span>([^<]+)r   z:hint=["\'](\d{4}-\d{2}-\d{2}) \d{2}:\d{2}:\d{2} [A-Z]{3,4}zupload datez><span[^>]+itemprop=["\']author[^>]+><a[^>]+><span[^>]+>([^<]+)	anonymousz:["']thumbUrl["']\s*:\s*(?P<q>["'])(?P<thumbnail>.+?)(?P=q)z=<video[^>]+"poster"=(?P<q>["'])(?P<thumbnail>.+?)(?P=q)[^>]*>)r   r   zA<[^<]+\bitemprop=["\']duration["\'][^<]+\bcontent=["\'](.+?)["\']zRuntime:\s*</span>\s*([\d:]+)z%content=["\']User(?:View|Play)s:(\d+)z
view countzChint=[\'"](?P<likecount>\d+) Likes / (?P<dislikecount>\d+) Dislikes	likecountdislikecountr   z0</label>Comments \((?P<commentcount>\d+)\)</div>commentcountr   z+(?s)<table.+?(<span>Categories:.+?)</table>z<a[^>]+>(.+?)</a>r_   )'_match_valid_urlr   resub_download_webpage_handle_html_search_regexr   _rta_search_parse_jsonr   setr   dictitems
isinstancer   r   r   addappendr   ri   r   extend_extract_m3u8_formatslistr   r   strr   splitr   r   searchr   r   findallr   lower)5r#   ri   mobjvideo_idr[   desktop_urlwebpageurlhr   rc   r   r   videor]   r   format_urlsformat_sizesr   r   formats_dictdownload_sourcesr   format_dictformat_itemr   xplayer_sourceshls_sourceshls_format_keyhls_urlstandard_sources
identifierformats_liststandard_formatstandard_format_keystandard_urlr\   categories_listr   cc_namere   	video_urlrf   r_   r`   rd   rb   rg   r   r   rh   categories_htmlcategorys5   `                                                    r   _real_extractzXHamsterIE._real_extract   s3
   $$S)::d#9tzz&'9ZZ-KN1K
ff95#F55k8L''AWd ( ,  66$$W-		; ##89@*   E $ # \*E'NEG%KLe%;TBHbG+2==? '	<!,5#*74KT#R#XVX ,<,B,B,D S(G[%k48 ,9+//&:Q,RL)S -9,>,>,@ (G[ J. !!,J!,Z!8J%{)B OOJ/NN(1{!G9%=),Z?",W"5$0$4$4W$=%txx)	$ 	8 &CTKO-11%8k40*= 
9"-//."A&$"&";";GtNK[E\"]&'[*@$#0t'A'A#Xu]$) (B (8 9
9 $3#6#6z#B .54D4J4J4L %#0
L),=$/; "#O#-ot#D (7J # 3/>/B/BCV/W'3$,+67J7J97U+V ,1.9/:M:Mg:V.W,1.0 !( -:*g,N	/3/H/HW`/a'3|{7R$, + =&3L%&H#&&=$+NN43M3M(4hVc05U 4N 4D %E %- '1:+7+..8.A0<0@0@0I(14885&
 8<0" !#'#"#%#N $ii5O/40
( 2A%a. UU6]F!&#."))&12 "
&wu6V'WXLhj  uyy7	
 [9)=> G8#?  l|11#6r:PT UYYz2 K		*(=> k%))G*<= k'93+@ A  W<c.C "D"  UYYz-B!C#$ )*?YR%& j'( 4..w7), &'C- 6 ''k W	 e""2GY   E	 # #
 &-]]_ 	!Iz$Z0J[(OOJ'NN&!$Y/ 	 &&I [t	 ' =	
 +5NNy 
 yy=wG'+djjm%d&8&8I]% '9 '1 2 **MZ + 6 &&NQS[[ ' B	
 "$"4"4Q-/07e #5 #% &
 !!3!34\ "4 "0 1
 yy_ahi_ctzz+'>

>@Z&[iu#]yyLgV6:

>2,,:G$ - ( 8G <>:: /<3 4xj* 4LP 	
(
*
 U
 ;	

 ;
 
 x8>>+T
 
 
 *
 +j1
 [7
 [7
 
 *
  w!
 	
4s   7a-N)
rM   rN   rO   _DOMAINS
_VALID_URLr   _TESTSr   r   r  r   r   r   rQ   rQ   _   s   jH''/j 1J [1A<#%%(/D 
* S51#%$/ 
   )=8**EF#
#. :#%$' C/
  ', ^
 U
 K K
 [ \ \ ] ] _ V d F 8 bUmF^S.z
r   rQ   c                       e Zd Zdej                   dZdgZddddedd	d
dddddddeddgZdddddedddddddddedd d!id"gZ	d# Z
y$)%XHamsterEmbedIEhttps?://(?:[^/?#]+\.)?z/xembed\.php\?video=(?P<id>\d+)z_<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:www\.)?xhamster\.com/xembed\.php\?video=\d+)\1z,http://xhamster.com/xembed.php?video=33285393328539rT   zPen MasturbationrY   zpen-masturbationieS20140728ManyakisArtr0   r@   rX   manyakisartz&https://xhamster.com/users/manyakisart)rZ   r\   r]   rh   rf   r[   r^   r_   r`   rb   rc   rd   ra   re   rg   )ri   rk   z https://xhamster.com/awards/2023xh2VnYnz"xHamster Awards 2023 - The Winnersz xhamster-awards-2023-the-winnersi$  z$re:https?://ic-vt-nss\.xhcdn\.com/.+iUe20231116xHamsterxhamsterz#https://xhamster.com/users/xhamster)rZ   r\   r]   rc   rh   rf   r[   rb   rd   r^   r_   r`   ra   re   rg   ru   rs   rv   c                    | j                  |      }| j                  ||      }| j                  d| d| d|dd       }|s/| j                  | j                  d|d      |      }t	        |d      }| j                  |d	      S )
Nz(href="(https?://xhamster\.com/(?:movies/z/[^"]*\.html|videos/[^/]*-z)[^"]*)"zxhamster urlr   zvars\s*:\s*({.+?})\s*,\s*\nvars)downloadLinkhomepageLinkcommentsLinkshareUrlXHamster)	_match_id_download_webpager   r   r	   
url_result)r#   ri   r  r  r  player_varss         r   r  zXHamsterEmbedIE._real_extract$  s    >>#&((h7&&7zA[\d[eemn^T ' 3	 **""#A7FSK !.jkIy*55r   N)rM   rN   rO   rQ   r   r!  _EMBED_REGEXr   r"  _WEBPAGE_TESTSr  r   r   r   r$  r$    s    +J,?,?+@@_`JvwL=' ,#%%/(D
 F, 29 <@#%"%A
" #F+) N.6r   r$  c                   v    e Zd Zdej                   dZdddiddddd	id
ddddiddddddddgZd Zd Zy)XHamsterUserIEr%  z./(?:(?P<user>users)|creators)/(?P<id>[^/?#&]+)z/https://xhamster.com/users/netvideogirls/videosrZ   netvideogirlsi  )ri   rk   playlist_mincountz+https://xhamster.com/users/firatkaan/videos	firatkaanr   z.https://xhamster.com/creators/squirt-orgasm-69zsquirt-orgasm-69.   z!https://xhday.com/users/mobhunterTr}   z!https://xhvid.com/users/pelushe21c              #   d  K   |rdnd\  }}d| d| d| d}t        j                  d      D ]  }| j                  ||d|       }t        j                  d|      D ]|  }t        |      }	t        |	j                  d	            }
|
rt        j                  |
      s@t        j                  |
      }| j                  |
t        j                         |
       ~ t        j                  d|      }|s y t        |j                  d            }t        |j                  d	            }|r y  y w)N)usersvideos)creators	exclusivezhttps://xhamster.com/r   z/1r   zDownloading page z;(<a[^>]+class=["\'].*?\bvideo-thumb__image-container[^>]+>)href)ier  z <a[^>]+data-page=["\']next[^>]+>r   )	itertoolscountr6  r   r  r
   r   r   rQ   suitabler5  r7  ie_keyr   r   )r#   user_idis_userprefixsuffixnext_page_urlpagenumpage	video_tagr  r  r  r  	next_pages                 r   _entrieszXHamsterUserIE._entriesT  s5    07,=V/xq	6("M q) 	G))w*;G9(EGDZZR 	J	 +95'		&(9:	 
(;(;I(F%//	:oo*"3"3"5 & J J	J 99@$GD*4::a=9I'	f(=>M '	s   D)D0,D0c                     | j                  |      j                  dd      \  }}| j                  | j                  |t	        |            |      S )NuserrZ   )r   r   playlist_resultrU  bool)r#   ri   rW  rL  s       r   r  zXHamsterUserIE._real_extractl  sE    --c288Fg##DMM'4:$FPPr   N)	rM   rN   rO   rQ   r   r!  r"  rU  r  r   r   r   r<  r<  6  s    +J,?,?+@@noJ A/
 ! =+
  @$
   3 3/F80Qr   r<  )rH  r   urllib.parser   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   rQ   r$  r<  r   r   r   <module>r]     sa     	  !   ".A/ A/HT
 T
n=6m =6@8Q] 8Qr   