
    VGhz                     L   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  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_postdatac                   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     a/var/www/it7/html/youtubeDownloader/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_requestr4   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#   r.   z:PornHubBaseIE._login.<locals>.is_logged.<locals>.<genexpr>X   s       ,ryyG, ,r/   )zid="profileMenuDropdown"zclass="ph-icon-logout")r2   r-   s   `r#   	is_loggedz'PornHubBaseIE._login.<locals>.is_loggedW   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successr@   messagezUnable to login: expectedzUnable to log in)r<   split_get_login_infoformat_download_webpage_hidden_inputsupdate_download_jsonr   r5   r
   )r"   rE   siteusernamerR   	login_url
login_pagerP   
login_formresponserY   s              r#   _loginzPornHubBaseIE._loginC   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=   rF   ri   __classcell__r!   s   @r#   r   r      s%    N M2 071r%   r   c                   X   e Zd ZdZdej
                   dZdgZddddd	d
dddeeeede	e	e	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dd eeeede	e	d!d"d#igid$ddid%dd&d'd(d)d*d+d,d-d.d/dd0d1dd0d2dd0d3dd0d4dd0d5dd0d6dd0d7dd0d8dd0d9dd0d:dd0d;dd0d<dd0d=dd0gZ
d> Zd? Zy@)A	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 a6391306d050e4547f62b3f485dd9ba9	648719015mp4z>Seductive Indian beauty strips down and fingers her pink pussyBabes20130628iQii     )idexttitleuploaderupload_date	timestampduration
view_count
like_countdislike_countcomment_count	age_limittags
categoriescast)r4   md5	info_dictz8http://www.pornhub.com/view_video.php?viewkey=1331683002
1331683002u   重庆婷婷女王足交20150213iTi  )ry   rz   r{   r}   r~   r   r   r   r   r   r   r   r   skip_downloadTzVVideo has been flagged for verification in accordance with our trust and safety policy)r4   r   paramsskipz>https://www.pornhub.com/view_video.php?viewkey=ph5af5fef7c2aa7ph5af5fef7c2aa7z.BFFS - Cute Teen Girls Share Cock On the FloorBFFsin  enrz   srt)ry   rz   r{   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)zre:https?://.+)ry   r|   uploader_idr}   r{   	thumbnail)r4   r   z=http://www.pornhub.com/view_video.php?viewkey=ph557bbb6676d2dr4   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 "d^" %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      } (fdJ} jG                  (%i       } d | dK<   tI        i d%d?|dLtK        |j                  dM      dN      dO|d|dP|	dQ|
dR|dS|dT|dU|dV"dWdXdY |dY      dZ |dZ      d[ |d\      d]||       S )_NrE   zpornhub.comry   c                 d    j                  d|        j                  d d d|  d      S )NplatformrS   z/view_video.php?viewkey=rL   z webpage)rD   r_   )r   rE   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#   r.   z*PornHubIE._real_extract.<locals>.<genexpr>(  s"      EryyG$ Er/   )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).)+)\1r{   )r   z"var\s+flashvars_\d+\s*=\s*({.+?});	flashvarsz{}closedCaptionsFiler   r   )r4   rz   	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/\*(?:(?!\*/).)*?\*/rK   +)
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_valueb  sv    ff4b#>#:99S>D$++ ^T)BD Diik'>"3<'$S))r%   zvar\s+rK   =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_varsX  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_urlv  s>    	*E&udm,u%r%   c                     j                  | d      }t        |t              sy |D ]*  }t        |t              s |j	                  d             , y )NFfatalr4   )_parse_jsonr3   listdictr5   )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#   r.   z*PornHubIE._real_extract.<locals>.<genexpr>  s     L1S^^A.Ls   z<[^>]+\bid=["\']lockedPlayerzVideo z
 is lockedrZ   tvz(var.+?mediastring.+?)</script>mediastringzK<a[^>]+\bclass=["\']downloadBtn\b[^>]+\bhref=(["\'])(?P<url>(?:(?!\1).)+)\1r4   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   m3u8ru   m3u8_nativehls)entry_protocolm3u8_idr   z(?P<height>\d+)[pP]?_\d+[kK]heightr   z%dp)r4   	format_idr   )r   extend_extract_mpd_formats_extract_m3u8_formatsr   r   r   r   )
format_urlr   rz   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/rK   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|   rd   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,.]+)\)commentc                     j                  d|  d| d       }|r;t        j                  d|      D cg c]  }t        |      j	                          c}S y c c}w )Nz(?s)<div[^>]+\bclass=["\'].*?\bzWrapper[^>]*>(.+?)</div>r   z(?s)<a[^>]+\bhref=[^>]+>.+?</a>)r   r(   findallr   r   )meta_keydivxr"   r-   s      r#   extract_listz-PornHubIE._real_extract.<locals>.extract_list  sd    $$28*<TU4 % 1C 79zzBdfi7jk!
1++-kk ks    Adescriptionr   modelProfileLinkz/model/r}   r   r   r   r   r   r   r   r   rx   r   r   r   	pornstarsr   r   )&_match_valid_urlr   ri   rF   _html_search_regexr(   r   r
   r2   raise_geo_restricted_html_search_metasetr   r   r   r5   
setdefaultr   r   r3   r   r   strr   r	   r^   joinitemsr   r)   finditerreplacerb   _search_jsonr   _search_json_ldr   r   ))r"   r4   mobjr   	error_msgr{   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   r  infor   r   rE   r   r   r   r   r-   s)   `                                @@@@@@@@r#   _real_extractzPornHubIE._real_extract  s   $$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	l ##GXr#B"] 
(

 <(9(9:L(MyY
 ;	

 U
 
 
 *
 *
 ]
 ]
 w
 
 L(
 ,|4
  L-!
" #
$ % 	r%   N)rj   rk   rl   IE_DESCr   rn   
_VALID_URL_EMBED_REGEXintr   _TESTSr   r   r%   r#   rr   rr   }   s   &G +;;< =		J B  CLH1U%#  
, 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
 ~yFB_rr%   rr   c                       e Zd Zd Zd Zy)PornHubPlaylistBaseIEc                 >    t        | j                  d|dd             S )Nz\bpage=(\d+)pager   )r   r   )r"   r4   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(   r   
url_resultrr   ie_key)r"   r-   rE   r*  r   r{   s         r#   _extract_entriesz&PornHubPlaylistBaseIE._extract_entries  s     &&4g ' *	 %/rzz_0 %	
 !	5 OOdV1YK0  "  7
 	
 
s   6A2N)rj   rk   rl   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   )r4   playlist_mincountz,https://www.pornhub.com/pornstar/liz-viciousry   zliz-viciousr4   r   r3  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 )Nry   z	{}/videosr4   rE   r'  )ier   )	r  r   r^   rF   r(  r   r,  PornHubPagedVideoListIEr-  )r"   r4   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)rj   rk   rl   r   rn   r  r"  r  r#  r%   r#   r0  r0    s    1-2P2P1Q  R`  aJ5  >-
 ! = 7 < E E
 e9FB	Or%   r0  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'   rO   s    r#   	_has_morez$PornHubPagedPlaylistBaseIE._has_moreJ  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)rK   r'  query)r^   r_   )base_urlnumfallbacknoteitem_idr"   s       r#   download_pagez:PornHubPagedPlaylistBaseIE._entries.<locals>.download_pageX  sA    *11#RZ7N`bcD))'4} * > >r%   c                 l    t        | j                  t              xr | j                  j                  dk(  S )Ni  )r3   causer   status)es    r#   is_404z3PornHubPagedPlaylistBaseIE._entries.<locals>.is_404]  s%    aggy1Kaggnn6KKr%   r   rK   T)rD  )F)r(  	itertoolscountr
   r  r.  r=  )r"   r4   rE   rF  r'  VIDEOSrG  rL  rB  has_page
first_pagepage_numr-   rK  page_entriess   `  `           r#   _entriesz#PornHubPagedPlaylistBaseIE._entriesS  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 )NrE   ry   r  r   ri   rF   playlist_resultrT  r"   r4   r  rE   rF  s        r#   r  z(PornHubPagedPlaylistBaseIE._real_extract{  sh    $$S)zz&!**T"Dd###DMM#tW$EwOOr%   N)rj   rk   rl   staticmethodr=  rT  r  r#  r%   r#   r;  r;  I  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 )'r7  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/videosry   zpornstar/jenny-blighe/videos   r4  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;   )rr   suitabler0  PornHubUserVideosUploadIEr   )clsr4   r!   s     r#   r^  z PornHubPagedVideoListIE.suitable  sK     %%c*m.D.DS.IMfMoMopsMt  	,W%c*	,r%   )
rj   rk   rl   r   rn   r  r"  classmethodr^  ro   rp   s   @r#   r7  r7    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%   r7  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_  r1  zB/(?:(?:user|channel)s|model|pornstar)/(?P<id>[^/]+)/videos/upload)z;https://www.pornhub.com/pornstar/jenny-blighe/videos/uploadry   zjenny-blighe   r4  z2https://www.pornhub.com/model/zoe_ph/videos/uploadTr   zihttp://pornhubvybmsymdol4iibwgwtkpwmeyd6luq2gxajgjzfjvotyt5zhyd.onion/pornstar/jenny-blighe/videos/uploadN)rj   rk   rl   r   rn   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)PornHubPlaylistIEr1  z/playlist/(?P<id>[^/?#&]+))z)https://www.pornhub.com/playlist/44121572ry   44121572M   )r4   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 rS   z/playlist/viewChunked)ry   r'  rl  r@  )r_   )rR  rE  page_urlrE   rF  rj  r"   rl  s      r#   rG  z1PornHubPlaylistIE._entries.<locals>.download_page  sI    &xj1D%dV+@AH))(GT! J)  r%   )r_   r   r   mathceilr.  range)r"   r4   rE   rF  r-   rk  
page_countrS  rG  rR  rj  rl  s   ` ``      @@r#   rT  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 )NrE   ry   r4   rV  rX  s        r#   r  zPornHubPlaylistIE._real_extract.  sr    $$S)zz&!**T"Dd###DMM$**U2CT7$SU\]]r%   N)	rj   rk   rl   r   rn   r  r"  rT  r  r#  r%   r#   re  re    si    1-2P2P1QQlmJ:*
  : 9 @F"$4^r%   re  )$r   rM  rp  r   r(   commonr   openloadr   
networkingr   networking.exceptionsr   utilsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r%  r0  r;  r7  r_  re  r#  r%   r#   <module>rz     s        	 ! &   -   $]1M ]1@C CL
M 
.,O) ,O^:P!6 :Pzg,8 g,T : "5^- 5^r%   