
    VGhW                        d dl Z d dlZddlmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZ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   )ExtractorError
clean_htmlextract_attributesget_element_by_classget_element_by_idget_elements_html_by_classint_or_nonemerge_dictsparse_countparse_qstraverse_objunified_strdateurl_or_noneurljoinc                       e Zd ZdZdgZddddddd	d
dddeeeeddddddddddd
ddeeeeddddidddddd ddd!ddd"d#dg d$d%dd&d'g d(d)d*ed+d,gZd- Zy.)/	YouPornIEzehttps?://(?:www\.)?youporn\.com/(?:watch|embed)/(?P<id>\d+)(?:/(?P<display_id>[^/?#&]+))?/?(?:[#?]|$)zN<iframe[^>]+\bsrc=["\'](?P<url>(?:https?:)?//(?:www\.)?youporn\.com/embed/\d+)zJhttp://www.youporn.com/watch/505835/sex-ed-is-it-safe-to-masturbate-daily/ 3744d24c50438cf5b6f6d59feb5055c2505835z%sex-ed-is-it-safe-to-masturbate-dailymp4z'Sex Ed: Is It Safe To Masturbate Daily?zTLove & Sex Answers: http://bit.ly/DanAndJenn -- Is It Unhealthy To Masturbate Daily?zre:^https?://.*\.jpg$   zAsk Dan And Jennifer20101217   )id
display_idexttitledescription	thumbnaildurationuploaderupload_dateaverage_rating
view_count
categoriestags	age_limitzThis video has been deactivated)urlmd5	info_dictskipz}http://www.youporn.com/watch/561726/big-tits-awesome-brunette-on-amazing-webcam-show/?from=related3&al=2&from_id=561726&pos=4561726z0big-tits-awesome-brunette-on-amazing-webcam-showz0Big Tits Awesome Brunette On amazing webcam showzNhttp://sweetlivegirls.com Big Tits Awesome Brunette On amazing webcam show.mp4Unknown20110418)r   r   r   r   r    r!   r#   r$   r%   r&   r'   r(   r)   skip_downloadT404)r*   r,   paramsr-   zKhttps://www.youporn.com/embed/505835/sex-ed-is-it-safe-to-masturbate-daily/)r*   only_matchingz#http://www.youporn.com/watch/505835z8https://www.youporn.com/watch/13922959/femdom-principal/z>https://www.youporn.com/watch/16290308/tinderspecial-trailer1/16290308ztinderspecial-trailer1g     r@20201123Erstieszre:https://.+\.jpgiݻ_zTinder In Real Life)r   r)   r'   r   r"   r   r$   r#   r(   r!   	timestampr   r&   )r*   r,   c                      j                  |      j                  dd      \  } j                  ddd        j                  d        j	                  ddd 	      }|sVt        j                  d
t        t        d            xs d      d   }t        |r j                   d| d      dd       j                  dd      }|d   } fd}g }t         ||d      d dfd      D ]'  }	|j                   j                  |	ddd             )  ||d      D ]  }
t        |
ddt        hfd      }t        |
j!                  d            }t        j"                  d |
d         }|rP|st%        |j                  d!            }t%        |j                  d"            }|j'                  | d#| d$|d%       ||d!<   |j)                  |         j+                  d&d'd 	      xs)  j-                  d 	      xs  j/                  d'd(      } j+                  d)d*d 	      xs  j1                  d 	      } j	                  d+d,dd,-      }t        |d.t        hf      }|t         j/                  d/d.d(            } j+                  d0d1d(      }t3         j+                  d2d3d(            } j5                        }d } j	                  d4d5d 	      }|r#t7        t9        |      j!                  d6            }t7         j	                  d7d8d 	            } fd9} |d:d;      } |d<d=      } j;                  d>d?      }|j=                  d@d        t?        ||||||||||||||dA      }|j!                  d*      }|r'|jA                  dB|j!                  d'       dC      r|d*= |S )DNr   r   z.youporn.comage_verified1zhttps://www.youporn.com/watch/zC(<div\s[^>]*\bid\s*=\s*('|")?watch-container(?(2)\2|(?!-)\b)[^>]*>)watchabilitydefaultz\s{2}mainContent r   z says: zVideo unavailableT)expectedz\bplayervars\s*:zplayer varsmediaDefinitionsc           	          t        | fddt        ht        f      }|sg S t        j                  |d dd      fd      S )Nc                     |d   k(  S )Nformat _vstream_types     a/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/youporn.py<lambda>zBYouPornIE._real_extract.<locals>.get_format_data.<locals>.<lambda>q   s    ({8R     videoUrlzDownloading z
 info JSONFfatalc                 4    |d   k(  xr t        |d         S )NrE   rN   )r   rG   s     rK   rL   zBYouPornIE._real_extract.<locals>.get_format_data.<locals>.<lambda>v   s    Qx[K7VK*<V rM   )r   r   any_download_json)datarJ   info_urlselfvideo_ids    ` rK   get_format_dataz0YouPornIE._real_extract.<locals>.get_format_datap   s[    #D+RT^al`mor*stH	##Hh,{mS]8^fk#lVX XrM   hlsc                 *    t        |d   t               S )NdefaultQuality)
isinstancebool)rH   rI   s     rK   rL   z)YouPornIE._real_extract.<locals>.<lambda>{   s    A.>,?!FF rM   rN   ).rN   r   F)rP   m3u8_id	videoSize)r*   filesizequalityz0(?P<height>\d{3,4})[pP]_(?P<bitrate>\d+)[kK]_\d+heightbitratezp-k)	format_idtbrz8(?s)<div[^>]+class=["\']watchVideoTitle[^>]+>(.+?)</div>r   rO   z8(?s)<div[^>]+\bid=["\']description["\'][^>]*>(.+?)</div>r    z9(?:imageurl\s*=|poster\s*:)\s*(["\'])(?P<thumbnail>.+?)\1r!   )rP   groupr"   zvideo:durationz:(?s)<div[^>]+class=["\']submitByLink["\'][^>]*>(.+?)</div>r#   )zUPLOADED:\s*<span>([^<]+)z Date\s+[Aa]dded:\s*<span>([^<]+)z@(?s)<div[^>]+class=["']videoInfo(?:Date|Time)\b[^>]*>(.+?)</div>zC(?s)<label\b[^>]*>Uploaded[^<]*</label>\s*<span\b[^>]*>(.+?)</span>zupload datez:(<div [^>]*\bdata-value\s*=[^>]+>)\s*<label>Views:</label>viewsz
data-valuez>All [Cc]omments? \(([\d,.]+)\)zcomment countc                 b    j                  | |d       }|sg S t        j                  d|      S )Nr=   z<a[^>]+href=[^>]+>([^<]+))_search_regexrefindall)regexr   tag_boxrV   webpages      rK   extract_tag_boxz0YouPornIE._real_extract.<locals>.extract_tag_box   s6    (((MG	:::GDDrM   z%(?s)Categories:.*?</[^>]+>(.+?)</div>r'   zL(?s)Tags:.*?</div>\s*<div[^>]+class=["\']tagBoxContent["\'][^>]*>(.+?)</div>r(   VideoObject)expected_typerP   r*   )r   r   r   r    r!   r"   r#   r$   r&   comment_countr'   r(   r)   formatszWatch z online)!_match_valid_urlrg   _set_cookie_download_webpagerj   rk   splitr   r
   r   IE_NAME_search_jsonr   extend_extract_m3u8_formatsr   getsearchintupdateappend_html_search_regex_og_search_title_html_search_meta_og_search_descriptionr   _rta_searchr   r   _search_json_ldpopr   
startswith) rV   r*   r   	watchablemsgplayer_varsdefinitionsrX   rt   hls_url
definitionfrb   mobjrc   r   r    r!   r"   r#   r$   r)   r&   rh   rs   rp   r'   r(   rT   resultrW   ro   s    `                             @@rK   _real_extractzYouPornIE._real_extract`   s   #44S9??lS*=((+I()TV^_&&V^T ' 3	 ((8Z0A-QX0Y%Z%`^`abcdC 144<<.u-X\^ ^:MX\^ ^ ''(;WmU]^!"45	X #OK$GF
JTUfh 	mGNN455gxV[ej5kl	m *+u= 	JZ!(;-8* A !	!:;F 99PR\]gRhiD H!56Fdjj34$*82gYa!8"  !AhKNN1+	. ''GWd ( , */3/D/DT 0E 0#* '+&<&<WD '= '* 	 --G] .  # "88T 9 # 	
 &&H[[ ' B	  j;--HI"4#9#9 ':U $: $D EH **IZu + . &d&=&=U ]% '> '1 2 $$W-	
""IWd # , $%7%>%B%B<%PQJ#D$6$6._d %7 %4 5	E %4lD
[ ##GX]Z_#`T$&"  &$*$"$
 $ jj/;11F6::g;N:Ow2WX}%rM   N)	__name__
__module____qualname__
_VALID_URL_EMBED_REGEXr   list_TESTSr   rF   rM   rK   r   r      s   yJefL[1A>q1.%!
  2', OLGk1!%!
  T
 +. ] 5 J P2%!.#*
gDFLCrM   r   c                   2    e Zd Zd Zed        ZddZddZy)YouPornListBaseIEc           
      ^    t        || j                  dt        d|      xs dddd             S )Nz5<a [^>]*?\bhref\s*=\s*("|')(?P<url>(?:(?!\1)[^>])+)\1nextr@   z	next pager*   rg   r>   )r   rj   r
   )rV   r*   pl_idhtmls       rK   _get_next_urlzYouPornListBaseIE._get_next_url   s<    sD..Hfd+1r; / ' ( 	(rM   c                 0    t        j                  dd|      S )N[_-] )rk   sub)cls
title_slugs     rK   _get_title_from_slugz&YouPornListBaseIE._get_title_from_slug   s    vvgsJ//rM   Nc           
   #   `  K   |xs d}t        j                  |      D ]  }|s| j                  ||d| ||k(        }|s y t        d|      D ]6  }t	        |t
        hdt        |      hf      x}s$| j                  |       8 | y | j                  |||      }	|	r|	|k(  r y |	}d } y w)Nr   zDownloading page )noterP   zvideo-titlehref)		itertoolscountrw   r   r   r   r   
url_resultr   )
rV   r*   r   r   page_numstartpageelement	video_urlnext_urls
             rK   _entrieszYouPornListBaseIE._entries   s     AOOE* 	D--'8%?tu} . V5mTJ 5 ,W8J7KVV]^aVbUc6d ee9e//)445 #))#ud;Hx3CD!	s   A/B.2<B.c                    | j                  |      j                         fddD        \  }}}t        |      j                         D ci c]  \  }}|s	||d    }}}|xs d}	| j	                  |	      }
|r|j                          d|
 }
|	j                         g}	||
dz  }
n-|
 dt        j                  dd|       }
|	j                  |       |r_t        t        d	j                  t        |j                                           }|
d
dj                  |       dz  }
|	j                  |       dj                  |	      }| j                  | j!                  |||t#        |j%                  d                  ||
      S c c}}w )Nc              3   @   K   | ]  }j                  |        y wN)r}   ).0rd   m_dicts     rK   	<genexpr>z2YouPornListBaseIE._real_extract.<locals>.<genexpr>  s     !PA&**Q-!Ps   )r   typesortYouPornr   z videosz videos by r   =z (,)/r   )r   r   )playlist_idplaylist_title)ru   	groupdictr   itemsr   
capitalizelowerrk   r   r   r   mapjoinsortedr{   playlist_resultr   r   r}   )rV   r*   r   r   	page_typer   rd   rI   qsbase_idr   filtersr   s               @rK   r   zYouPornListBaseIE._real_extract  sw   &&s+557!P9O!Py$#+C=#6#6#8>41aAa2h>>$9))'2 ++-.aw7E==?#<YEg[d)C(DEENN4 3sxx
);<=Gr#((7+,A..ENN7#!##MM#u4+bffVn:UMVe $ 5 	5% ?s   
FFNNr   )r   r   r   r   classmethodr   r   r   rF   rM   rK   r   r      s%    ( 0 0(5rM   r   c                   N    e Zd ZdZdZddddddd	d
dddddd	dddddddgZy)YouPornCategoryIEz8YouPorn category, with sorting, filtering and paginationz(?x)
        https?://(?:www\.)?youporn\.com/
        (?P<type>category)/(?P<id>[^/?#&]+)
        (?:/(?P<sort>popular|views|rating|time|duration))?/?(?:[#?]|$)
    Full list with paginationz<https://www.youporn.com/category/popular-with-women/popular/zpopular-with-women/popularz-Category popular with women videos by popularr   r   '   r   r*   r,   playlist_mincount/Filtered paginated list with single page resultzLhttps://www.youporn.com/category/popular-with-women/duration/?min_minutes=10z*popular-with-women/duration/min_minutes=10z?Category popular with women videos by duration (min_minutes=10)r   Single page of full listzBhttps://www.youporn.com/category/popular-with-women/popular?page=1z!popular-with-women/popular/page=1z6Category popular with women videos by popular (page=1)$   r   r*   r,   playlist_countN)r   r   r   IE_DESCr   r   rF   rM   rK   r   r     sm    HGJ ,M.D
   B]>V
 	 +S5M
 #FrM   r   c                   L    e Zd ZdZdZddddddd	d
ddddddgZed        Zy)YouPornChannelIEz,YouPorn channel, with sorting and paginationz(?x)
        https?://(?:www\.)?youporn\.com/
        (?P<type>channel)/(?P<id>[^/?#&]+)
        (?:/(?P<sort>rating|views|duration))?/?(?:[#?]|$)
    r   z(https://www.youporn.com/channel/x-feeds/zx-feedszChannel X-Feeds videosr   %   r   *Single page of full list (no filters here)z7https://www.youporn.com/channel/x-feeds/duration?page=1zx-feeds/duration/page=1z+Channel X-Feeds videos by duration (page=1)   r   c                 L    t        j                  dd|       j                         S NrH   r   rk   r   r   r   s    rK   r   z%YouPornChannelIE._get_title_from_slug[      vvdC,2244rM   Nr   r   r   r   r   r   staticmethodr   rF   rM   rK   r   r   B  sc    <GJ ,9-
   =H+B
 F$ 5 5rM   r   c                   R     e Zd ZdZdZddddddd	d
ddddddddgZ fdZ xZS )YouPornCollectionIEz?YouPorn collection (user playlist), with sorting and paginationz(?x)
        https?://(?:www\.)?youporn\.com/
        (?P<type>collection)s/videos/(?P<id>\d+)
        (?:/(?P<sort>rating|views|time|duration))?/?(?:[#?]|$)
    r   z4https://www.youporn.com/collections/videos/33044251/33044251zCollection Sexy Lips videoszph-littlewillyb)r   r   r#   2   r   r   z?https://www.youporn.com/collections/videos/33044251/time?page=1z33044251/time/page=1z,Collection Sexy Lips videos by time (page=1)   r   c           
      z   | j                  |      }| j                  ||      }t        |   ||      }t	        j
                  ddt        t        d|            xs d      }| j                  d|ddd	
      \  }}|r<|j                  |d   j                  |d   j                  d      d   |      |d       |S )Nr   z\s+r   zcollection-infosr@   ze^\s*Collection: (?P<title>.+?) \d+ VIDEOS \d+ VIEWS \d+ days LAST UPDATED From: (?P<uploader>[\w_-]+)ztitle/uploader)r   r#   r   r   r   r   r   r   )	_match_idrw   superr   rk   r   r   r	   rj   r   replacerx   )	rV   r*   r   r   playlistinfosr   r#   	__class__s	           rK   r   z!YouPornCollectionIE._real_extract{  s    s#%%c517(4(8vsJ/C0& %' %-*,.,,t#+@, - Xx OO!'*228D>3G3G3LQ3OQVW$ 
 rM   r   r   r   r   r   r   r   __classcell__r   s   @rK   r   r   `  s`    OGJ ,E2)

  	 =P(C)

 	F( rM   r   c                   l     e Zd ZdZdZddddddd	gd
ddddddd	gd
ddddddd	gd
gZ fdZ xZS )YouPornTagIEz>YouPorn tag (porntags), with sorting, filtering and paginationz(?x)
        https?://(?:www\.)?youporn\.com/
        porn(?P<type>tag)s/(?P<id>[^/?#&]+)
        (?:/(?P<sort>views|rating|time|duration))?/?(?:[#?]|$)
    r   z)https://www.youporn.com/porntags/austrianaustrianzTag austrian videosr   !   z*YouPorn tag pages are not correctly cached)r   r*   r,   r   expected_warningsr   zBhttps://www.youporn.com/porntags/austrian/duration/?min_minutes=10z austrian/duration/min_minutes=10z0Tag austrian videos by duration (min_minutes=10)
   r   z1https://www.youporn.com/porntags/austrian/?page=1zaustrian/page=1zTag austrian videos (page=1)    c                 H    | j                  dd       t        | 	  |      S )NzMYouPorn tag pages are not correctly cached and often return incorrect resultsT)	only_once)report_warningr   r   )rV   r*   r   s     rK   r   zYouPornTagIE._real_extract  s0    -8< 	 	> w$S))rM   r   r   s   @rK   r   r     s    NGJ ,:*
  JK	 BS4G
  
 KK +B#3
  JK
- FD* *rM   r   c                   b     e Zd ZdZdZddddddd	d
ddddddddgZed        Z fdZ xZ	S )YouPornStarIEz:YouPorn Pornstar, with description, sorting and paginationz(?x)
        https?://(?:www\.)?youporn\.com/
        (?P<type>pornstar)/(?P<id>[^/?#&]+)
        (?:/(?P<sort>rating|views|duration))?/?(?:[#?]|$)
    r   z(https://www.youporn.com/pornstar/daynia/dayniazPornstar Daynia videosz>re:Daynia Rank \d+ Videos \d+ Views [\d,.]+ .+ Subscribers \d+)r   r   r    (   r   r   z/https://www.youporn.com/pornstar/daynia/?page=1zdaynia/page=1zPornstar Daynia videos (page=1)z
re:.{180,}   r   c                 L    t        j                  dd|       j                         S r   r   r   s    rK   r   z"YouPornStarIE._get_title_from_slug  r   rM   c                    | j                  |      }| j                  ||      }t        |   ||      }d}| j	                  ||ddd      x}rZt        j                  ddt        j                  d	dt        t        j                  d
d|                        j                  dd      }i |d|j                         xs d iS )Nr   z(?x)
            <div [^>]*\bclass\s*=\s*('|")(?:[\w$-]+\s+|\s)*?pornstar-info-wrapper(?:\s+[\w$-]+|\s)*\1[^>]*>
            (?P<info>[\s\S]+?)(?:</div>\s*){6,}
        r   infor@   r   z(?:\s*nl=nl)+\s*r   z(?u)\s+
znl=nlz
ribe Subscr    )
r   rw   r   r   rj   rk   r   r   r   strip)rV   r*   r   r   r   INFO_ELEMENT_REr   r   s          rK   r   zYouPornStarIE._real_extract  s    s#%%c517(4(8
 &&gV]_&``5`FF#Sz3
266$3O(PQSSZSZ[gikSl 

5;;=0D
 	
rM   )
r   r   r   r   r   r   r   r   r   r   r   s   @rK   r	  r	    st    JGJ ,9-\

  	 =@!6'

 	F( 5 5
 
rM   r	  c                       e Zd ZdZdZ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d$        Zy%)&YouPornVideosIEzHYouPorn video (browse) playlists, with sorting, filtering and paginationz(?x)
        https?://(?:www\.)?youporn\.com/
            (?:(?P<id>browse)/)?
            (?P<sort>(?(id)
                (?:duration|rating|time|views)|
                (?:most_(?:favou?rit|view)ed|recommended|top_rated)?))
            (?:[/#?]|$)
    z-Full list with pagination (too long for test)zhttps://www.youporn.com/youpornzYouPorn videosr   T)r   r*   r,   r4   z#https://www.youporn.com/recommendedzyouporn/recommendedzYouPorn videos by recommendedz!https://www.youporn.com/top_ratedzyouporn/top_ratedzYouPorn videos by top ratedz#https://www.youporn.com/browse/timezbrowse/timezYouPorn videos by timer   z<https://www.youporn.com/most_favorited/?res=VR&max_minutes=2z+youporn/most_favorited/max_minutes=2/res=VRz7YouPorn videos by most favorited (max_minutes=2,res=VR)r  r   z*Filtered paginated list with several pagesz<https://www.youporn.com/most_favorited/?res=VR&max_minutes=5z+youporn/most_favorited/max_minutes=5/res=VRz7YouPorn videos by most favorited (max_minutes=5,res=VR)-   r   z*https://www.youporn.com/browse/time?page=1zbrowse/time/page=1zYouPorn videos by time (page=1)r   r   c                     | dk(  rdS | S )Nbrowser   rF   r   s    rK   r   z$YouPornVideosIE._get_title_from_slug5  s    &(2yB
BrM   Nr   rF   rM   rK   r  r    s    XGJ @)%
  @4'4
  @2%2
  @4-
  BM?N
  	 =M?N
   +;&6
 c9Fv C CrM   r  )r   rk   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r	  r  rF   rM   rK   <module>r     s     	 !   $L L^65 65r )  F5( 5<*+ *Z-*$ -*`0
% 0
fGC' GCrM   