o
    ii                     @   s   d dl Z d dlZd dlZddlm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 G dd dZG d	d
 d
eZG dd deZG dd deZdS )    N   )InfoExtractor   )int_to_int32)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                   @   sT   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd ZdS )_ByteGeneratorc                 C   sD   zt | d| | _W n ty   td| dw t|| _d S )N_algozUnknown algorithm ID "")getattr
_algorithmAttributeErrorr   r   _s)selfalgo_idseed r   M/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/xhamster.py__init__   s   z_ByteGenerator.__init__c                 C   s   t |d d  }| _|S )Nif i_n<r   r   r   sr   r   r   _algo1    s   z_ByteGenerator._algo1c                 C   s>   t ||d> A }t ||d@ d? A }t ||d> A  }| _|S )N             r    r!   r   r   r   _algo2&   s   z_ByteGenerator._algo2c                 C   sn   t |d  }| _t ||d@ d? A }t |t d }t ||d@ d? A }t |t d }t ||d@ d? A S )N   yn< r%      l   wJ r$   l   =.e r    r!   r   r   r   _algo3.   s   z_ByteGenerator._algo3c                 C   sV   t |d  }| _t |d> |d@ d? B }t |d }t ||d@ d? A }t |d S )Niy+m   r%      r)      i-'r    r!   r   r   r   _algo49   s
   z_ByteGenerator._algo4c                 C   sJ   t ||d> A }t ||d@ d? A }t ||d> A }t |d  }| _|S )Nr,   r%   	      l   %KK r    r!   r   r   r   _algo5A   s
   z_ByteGenerator._algo5c                 C   sR   t |t d t d  }| _t ||d@ d? A }|d@ d? d@ }t |d@ |? S )Niw,l   KX r%            r    )r   r"   s2shiftr   r   r   _algo6I   s   z_ByteGenerator._algo6c                 C   sZ   t |t d  }| _t ||d> A }t |t d }t ||d@ d? A }t |t d S )Nr)   r'   i-5r%      l   & r    )r   r"   er   r   r   _algo7P   s
   z_ByteGenerator._algo7c                 C   s   |  | jd@ S )N   )r   r   r   r   r   r   __next__X   s   z_ByteGenerator.__next__N)__name__
__module____qualname__r   r#   r(   r+   r/   r2   r8   r;   r>   r   r   r   r   r      s    r   c                   @   sD  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dAdB ZdCdD Z	dEdF Z
dGdH ZdIS )J
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}  r3   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   )rK   rL   rM   rN   rO   rP   rQ   rS   rT   rW   rX   rU   rY   genericimpersonatechromem3u8)extractor_argsskip_downloadrZ   r\   paramsz(http://xhamster.com/movies/5667973/.html5667973z....iV20160208
parejafreeH   z%https://xhamster.com/users/parejafree)rK   rM   rN   rO   rP   rQ   rR   rS   rT   rY   rV   rW   rX   rU   zInvalid URL)rZ   r\   skipzLhttps://m.xhamster.com/videos/cute-teen-jacqueline-solo-masturbation-8559111TrZ   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-11937369z[0-9a-fA-F]{12,}c              
      s   t |}tj|dd ddd}z	t|d | W n ty9 } z| d| d|j  W Y d }~d S d }~ww t fd	d
|dd  D 	dS )Nr   r'   littleT)	byteordersignedr   Skipping format "": c                 3   s    | ]	}|t  A V  qd S )N)next).0bytebyte_genr   r   	<genexpr>   s    z2XHamsterIE._decipher_hex_string.<locals>.<genexpr>zlatin-1)
bytesfromhexint
from_bytesr   r   report_warningmsg	bytearraydecode)r   
hex_string	format_id	byte_datar   r:   r   rx   r   _decipher_hex_string   s   
$zXHamsterIE._decipher_hex_stringc                 C   s   t | j|r| ||S t|s/t d|r$| d| d|  d S | d| d d S tj	|}| j
d| j d|jdd	d
d\}}|sT| d| d d S | ||}|s^d S |jd| | d S )Nz[0-9a-fA-F]+zSkipping dummy ciphertext for "rt   rs   z": invalid ciphertextz
^/(?P<hex>z)(?P<rem>[/,].+)$zurl componentsNN)hexrem)defaultgroupz": unsupported URL format/)path)re	fullmatch_VALID_HEX_REr   r   write_debugr   urllibparseurlparse_search_regexr   _replacegeturl)r   
format_urlr   
parsed_urlr   path_remainder
decipheredr   r   r   _decipher_format_url   s(   
zXHamsterIE._decipher_format_urlc              	      sV   |D ]&}| dr
qdD ] t fdd|d | ddfD r' |d<  nqq|S )Nvcodec)av1h264c                 3   s     | ]}d   d |v V  qdS ).Nr   )rv   f_urlr   r   r   rz     s    z,XHamsterIE._fixup_formats.<locals>.<genexpr>rZ   manifest_urlrJ   )getany)r   formatsfr   r   r   _fixup_formats   s   
&zXHamsterIE._fixup_formatsc           4         s4    |}|dp|d}|dp|d}tdd|} j||dd\}} jd	|d
d d}|r;t|dd |}	 fdd}
 j j	d|ddd|dd}|rq|d }|d }g }t
 }i }t|dd tppi }| D ]h\}}t|tsqut|dd tpi }| D ]\}}t|tsqt|d||< q| D ]7\}}|dkrq|}t|}|r||v rq|| || d| |t|d|
|||d|jid qqut|dd t}|r|d }t|tr'd!D ]0}||}|sq |d"| }|r||v rq|| | j||dd#d dd$ q|d%}t|tr| D ]\}}t|tsBq6|D ]v} t| tsNqDd!D ]h}!| |!}"|"s\qPt| d&pmt| d'pmd(}t||} |"|}"|"r|"|v rqP||" t|"d}#|#d)kr| j|"|dd#d dd$ qP|||"|#|
|||d|jidd* qPqDq6|d+}$t|$trg }%|$D ]}&t|&ts֐q|&d,}'t|'tr|%|' qnd }%tt|d-d }(i d|d|d|d.|d.d/t|d0d1t|d2d td3|(d4|(r#|(d5d6 nd d7|d8d9t|d9d:t|d;d<tt|d=d td>tt|d?d td@t|dAdB|	d ura|	ndCd+|%dD  |dEdFiS  g dG|d}g }t
 } j j	dH|dIdd|dd}| D ]%\}}t|}|sq||v rq|| ||||
|dJ q j	g dK|dLdd dM})|)r|)|vr|dN|)i t!dO|}|r|dPnd }*t" j	dQ|dRdd}+ jdS|d1dTd}, j	dUdVg|d7dd7dW}-t# j	dXdYg|d9dd}.t j	dZ|d[dd}/t!d\|}|r.|d]|d^fnd_\}0}1t!d`|}|r@|dandb}2 j	dc|d+d d}3|3rYddde t$df|3D nd }%i d|d|d|d.|*dg|+d1|,d4|,rv|,% nd d7|-d9|.d:|/d<t|0d>t|1d@t|2dB|	d+|%dD|S )hNrK   id_2rL   display_id_2z^(https?://(?:.+?\.)?)m\.z\1T)rb   z2<div[^>]+id=["\']videoClosed["\'][^>]*>(.+?)</div>errorr   )expectedc                    s   t  jd| dd dS )Nz
^(\d+)[pP]heightr   )r   r   )r"   r=   r   r   
get_height  s   z,XHamsterIE._real_extract.<locals>.get_height)z.window\.initials\s*=\s*({.+?})\s*;\s*</script>z"window\.initials\s*=\s*({.+?})\s*;initialsz{}F)fatal
videoModelrN   c                 S      | d S )Nsourcesr   xr   r   r   <lambda>)      z*XHamsterIE._real_extract.<locals>.<lambda>c                 S   r   )Ndownloadr   r   r   r   r   r   -  r   sizer   -rE   Referer)r   rZ   rM   r   filesizehttp_headersc                 S      | d d S )NxplayerSettingsr   r   r   r   r   r   r   G      hls)rZ   fallbackzhls-m3u8_native)entry_protocolm3u8_idr   standardqualitylabelrJ   rd   )r   rZ   rM   r   r   r   __needs_testing
categoriesnamec                 S   r   )NauthorpageURLr   r   r   r   r   r     r   rW   rO   createdrQ   c                 S   r   )Nr   r   r   r   r   r   r   r     r   rV   rR   r   rU   thumbURLrS   rX   views
like_countc                 S   r   )Nratinglikesr   r   r   r   r   r     r   dislike_countc                 S   r   )Nr   dislikesr   r   r   r   r   r     r   rY   commentsrT   r3   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   rZ   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   rZ   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>c                 S   s   g | ]}t |qS r   )r   )rv   categoryr   r   r   
<listcomp>  s    z,XHamsterIE._real_extract.<locals>.<listcomp>z<a[^>]+>(.+?)</a>rP   )&_match_valid_urlr   r   sub_download_webpage_handle_html_search_regexr   _rta_search_parse_jsonr   setr   dictitems
isinstancer   r   r   addappendr   rZ   r   extend_extract_m3u8_formatslistr   r   strr   splitr}   r   searchr   r   findalllower)4r   rZ   mobjvideo_idrL   desktop_urlwebpageurlhr   rT   r   r   videorN   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_urlrM   categories_listr   cc_namerV   	video_urlrW   rP   rQ   rU   rS   rX   r   r   rY   categories_htmlr   r=   r   _real_extract	  s(  

















$



	






"	
zXHamsterIE._real_extractN)r?   r@   rA   _DOMAINS
_VALID_URLr}   _TESTSr   r   r   r   r  r   r   r   r   rB   \   s    	o
rB   c                   @   s   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#d$ Z
d%S )&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3328539rE   zPen MasturbationrJ   zpen-masturbationieS20140728ManyakisArtr'   r3   rI   manyakisartz&https://xhamster.com/users/manyakisart)rK   rM   rN   rY   rW   rL   rO   rP   rQ   rS   rT   rU   rR   rV   rX   )rZ   r\   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)rK   rM   rN   rT   rY   rW   rL   rS   rU   rO   rP   rQ   rR   rV   rX   rf   rd   rg   c                 C   sf   |  |}| ||}| jd| d| d|dd d}|s-| | d|d|}t|d}| |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   rZ   r   r   r  player_varsr   r   r   r  4  s   

zXHamsterEmbedIE._real_extractN)r?   r@   rA   rB   r  r  _EMBED_REGEXr}   r  _WEBPAGE_TESTSr  r   r   r   r   r    sR    r  c                   @   sh   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d Zdd ZdS )XHamsterUserIEr  z./(?:(?P<user>users)|creators)/(?P<id>[^/?#&]+)z/https://xhamster.com/users/netvideogirls/videosrK   netvideogirlsi  )rZ   r\   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/mobhunterTrn   z!https://xhvid.com/users/pelushe21c                 c   s    |rdnd\}}d| d| d| d}t dD ]V}| ||d| }td|D ]%}t|}	t|	d	}
|
r@t	|
sAq,t
|
}| j|
t |d
V  q,td|}|s] d S t|d}t|d	}|sp d S qd S )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countr&  r   r   r
   r   r   rB   suitabler%  r'  ie_keyr   r   )r   user_idis_userprefixsuffixnext_page_urlpagenumpage	video_tagr   r  r   r   	next_pager   r   r   _entriesd  s8   


zXHamsterUserIE._entriesc                 C   s.   |  |dd\}}| | |t||S )NuserrK   )r   r   playlist_resultrC  bool)r   rZ   rD  r:  r   r   r   r  |  s   zXHamsterUserIE._real_extractN)	r?   r@   rA   rB   r  r  r  rC  r  r   r   r   r   r+  F  s4    	r+  )r6  r   urllib.parser   commonr   jsinterpr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   rB   r  r+  r   r   r   r   <module>   s    <D   -@