
    =Ґiz                     \   d dl Z d dlZ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
 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mZ dd	lmZmZ  G d
 de      Z G d de      Z  G d de      Z! G d de!      Z" G d de!      Z# G d de#      Z$ G d de#      Z% G d de!      Z&y)    N   )InfoExtractor)PhantomJSwrapper   )Request)	HTTPError)
NO_DEFAULTExtractorError
clean_htmldetermine_extformat_fieldint_or_nonemerge_dicts
orderedSetremove_quotesremove_start
str_to_intupdate_url_queryurl_or_noneurlencode_postdata)find_elementstraverse_objc                   8     e Zd ZdZdZ fdZd Zd Zd Z xZ	S )PornHubBaseIEpornhubzr(?:(?P<host>pornhub(?:premium)?\.(?:com|net|org))|pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd\.onion)c                    	 
 fd} ||i |}|s|S |\  	}t        	fddD              rN|d   }t        |t              r|j                  n|}t	         d      }|j                  |	        ||i |\  	}	|fS )Nc                  *    t        t        
  | i |S N)superr   _download_webpage_handle)argskwargs	__class__selfs     Q/var/www/descvideos/venv/lib/python3.12/site-packages/yt_dlp/extractor/pornhub.pydlz2PornHubBaseIE._download_webpage_handle.<locals>.dl#   s    FWPVWW    c              3   J   K   | ]  }t        j                  |        y wr   research.0pwebpages     r%   	<genexpr>z9PornHubBaseIE._download_webpage_handle.<locals>.<genexpr>-   s       8ryyG$ 8    #)z <body\b[^>]+\bonload=["\']go\(\)z"document\.cookie\s*=\s*["\']RNKEY=z"document\.location\.reload\(true\)r   z2.0)required_version)html)any
isinstancer   urlr   get)r$   r!   r"   r&   returlhurl_or_requestr6   phantomr/   r#   s   `        @r%   r    z&PornHubBaseIE._download_webpage_handle"   s    	X $!&!J 8 /7 8 8 "!WN 9 "%%&  'teDGKK'K*//MGT}r'   c                     d| _         y NF)
_logged_in)r$   s    r%   _real_initializezPornHubBaseIE._real_initialize;   s	    r'   c                     | j                  |dd       | j                  |dd       | j                  |dd       | j                  |dd       y )Nage_verified1accessAgeDisclaimerPHaccessAgeDisclaimerUKaccessPH)_set_cookie)r$   hosts     r%   _set_age_cookieszPornHubBaseIE._set_age_cookies>   sL    ~s36<6<z3/r'   c           
      *   | j                   ry |j                  d      d   }| j                  |      \  }}|y dj                  |d|v rdnd      }| j	                  |d d| d	      }d
 } ||      rd| _         y | j                  |      }|j                  ||d       | j                  d| dd d| t        |      d|dd      }	|	j                  d      dk(  rd| _         y |	j                  d      }
|
t        d|
 d      t        d      )N.r   )netrc_machinezhttps://www.{}/{}loginpremiumzpremium/ Downloading z login pagec                 ,     t         fddD              S )Nc              3   J   K   | ]  }t        j                  |        y wr   r)   r,   s     r%   r0   z:PornHubBaseIE._login.<locals>.is_logged.<locals>.<genexpr>Y   s       ,ryyG, ,r1   )zid="profileMenuDropdown"zclass="ph-icon-logout")r4   r/   s   `r%   	is_loggedz'PornHubBaseIE._login.<locals>.is_loggedX   s     , 7+ , , ,r'   T)emailpasswordhttps://www.z/front/authenticatezLogging in to z0application/x-www-form-urlencoded; charset=UTF-8XMLHttpRequest)zContent-TypeRefererzX-Requested-With)dataheaderssuccessrB   messagezUnable to login: expectedzUnable to log in)r>   split_get_login_infoformat_download_webpage_hidden_inputsupdate_download_jsonr   r7   r
   )r$   rG   siteusernamerT   	login_url
login_pagerR   
login_formresponser[   s              r%   _loginzPornHubBaseIE._loginD   s^   ??zz#q! "111E(,33D	UYHY*_ab	++t|D6=?
	,
 Z "DO((4
 
 	
 &&4& 34dTF##J/ R$$4	 '  <<	"c)"DO,,y) #G9-> > /00r'   )
__name__
__module____qualname___NETRC_MACHINE_PORNHUB_HOST_REr    r?   rH   rk   __classcell__r#   s   @r%   r   r      s%    N M2 071r'   r   c                      e Zd ZdZdej
                   dZdgZddi ddd	d
dddddddddddddedededdde	de	de	dd d!d"d#d
d$d%d&d'eeeede	e	d(d)d*id+d,d-d.d
d/d0d1eeeede	e	d2d	d3igid4d)d*id5d,d6d7d8d9d:d;d d<d=d>d*d?d@d*d?dAd*d?dBd*d?dCd*d?dDd*d?dEd*d?dFd*d?dGd*d?dHd*d?dId*d?dJd*d?dKd*d?dLd*d?gZ
dM ZdN ZyO)P	PornHubIEzPornHub and Thumbzillaz(?x)
                    https?://
                        (?:
                            (?:[^/]+\.)?
                            z
                            /(?:(?:view_video\.php|video/show)\?viewkey=|embed/)|
                            (?:www\.)?thumbzilla\.com/video/
                        )
                        (?P<id>[\da-z]+)
                    zj<iframe[^>]+?src=["\'](?P<url>(?:https?:)?//(?:www\.)?pornhub(?:premium)?\.(?:com|net|org)/embed/[\da-z]+)z7http://www.pornhub.com/view_video.php?viewkey=648719015 4d4a4e9178b655776f86cf89ecaf0edfid	648719015extmp4titlez>Seductive Indian beauty strips down and fingers her pink pussyuploaderz	BABES-COMuploader_idz/users/babes-comupload_date20130628	timestampiQdurationii  
view_count
like_countcomment_count	age_limit   tags
categoriescast	thumbnailzre:https?://.+)r6   md5	info_dictz8http://www.pornhub.com/view_video.php?viewkey=1331683002
1331683002u   重庆婷婷女王足交20150213iTi  )rv   rx   rz   r}   r   r   r   r   dislike_countr   r   r   r   skip_downloadTzVVideo has been flagged for verification in accordance with our trust and safety policy)r6   r   paramsskipz>https://www.pornhub.com/view_video.php?viewkey=ph5af5fef7c2aa7ph5af5fef7c2aa7z.BFFS - Cute Teen Girls Share Cock On the FloorBFFsin  ensrt)rv   rx   rz   r{   r   r   r   r   r   r   r   r   	subtitleszThis video has been disabledz=http://www.pornhub.com/view_video.php?viewkey=ph601dc30bae19aph601dc30bae19azProjekt Melodyzprojekt-melody20210205z4"Welcome to My Pussy Mansion" - CB Stream (02/03/21))rv   r{   r|   r}   rz   r   )r6   r   z=http://www.pornhub.com/view_video.php?viewkey=ph557bbb6676d2dr6   only_matchingz<http://fr.pornhub.com/view_video.php?viewkey=ph55ca2f9760862z7http://www.pornhub.com/view_video.php?viewkey=788152859z=http://www.pornhub.com/view_video.php?viewkey=ph572716d15a111z=http://www.pornhub.com/view_video.php?viewkey=ph56fd731fce6b7zEhttps://www.thumbzilla.com/video/ph56c6114abd99a/horny-girlfriend-sexz3http://www.pornhub.com/video/show?viewkey=648719015z8https://www.pornhub.net/view_video.php?viewkey=203640933z8https://www.pornhub.org/view_video.php?viewkey=203640933zEhttps://www.pornhubpremium.com/view_video.php?viewkey=ph5e4acdae54a82z>https://www.pornhub.com/view_video.php?viewkey=ph5f75b0f4b18e3zEhttps://www.pornhubpremium.com/view_video.php?viewkey=ph5f75b0f4b18e3z>https://www.pornhub.com/view_video.php?viewkey=ph5a9813bfa7156zlhttp://pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd.onion/view_video.php?viewkey=ph5a9813bfa7156c                 D    t        | j                  ||| dd             S )Nz countdefault)r   _search_regex)r$   patternr/   names       r%   _extract_countzPornHubIE._extract_count  s(    $,,Wg$vX\,]^^r'   c                 
    !"#$%&'  j                  |      }|j                  d      xs d"|j                  d      $ j                  "        j                  "       " $fd} |d      ' j	                  d'dd d	      }|r(t        j                  d
d|      }t        d| d$      t        'fddD              r j                           j                  d'd       xs  j	                  d'dd      }g %t               &i } j                   j                  d'dd      $      }|r
t        |j                  d            }|r$|j!                  dg       j#                  |dd       |j                  d      }	t%        |j                  d            }
|j                  d      }t'        |t(              r|D ]x  }t'        |t*              s|j                  d       }|rt'        |t,              s8|&v r=&j/                  |       %j#                  |t%        |j                  d!            f       z n	d gd"z  \  }	}
t0        f fd#	}%&fd$   $fd%}%sd&} |'d'j3                  d(j5                  |            d       }|rU|j7                         D ]B  \  #}#j9                  |d)         r	 ||       #t        #fd*|d d" D              s;  |       D %s't        j:                  d+'      rt        d,$ d-d.      %s | |d/      d0      }  |d1          t        j<                  d2'      D ]<  }|j                  d3      }|&vs%j#                  |d f       &j/                  |       > d }g !dW! $fd4	}%D ]  \  }}|s) j                  d5|d6d       }|r|j?                  d7d8      }d9|v r} jA                  |$d:;      }t'        |t(              rX|D ]S  }t'        |t*              st        |j                  d             }|s1t%        |j                  d!            } |||       U  ||         jC                  d<'d=$d:;      } j	                  d>'d?d       xs |j                  d@      } 'fdA} jE                  dB'dC      } |dDdE      } |dFdG      } jE                  dH'dI      } jG                  '$i       }d |dJ<   tI        $|tK        |j                  dK      dL      |||	|
||||!dMdNtM        'tO        dOdPQ      hdRtP        hftO        dOdSQ      hdRtP        hftO        dOdTQ      hdRtP        hfdU      dV|i|      S )XNrG   zpornhub.comrv   c                 d    j                  d|        j                  d d d|  d      S )NplatformrU   z/view_video.php?viewkey=rN   z webpage)rF   ra   )r   rG   r$   video_ids    r%   
dl_webpagez+PornHubIE._real_extract.<locals>.dl_webpage  sG    T:x8))tf$<XJGL
(;= =r'   pc)zp(?s)<div[^>]+class=(["\'])(?:(?!\1).)*\b(?:removed|userMessageSection)\b(?:(?!\1).)*\1[^>]*>(?P<error>.+?)</div>zF(?s)<section[^>]+class=["\']noVideo["\'][^>]*>(?P<error>.+?)</section>zerror messageerror)r   groupz\s+ zPornHub said: T)r]   r   c              3   J   K   | ]  }t        j                  |        y wr   r)   r,   s     r%   r0   z*PornHubIE._real_extract.<locals>.<genexpr>*  s"      EryyG$ Er1   )zclass=["\']geoBlocked["\']z/>\s*This content is unavailable in your countryztwitter:titler   )z:(?s)<h1[^>]+class=["\']title["\'][^>]*>(?P<title>.+?)</h1>z:<div[^>]+data-video-title=(["\'])(?P<title>(?:(?!\1).)+)\1z9shareTitle["\']\s*[=:]\s*(["\'])(?P<title>(?:(?!\1).)+)\1rz   )r   z"var\s+flashvars_\d+\s*=\s*({.+?});	flashvarsz{}closedCaptionsFiler   r   )r6   rx   	image_urlvideo_durationmediaDefinitionsvideoUrlqualityr   c                    	j                  || d|      }|si S |j                  d      }i fd|D ]L  }|j                         }|st        j                  dd|      }|j                  dd      \  }} |      |<   N S )	Nzencoded urlr   ;c                     t        j                  dd|       } d| v r?| j                  d      }t        j                  t
        j                  t        |            S | j                         } | v r|    S t        |       S )Nz/\*(?:(?!\*/).)*?\*/rM   +)
r*   subr^   	functoolsreduceoperatorconcatmapstripr   )inpinpsjs_varsparse_js_values     r%   r   zHPornHubIE._real_extract.<locals>.extract_js_vars.<locals>.parse_js_valued  sv    ff4b#>#:99S>D$++ ^T)BD Diik'>"3<'$S))r'   zvar\s+rM   =r   )r   r^   r   r*   r   )
r/   r   r   assignmentsassnvnamevaluer   r   r$   s
          @@r%   extract_js_varsz0PornHubIE._real_extract.<locals>.extract_js_varsZ  s    ,,- - BK	%++C0KG	* $ 7zz|vviT2#zz#q1u!/!67 Nr'   c                 t    t        |       }|sy |v ry j                  |d f       j                  |       y r   )r   appendadd)	video_urlv_url
video_urlsvideo_urls_sets     r%   add_video_urlz.PornHubIE._real_extract.<locals>.add_video_urlx  s>    	*E&udm,u%r'   c                     j                  | d      }t        |t              sy |D ]*  }t        |t              s |j	                  d             , y )NFfatalr6   )_parse_jsonr5   listdictr7   )quality_itemsq_itemsitemr   r$   r   s      r%   parse_quality_itemsz4PornHubIE._real_extract.<locals>.parse_quality_items  sP    &&}he&LGgt, 3dD)!$((5/23r'   )mediar   qualityItemsz(var\s+(?:{})_.+)|c              3   @   K   | ]  }j                  |        y wr   )
startswith)r-   r.   keys     r%   r0   z*PornHubIE._real_extract.<locals>.<genexpr>  s     L1S^^A.Ls   z<[^>]+\bid=["\']lockedPlayerzVideo z
 is lockedr\   tvz(var.+?mediastring.+?)</script>mediastringzK<a[^>]+\bclass=["\']downloadBtn\b[^>]+\bhref=(["\'])(?P<url>(?:(?!\1).)+)\1r6   c           
      H   t        |       }|dk(  r%j                  j                  | dd             y |dk(  r'j                  j                  | dddd	             y |st	        j                  d
| dd             }j                  | t        |d d      |d       y )NmpddashF)mpd_idr   m3u8ry   m3u8_nativehls)entry_protocolm3u8_idr   z(?P<height>\d+)[pP]?_\d+[kK]heightr   z%dp)r6   	format_idr   )r   extend_extract_mpd_formats_extract_m3u8_formatsr   r   r   r   )
format_urlr   rx   formatsr$   r   s      r%   
add_formatz+PornHubIE._real_extract.<locals>.add_format  s    
+Ce|t88u  9  F Gf}t99%!  :  0 1 $T%7%73Z  &8 &" # NN!)&$>  r'   z/(\d{6}/\d{2})/zupload data/rM   z/video/get_mediaFr   zvar\s+MODEL_PROFILE\s*=zmodel profilez~(?s)From:&nbsp;.+?<(?:a\b[^>]+\bhref=["\']/(?:(?:user|channel)s|model|pornstar)/|span\b[^>]+\bclass=["\']username)[^>]+>(.+?)<r{   rf   c                 >    j                  d|  dd|  df|      S )Nz<span[^>]+\bclass="votesz"[^>]*>([\d,\.]+)</span>z<span[^>]+\bclass=["\']votesz"["\'][^>]*\bdata-rating=["\'](\d+))r   )kindr   r$   r/   s     r%   extract_vote_countz3PornHubIE._real_extract.<locals>.extract_vote_count  s;    &&,TF2JK06XY[ r'   z.<span class="count">([\d,\.]+)</span> [Vv]iewsviewUplikeDowndislikez"All Comments\s*<span>\(([\d,.]+)\)commentdescriptionmodelProfileLinkz/model/r   )rv   r{   r|   r}   rz   r   r   r   r   r   r   r   r   z
data-labeltag)attrr   .categorypornstar)r   r   r   r   r   ))_match_valid_urlr   rk   rH   _html_search_regexr*   r   r
   r4   raise_geo_restricted_html_search_metasetr   r   r   r7   
setdefaultr   r   r5   r   r   strr   r	   r`   joinitemsr   r+   finditerreplacerd   _search_jsonr   _search_json_ldr   r   r   r   r   )(r$   r6   mobjr   	error_msgrz   r   r   subtitle_urlr   r   media_definitions
definitionr   r   r   FORMAT_PREFIXESr   r   r}   r   r   mediasr   model_profilevideo_uploaderr   r   r   r   r   infor   r   rG   r   r   r   r   r/   s(   `                               @@@@@@@@r%   _real_extractzPornHubIE._real_extract  s4   $$S)zz&!2]::d#Dd#	= T"++X_d' , C	 vsI6I  ,2 2  E /D E E %%'
 &&Wd ' 4 -7;7N7NK WG	 8O 8- 	 
	$$5wUY  [	 &y}}5I'JKL$$T2.55' 7  "k2I"9==1A#BCH ).@ A+T2"3 
MJ%j$7  *z :I$Jy#,F  N2 "&&y1%%"K
y0I$JKM
M $(&1*Ix6@ 	<	&	3 BO%-44SXXo5NOG '.}} 2OC~~ob&9:+J7L8KLL%j1	2
 "))3W#>$XJj1DB B %4 "DFG'-01KK^ 	.D 

5)I.!!9d"34""9-	. 	* ", 	"Iv"00&	=$ 1 P"-"5"5c2">K!Y.,,Y,Nfd+!' 6)%6$$/		*0E$F	($!,UYYy-A!B"9f56 y!%	"( ))&(RW * Y00 NZ 1 / P2?2C2CJ2O 		 ((=wP
'f5
*69=++17IG ##GXr#B"]&'(9(9:L(MyY&" $$**
 7'\GH#PZ|\ -<z RSUX[eZfg'\LMsU_T`a% 
& '
( ) 	r'   N)rl   rm   rn   IE_DESCr   rp   
_VALID_URL_EMBED_REGEXintr   _TESTSr   r   r'   r%   rt   rt   ~   s   &G +;;< =		J B  CLH1
+
5
 U
 	

 -
 :
 
 
 #
 #
 S
 
 D
 $
 D
  *!
. J/%#  
  T
 i+0 P#E  5 
( T
 /36 O#(+%K*

 O
 N I O O
 W E J J W P	 W
 P
 ~{@FD_mr'   rt   c                       e Zd Zd Zd Zy)PornHubPlaylistBaseIEc                 >    t        | j                  d|dd             S )Nz\bpage=(\d+)pager   )r   r   )r$   r6   s     r%   _extract_pagez#PornHubPlaylistBaseIE._extract_page  s*    4--S&$ . 8 9 	9r'   c           
          | j                  d|d|      }t        t        j                  d|            D cg c]1  \  }}| j	                  d| d| t
        j                         |      3 c}}S c c}}w )Nz%(?s)(<div[^>]+class=["\']container.+)	containerr   zLhref="/?(view_video\.php\?.*\bviewkey=[\da-z]+[^"]*)"[^>]*\s+title="([^"]+)"zhttp://www.r   )video_title)r   r   r*   findall
url_resultrt   ie_key)r$   r/   rG   r(  r   rz   s         r%   _extract_entriesz&PornHubPlaylistBaseIE._extract_entries  s     &&4g ' *	 %/rzz_0 %	
 !	5 OOdV1YK0  "  7
 	
 
s   6A2N)rl   rm   rn   r&  r-  r!  r'   r%   r#  r#     s    9
r'   r#  c            
       |    e Zd Zdej                   dZddddddidd	d
dddddddddddddddddgZd Zy)PornHubUserIE(?P<url>https?://(?:[^/]+\.)?zN/(?:(?:user|channel)s|model|pornstar)/(?P<id>[^/?#&]+))(?:[?#&]|/(?!videos)|$)z$https://www.pornhub.com/model/zoe_phv   )r6   playlist_mincountz,https://www.pornhub.com/pornstar/liz-viciousrv   zliz-viciousr6   r   r2  z+https://www.pornhub.com/users/russianveet69Tr   z%https://www.pornhub.com/channels/povdz*https://www.pornhub.com/model/zoe_ph?abc=1z3https://www.pornhubpremium.com/pornstar/sienna-westz3https://www.pornhubpremium.com/pornstar/lily-labeauzShttps://pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd.onion/model/zoe_phc                 T   | j                  |      }|j                  d      }dj                  |j                  d            }| j                  |j                  d             | j	                  |      }|rt        |d|i      }| j                  |t        j                         |      S )Nrv   z	{}/videosr6   rG   r%  )ier   )	r  r   r`   rH   r&  r   r+  PornHubPagedVideoListIEr,  )r$   r6   r  user_id
videos_urlr%  s         r%   r  zPornHubUserIE._real_extract:  s    $$S)**T" ''

5(9:
djj01!!#&)*vtnEJ299;g  O 	Or'   N)rl   rm   rn   r   rp   r  r   r  r!  r'   r%   r/  r/    s    1-2P2P1Q  R`  aJ5  >-
 ! = 7 < E E
 e9FB	Or'   r/  c                   (    e Zd Zed        Zd Zd Zy)PornHubPagedPlaylistBaseIEc                 2    t        j                  d|       d uS )Nz(?x)
                <li[^>]+\bclass=["\']page_next|
                <link[^>]+\brel=["\']next|
                <button[^>]+\bid=["\']moreDataBtn
            r)   rQ   s    r%   	_has_morez$PornHubPagedPlaylistBaseIE._has_moreG  s'    yy 
 "&& 	&r'   c              #      K    j                  |      }d}d fd	}d }|}|d u}	|	r|nd}
|	r|
fnt        j                  |
      D ]@  }	 	  |||      } j                  ||      }|s y |E d {     j                  |      r@ y  y # t        $ r:} ||      r'||
k(  r"||v r|j	                  |d      } |||d      }n Y d }~td }~ww xY w# t        $ r} ||      r||
k7  rY d }~ y  d }~ww xY w7 w)	Nz/videosc                 ^    dj                  ||rdnd      }j                  | |d|i      S )NzDownloading page {}{}z (switch to fallback)rM   r%  query)r`   ra   )base_urlnumfallbacknoteitem_idr$   s       r%   download_pagez:PornHubPagedPlaylistBaseIE._entries.<locals>.download_pageU  sA    *11#RZ7N`bcD))'4} * > >r'   c                 l    t        | j                  t              xr | j                  j                  dk(  S )Ni  )r5   causer   status)es    r%   is_404z3PornHubPagedPlaylistBaseIE._entries.<locals>.is_404Z  s%    aggy1Kaggnn6KKr'   r   rM   T)rC  )F)r&  	itertoolscountr
   r  r-  r<  )r$   r6   rG   rE  r%  VIDEOSrF  rK  rA  has_page
first_pagepage_numr/   rJ  page_entriess   `  `           r%   _entriesz#PornHubPagedPlaylistBaseIE._entriesP  s"    !!#&	>
	L t#%T1
*2	
8S 	H
+Hh?G  00$?L###>>'*-	 &  ayX%;(@R#+#3#3FB#?"/(T"R   " !9Z!7 $sf   AC9	BC91C72C9C9	C0C
C
CC	C4C/(C9.C//C44C9c                     | j                  |      }|j                  d      }|j                  d      }| j                  |       | j                  |       | j	                  | j                  |||      |      S )NrG   rv   r  r   rk   rH   playlist_resultrS  r$   r6   r  rG   rE  s        r%   r  z(PornHubPagedPlaylistBaseIE._real_extractx  sh    $$S)zz&!**T"Dd###DMM#tW$EwOOr'   N)rl   rm   rn   staticmethodr<  rS  r  r!  r'   r%   r:  r:  F  s     & &&PPr'   r:  c                   .    e Zd Zdej                   dZddddddddd	id
dddd	idddddidddddddddddddddddddddddddddddddddddddddddddddddd ddd!ddd"ddd#ddd$ddd%ddgZe fd&       Z xZ	S )'r6  zhttps?://(?:[^/]+\.)?z)/(?!playlist/)(?P<id>(?:[^/]+/)*[^/?#&]+)z+https://www.pornhub.com/model/zoe_ph/videosTr   z.http://www.pornhub.com/users/rushandlia/videosz4https://www.pornhub.com/pornstar/jenny-blighe/videosrv   zpornstar/jenny-blighe/videos   r3  z;https://www.pornhub.com/pornstar/jenny-blighe/videos?page=3(   z,https://www.pornhub.com/channels/povd/videoszchannels/povd/videosi%  z1https://www.pornhub.com/channels/povd/videos?o=raz1https://www.pornhub.com/channels/povd/videos?o=daz1https://www.pornhub.com/channels/povd/videos?o=viz1http://www.pornhub.com/users/zoe_ph/videos/publicz8https://www.pornhub.com/pornstar/liz-vicious/videos?o=mvz8https://www.pornhub.com/pornstar/liz-vicious/videos?o=trz8https://www.pornhub.com/pornstar/liz-vicious/videos?o=lgz8https://www.pornhub.com/pornstar/liz-vicious/videos?o=cmz8https://www.pornhub.com/pornstar/liz-vicious/videos/paidz;https://www.pornhub.com/pornstar/liz-vicious/videos/fanonlyzhttps://www.pornhub.com/videoz$https://www.pornhub.com/video?page=3z/https://www.pornhub.com/video/search?search=123z'https://www.pornhub.com/categories/teenz.https://www.pornhub.com/categories/teen?page=3zhttps://www.pornhub.com/hdz!https://www.pornhub.com/hd?page=3z'https://www.pornhub.com/described-videoz.https://www.pornhub.com/described-video?page=2z:https://www.pornhub.com/video/incategories/60fps-1/hd-pornzZhttps://pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd.onion/model/zoe_ph/videosc                     t         j                  |      s*t        j                  |      st        j                  |      rdS t        |   |      S r=   )rt   suitabler/  PornHubUserVideosUploadIEr   )clsr6   r#   s     r%   r]  z PornHubPagedVideoListIE.suitable  sK     %%c*m.D.DS.IMfMoMopsMt  	,W%c*	,r'   )
rl   rm   rn   r   rp   r  r   classmethodr]  rq   rr   s   @r%   r6  r6    s   )-*H*H)IIrsJ< @ F0
 ! M0
   >(
 ! C C C
 C
 J J J J
 J M / 6 A 9 @ , 3 9 @ L ly_FB , ,r'   r6  c                   N    e Zd Zdej                   dZdddidddd	d
dd	d
gZy)r^  r0  zB/(?:(?:user|channel)s|model|pornstar)/(?P<id>[^/]+)/videos/upload)z;https://www.pornhub.com/pornstar/jenny-blighe/videos/uploadrv   zjenny-blighe   r3  z2https://www.pornhub.com/model/zoe_ph/videos/uploadTr   zihttp://pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd.onion/pornstar/jenny-blighe/videos/uploadN)rl   rm   rn   r   rp   r  r   r!  r'   r%   r^  r^    sY    1-2P2P1Q  RT  UJL.
 ! D {Fr'   r^  c                   b    e Zd Zdej                   dZdddidddd	d
dd	d
dd	d
gZd Zd Zy)PornHubPlaylistIEr0  z/playlist/(?P<id>[^/?#&]+))z)https://www.pornhub.com/playlist/44121572rv   44121572M   )r6   r   playlist_countz(https://www.pornhub.com/playlist/4667351Tr   z'https://de.pornhub.com/playlist/4667351z.https://de.pornhub.com/playlist/4667351?page=2c              #      
K    j                  |d      } j                  d|d      
t         j                  d|d            } j                  d|d      t        j                  |dz
  d	z        d
z   } j                  |      }
 fd}t        d
|d
z         D ]/  }	|	d
kD  r ||	      } j                  |      }|s y |E d {    1 y 7 w)NzDownloading page 1z var\s+playlistId\s*=\s*"([^"]+)"playlist_idz&var\s+itemsCount\s*=\s*([0-9]+)\s*\|\|video_countzvar\s+token\s*=\s*"([^"]+)"token$   g      D@r   c           	      L    d|  }d d}j                  ||| d      S )NzDownloading page rU   z/playlist/viewChunked)rv   r%  rk  r?  )ra   )rQ  rD  page_urlrG   rE  ri  r$   rk  s      r%   rF  z1PornHubPlaylistIE._entries.<locals>.download_page  sI    &xj1D%dV+@AH))(GT! J)  r'   )ra   r   r   mathceilr-  range)r$   r6   rG   rE  r/   rj  
page_countrR  rF  rQ  ri  rk  s   ` ``      @@r%   rS  zPornHubPlaylistIE._entries  s     ((g7KL(()LgWde!H'S`ac""#A7GTYYb 0C781<
,,Wd;	 	 aa0 	$H!|'1#44WdC###	$ $s   C	CCCc                    | j                  |      }|j                  d      }|j                  d      }| j                  |       | j                  |       | j	                  | j                  |j                  d      ||      |      S )NrG   rv   r6   rU  rW  s        r%   r  zPornHubPlaylistIE._real_extract+  sr    $$S)zz&!**T"Dd###DMM$**U2CT7$SU\]]r'   N)	rl   rm   rn   r   rp   r  r   rS  r  r!  r'   r%   rd  rd    si    1-2P2P1QQlmJ:*
  : 9 @F"$4^r'   rd  )'r   rL  ro  r   r*   commonr   openloadr   
networkingr   networking.exceptionsr   utilsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   utils.traversalr   r   r   rt   r#  r/  r:  r6  r^  rd  r!  r'   r%   <module>rz     s        	 ! &   -     :]1M ]1@ D
M 
.,O) ,O^:P!6 :Pzg,8 g,T : "5^- 5^r'   