
    yf:{                     X   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 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   )
compat_str)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     :/usr/lib/python3/dist-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_requestr5   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|dd|v rdndd	}| j                  |d d
|z        }d } ||      rd| _         y | j	                  |      }|j                  ||d       | j                  d|z  d d|z  t        |      d|dd      }	|	j                  d      dk(  rd| _         y |	j                  d      }
|
t        d|
z  d      t        d      )N.r   )netrc_machinehttps://www./premiumzpremium/ loginzDownloading %s 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>Y   s       ,ryyG, ,r0   )zid="profileMenuDropdown"zclass="ph-icon-logout")r3   r.   s   `r$   	is_loggedz'PornHubBaseIE._login.<locals>.is_loggedX   s     , 7+ , , ,r&   T)usernamepasswordz!https://www.%s/front/authenticatezLogging in to %sz0application/x-www-form-urlencoded; charset=UTF-8XMLHttpRequest)zContent-TypeRefererzX-Requested-With)dataheaderssuccessrA   messagezUnable to login: %sexpectedzUnable to log in)
r=   split_get_login_info_download_webpage_hidden_inputsupdate_download_jsonr   r6   r   )r#   rF   siterT   rU   	login_url
login_pagerS   
login_formresponser[   s              r$   _loginzPornHubBaseIE._loginD   sW   ??zz#q! "111E(  15IQUDUj[]6]^	++t84?A
	,
 Z "DO((4
  
 	
 &&/$6%#J/ R$$4	 '  <<	"c)"DO,,y) %/$@ @ /00r&   )
__name__
__module____qualname___NETRC_MACHINE_PORNHUB_HOST_REr   r>   rG   ri   __classcell__r"   s   @r$   r   r      s%    N M2 071r&   r   c                   V   e Zd ZdZdej
                  z  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d/d0dd/d1dd/d2dd/d3dd/d4dd/d5dd/d6dd/d7dd/d8dd/d9dd/d:dd/d;dd/d<dd/gZ
d= Zd> Zy?)@	PornHubIEzPornHub and Thumbzillaam  (?x)
                    https?://
                        (?:
                            (?:[^/]+\.)?
                            %s
                            /(?:(?: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)r5   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)r5   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)r5   r   z=http://www.pornhub.com/view_video.php?viewkey=ph557bbb6676d2dr5   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|z  d             S )Nz%s countdefault)r   _search_regex)r#   patternr.   names       r$   _extract_countzPornHubIE._extract_count  s'    $,,WgzD?PZ^,_``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|z  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'd(j3                  |      z  d       }|rU|j5                         D ]B  \  $}$j7                  |d)         r	 ||       #t        $fd*|d d" D              s; !|       D &s&t        j8                  d+(      rt        d,%z  d-      &s | |d.      d/      } !|d0          t        j:                  d1(      D ]<  }|j                  d2      }|'vs&j#                  |d f       'j/                  |       > d }g "d]" %fd3	}&D ]  \  }}|s) j                  d4|d5d       }|r|j=                  d6d7      }d8|v r} j?                  |%d9:      }t'        |t(              rX|D ]S  }t'        |t*              st        |j                  d             }|s1t%        |j                  d!            } |||       U  ||         jA                  d;(d<%d9:      } j	                  d=(d>d       xs |j                  d?      } (fd@} jC                  dA(dB      } |dCdD      } |dEdF      } jC                  dG(dH      } (fdI} jE                  (%i       } d | dJ<   tG        i d%d>|dKtI        |j                  dL      dM      dN|d|dO|	dP|
dQ|dR|dS|dT|dU"dVdWdX |dX      dY |dY      dZ |d[      d\||       S )^NrF   zpornhub.comry   c                 b    j                  d|        j                  ddd| z        S )NplatformrK   z/view_video.php?viewkey=zDownloading %s webpage)rE   r`   )r   rF   r#   video_ids    r$   
dl_webpagez+PornHubIE._real_extract.<locals>.dl_webpage  s;    T:x8))>BHM2X=? ?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: %sT)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r0   )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   )r5   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/\*(?:(?!\*/).)*?\*/rN   +)
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_valuec  sv    ff4b#>#:99S>D$++ ^T)BD Diik'>"3<'$S))r&   zvar\s+rN   =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_varsY  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_urlw  s>    	*E&udm,u%r&   c                     j                  | d      }t        |t              sy |D ]*  }t        |t              s |j	                  d             , y )NFfatalr5   )_parse_jsonr4   listdictr6   )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+(?:%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 %s is lockedr\   tvz(var.+?mediastring.+?)</script>mediastringzK<a[^>]+\bclass=["\']downloadBtn\b[^>]+\bhref=(["\'])(?P<url>(?:(?!\1).)+)\1r5   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)r5   	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 datarL   rN   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|   rT   c                 :    j                  d| z  d| z  f|      S )Nz2<span[^>]+\bclass="votes%s"[^>]*>([\d,\.]+)</span>z@<span[^>]+\bclass=["\']votes%s["\'][^>]*\bdata-rating=["\'](\d+))r   )kindr   r#   r.   s     r$   extract_vote_countz3PornHubIE._real_extract.<locals>.extract_vote_count  s2    &&FMTW[[] r&   z.<span class="count">([\d,\.]+)</span> [Vv]iewsviewUplikeDowndislikez"All Comments\s*<span>\(([\d,.]+)\)commentc                     j                  d| z  | d       }|r;t        j                  d|      D cg c]  }t        |      j	                          c}S y c c}w )Nz9(?s)<div[^>]+\bclass=["\'].*?\b%sWrapper[^>]*>(.+?)</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  sb    $$L#Xt % =C 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   rG   _html_search_regexr)   r   r   r3   raise_geo_restricted_html_search_metasetr   r   r   r6   
setdefaultr   r   r4   r   r   r   r   r
   joinitemsr   r*   finditerreplacerc   _search_jsonr   _search_json_ldr   r   ))r#   r5   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   rF   r   r   r   r   r.   s)   `                                @@@@@@@@r$   _real_extractzPornHubIE._real_extract  st   $$S)zz&!2]::d#Dd#	? T"++X_d' , C	 vsI6I "Y.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*,M  N2 "&&y1%%"K
y0I$JKM
M $(&1*Ix6@ 	<	&	3 BO%-0IIG '.}} 2OC~~ob&9:+J7L8KLL%j1	2
 "))3W#>$(83dD D %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	 (88	9J 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a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#   r5   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.rL   )video_title)r   r   r)   r   
url_resultrr   ie_key)r#   r.   rF   r(  r   r{   s         r$   _extract_entriesz&PornHubPlaylistBaseIE._extract_entries	  s     &&4g ' *	 %/rzz_0 %	
 !	5 OO&*I6  "  7
 	
 
s   6A2N)rj   rk   rl   r&  r,  r!  r&   r$   r#  r#    s    9
r&   r#  c            
       z    e Zd Zdej                  z  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)PornHubUserIEzm(?P<url>https?://(?:[^/]+\.)?%s/(?:(?:user|channel)s|model|pornstar)/(?P<id>[^/?#&]+))(?:[?#&]|/(?!videos)|$)z$https://www.pornhub.com/model/zoe_phv   )r5   playlist_mincountz,https://www.pornhub.com/pornstar/liz-viciousry   zliz-viciousr5   r   r0  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                 <   | j                  |      }|j                  d      }d|j                  d      z  }| j                  |j                  d             | j                  |      }|rt	        |d|i      }| j                  |t        j                         |      S )Nry   z	%s/videosr5   rF   r%  )ier   )r  r   rG   r&  r   r*  PornHubPagedVideoListIEr+  )r#   r5   r  user_id
videos_urlr%  s         r$   r  zPornHubUserIE._real_extract>  s    $$S)**T" 4::e#44
djj01!!#&)*vtnEJ299;g  O 	Or&   N)rj   rk   rl   r   rn   r  r   r  r!  r&   r$   r.  r.    s     B  ER  Ec  Ec  c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(   rR   s    r$   	_has_morez$PornHubPagedPlaylistBaseIE._has_moreK  s'    yy 
 "&& 	&r&   c              #      K    j                  |      }d}d fd	}d }|}|d u}	|	r|nd}
|	r|
fnt        j                  |
      D ]A  }	 	  |||      } j                  ||      }|s y |D ]  }|   j                  |      rA y  y # t        $ r:} ||      r'||
k(  r"||v r|j	                  |d      } |||d      }n Y d }~ud }~ww xY w# t        $ r} ||      r||
k7  rY d }~ y  d }~ww xY ww)	Nz/videosc                 H    d||rdndfz  }j                  | |d|i      S )NzDownloading page %d%sz (switch to fallback)rN   r%  query)r`   )base_urlnumfallbacknoteitem_idr#   s       r$   download_pagez:PornHubPagedPlaylistBaseIE._entries.<locals>.download_pageY  s=    *ch3J\^-__D))'4} * > >r&   c                 l    t        | j                  t              xr | j                  j                  dk(  S )Ni  )r4   causer	   status)es    r$   is_404z3PornHubPagedPlaylistBaseIE._entries.<locals>.is_404^  s%    aggy1Kaggnn6KKr&   r   rN   T)rA  )F)r&  	itertoolscountr   r  r,  r:  )r#   r5   rF   rC  r%  VIDEOSrD  rI  r?  has_page
first_pagepage_numr.   rH  page_entriess   `  `           r$   _entriesz#PornHubPagedPlaylistBaseIE._entriesT  s'    !!#&	>
	L t#%T1
*2	
8S 	H
+Hh?G  00$?L! >>'*/	 &  ayX%;(@R#+#3#3FB#?"/(T"R   " !9Z!7sZ   AC8	B2C8	C8	C0CCCC	C5C0)C8/C00C55C8c                     | j                  |      }|j                  d      }|j                  d      }| j                  |       | j                  |       | j	                  | j                  |||      |      S )NrF   ry   r  r   ri   rG   playlist_resultrQ  r#   r5   r  rF   rC  s        r$   r  z(PornHubPagedPlaylistBaseIE._real_extract}  sh    $$S)zz&!**T"Dd###DMM#tW$EwOOr&   N)rj   rk   rl   staticmethodr:  rQ  r  r!  r&   r$   r8  r8  J  s     & &'RPr&   r8  c                   ,    e Zd Zdej                  z  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 )&r4  z@https?://(?:[^/]+\.)?%s/(?!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   r1  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        t
        |   |      S r<   )rr   suitabler.  PornHubUserVideosUploadIEr   r4  )clsr5   r"   s     r$   r[  z PornHubPagedVideoListIE.suitable  sP     %%c*m.D.DS.IMfMoMopsMt  	H2CA#F	Hr&   )
rj   rk   rl   r   rn   r  r   classmethodr[  ro   rp   s   @r$   r4  r4    s   TWdWuWuuJ< @ F0
 ! M0
   >(
 ! C C C
 C
 J J J J
 J M / 6 A 9 @ , 3 9 @ L ly_FB H Hr&   r4  c                   L    e Zd Zdej                  z  Zdddiddddd	d
dd	gZy)r\  za(?P<url>https?://(?:[^/]+\.)?%s/(?:(?:user|channel)s|model|pornstar)/(?P<id>[^/]+)/videos/upload)z;https://www.pornhub.com/pornstar/jenny-blighe/videos/uploadry   zjenny-blighe   r1  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\    s\    u  yF  yW  yW  WJL.
 ! D {Fr&   r\  c                   `    e Zd Zdej                  z  Zdddiddddd	d
dd	ddd	gZd Zd Zy)PornHubPlaylistIEz:(?P<url>https?://(?:[^/]+\.)?%s/playlist/(?P<id>[^/?#&]+))z)https://www.pornhub.com/playlist/44121572ry   44121572M   )r5   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 ]0  }	|	d
kD  r ||	      } j                  |      }|s y |D ]  }
|
  2 y 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           	      z    dj                  |       }dj                        }j                  ||| d      S )NzDownloading page {}z#https://www.{}/playlist/viewChunked)ry   r%  ri  r=  )formatr`   )rO  rB  page_urlrF   rC  rg  r#   ri  s      r$   rD  z1PornHubPlaylistIE._entries.<locals>.download_page  sN    (//9D<CCDIH))(GT! J)  r&   )r`   r   r   mathceilr,  range)r#   r5   rF   rC  r.   rh  
page_countrP  rD  rO  rH  rg  ri  s   ` ``       @@r$   rQ  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                    | j                  |      }|j                  d      }|j                  d      }| j                  |       | j                  |       | j	                  | j                  |j                  d      ||      |      S )NrF   ry   r5   rS  rU  s        r$   r  zPornHubPlaylistIE._real_extract1  sr    $$S)zz&!**T"Dd###DMM$**U2CT7$SU\]]r&   N)	rj   rk   rl   r   rn   r  r   rQ  r  r!  r&   r$   rb  rb    sd    NQ^QoQooJ:*
  : 9 @F"6^r&   rb  )&r   rJ  rn  r   r)   commonr   openloadr   compatr   
networkingr   networking.exceptionsr	   utilsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rr   r#  r.  r8  r4  r\  rb  r!  r&   r$   <module>ry     s        	 ! &    -   $]1M ]1@C CL
M 
.,O) ,O^;P!6 ;P|gH8 gHT : "6^- 6^r&   