o
    i6.                     @   s   d dl Z d dlZddlmZ ddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZ ddlmZ G dd	 d	eZG d
d deZG dd deZdS )    N   )InfoExtractor   )	HTTPError)ExtractorErrorOnDemandPagedList
clean_htmlextract_attributesget_element_by_idint_or_noneparse_countparse_durationunified_timestampurl_or_noneurlencode_postdataurljoin)traverse_objc                   @   s   e Zd ZdZdZddddddd	d
dedddddddddddddedddd
dddddd d!d"ed#dd$d
d%d&id'd(d)d*dd+d,d-d.ed/d0d1d
dd2d3d*d4d+d+d,d.d-ed0d1d5
dd6d7dd8d9d:d;d<ed=d>d5
d?gZdd0dd=d@ZdAZdBdC Z	dDdE Z
dFS )GNewgroundsIE
newgroundsz]https?://(?:www\.)?newgrounds\.com/(?:audio/listen|portal/view)/(?P<id>\d+)(?:/format/flash)?z.https://www.newgrounds.com/audio/listen/549479 fe6033d297591288fa1c1f780386f07a549479mp3zB7 - BusModeBurn7i<0R20130911   z$md5:b8b3c2958875189f07d8e313462e8c4fr   z/re:^https://aicon\.ngfiles\.com/549/549479\.png)idexttitleuploader	timestampupload_dateduration
view_countdescription	age_limit	thumbnail)urlmd5	info_dictz(https://www.newgrounds.com/portal/view/1 fbfb40e2dc765a7e830cb251d370d9811mp4z	Scrotum 1zBrian-BeatoniW820000407zScrotum plays "catch."   z3re:^https://picon\.ngfiles\.com/0/flash_1_card\.png)
r   r   r   r   r   r    r"   r#   r$   r%   z,http://www.newgrounds.com/portal/view/689400689400zZTV News Episode 8z	ZONE-SAMAiOҰX20170225z$md5:aff9b330ec2e78ed93b1ad6d017accc6z=re:^https://picon\.ngfiles\.com/689000/flash_689400_card\.pngskip_downloadT)r&   r(   paramsz-https://www.newgrounds.com/portal/view/297383 2c11f5fd8cb6b433a63c89ba3141436c297383zMetal Gear Awesome	EgoraptoriLjC20060223z$md5:9246c181614e23754571995104da92e0   z=re:^https://picon\.ngfiles\.com/297000/flash_297383_card\.pngz:https://www.newgrounds.com/portal/view/297383/format/flash 5d05585a9a0caca059f5abfbd3865524swf)
r   r   r   r#   r   r    r   r"   r$   r%   z-https://www.newgrounds.com/portal/view/823109823109zRouge Futa Fleshlight FuckzbI made a fleshlight model and I wanted to use it in an animation. Based on a video by CDNaturally.DefaultUser1220211122ia   z=re:^https://picon\.ngfiles\.com/823000/flash_823109_card\.png)r&   r(   )etmaz#https://www.newgrounds.com/passportc              
   C   s   |  | jd d}t| j| jd|dd d}| j|d dd| jddti | |||d	d
}t|ddthf }rFt	d
|pBdddd S )NzDownloading login pagez<form action="([^"]+)"zlogin endpointdefaultz
Logging inapplication/jsonXMLHttpRequestAcceptRefererX-Requested-With)usernamepassword)headersdataerrors.z, zUnknown ErrorT)expected)_download_webpage
_LOGIN_URLr   _search_regex_download_jsonr   _hidden_inputsr   strr   join)selfrI   rJ   login_webpage	login_urlresultrM    rZ   O/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/newgrounds.py_perform_login   s&   

	zNewgroundsIE._perform_loginc                    s  |  |}z| ||}W n ty* } zt|jtr%|jjdkr%|    d }~ww | jd|dd d}|rDd }| 	||dddg}nD| j
d| |d	|d
dd}g }t|dthf}t|dtjhdfD ] \ }	t d d | fddt|	ddthfD  qg|s| jd|ddd}t|dkrt| jd|dd d|d d< | jd|dd d}
|
dkrd|d d< | || || ||t| jd |d!d dt| jd"|d#d d|| |ttd$|p| || j| jd%|d&d'dt| jd(|d)d dd*
S )+Ni  z*embedController\(\[{"url"\s*:\s*("[^"]+"),z	media urlrA   sourcer   )r&   	format_idqualityz(https://www.newgrounds.com/portal/video/rC   rD   rE   )rK   authorsources.c                 3   s    | ]	} |d V  qdS ))r^   r_   r&   NrZ   ).0r&   r^   r_   rZ   r[   	<genexpr>   s    z-NewgroundsIE._real_extract.<locals>.<genexpr>src)z:(?s)<h4[^>]*>(.+?)</h4>.*?<em>\s*(?:Author|Artist)\s*</em>z#(?:Author|Writer)\s*<a[^>]+>([^<]+)r   F)fatalz%"filesize"\s*:\s*["\']?([\d]+)["\']?,filesizer   z*"description"\s*:\s*["\']?([^"\']+)["\']?,z
media typez
Audio Filenonevcodecz;itemprop="(?:uploadDate|datePublished)"\s+content="([^"]+)"r   z""duration"\s*:\s*["\']?(\d+)["\']?r!   author_commentsz$<h2\s+class=["\']rated-([etma])["\']r$   r=   z:(?s)<dt>\s*(?:Views|Listens)\s*</dt>\s*<dd>([\d\.,]+)</dd>z
view count)
r   r   r   r   r!   formatsr%   r#   r$   r"   )	_match_idrO   r   
isinstancecauser   statusraise_login_requiredrQ   _parse_jsonrR   r   rT   dictitemsr   extendr   _html_search_regexlen_check_formats_html_extract_titler   r   _og_search_thumbnailr   r
   _og_search_description
_AGE_LIMITgetr   )rV   r&   media_idwebpageerrormedia_url_stringr   rl   
json_videora   video_type_descriptionrZ   rd   r[   _real_extract   s   





zNewgroundsIE._real_extractN)__name__
__module____qualname___NETRC_MACHINE
_VALID_URLint_TESTSr|   rP   r\   r   rZ   rZ   rZ   r[   r      s    _r   c                   @   sH   e Zd ZdZdZddddddd	d
dddddddgZdd ZdS )NewgroundsPlaylistIEzNewgrounds:playlistzUhttps?://(?:www\.)?newgrounds\.com/(?:collection|[^/]+/search/[^/]+)/(?P<id>[^/?#&]+)z*https://www.newgrounds.com/collection/catscatsCats)r   r   -   r&   r(   playlist_mincountz*https://www.newgrounds.com/collection/dogsdogsDogs   z1http://www.newgrounds.com/audio/search/title/catsT)r&   only_matchingc           
      C   s   |  |}| ||}| j|d d}| jd|d|d}g }td|D ]!\}}}t|d}	|	dvr4q#|| j	d| t
 |d q#| |||S )	NrA   z)(?s)<div[^>]+\bclass=["\']column wide(.+)zwide columnzF(<a[^>]+\bhref=["\'][^"\']+((?:portal/view|audio/listen)/(\d+))[^>]+>)class)zitem-portalsubmissionzitem-audiosubmissionhttps://www.newgrounds.com/)ievideo_id)rm   rO   ry   rQ   refindallr	   r}   append
url_resultr   ie_keyplaylist_result)
rV   r&   playlist_idr   r   entriesr@   pathr~   a_classrZ   rZ   r[   r      s,   
z"NewgroundsPlaylistIE._real_extractN)r   r   r   IE_NAMEr   r   r   rZ   rZ   rZ   r[   r      s(    r   c                   @   sV   e Zd ZdZdZdddidddddid	dd
ddiddgZdZdd Zdd ZdS )NewgroundsUserIEzNewgrounds:userzEhttps?://(?P<id>[^\.]+)\.newgrounds\.com/(?:movies|audio)/?(?:[#?]|$)z"https://burn7.newgrounds.com/audior   burn7   r   z#https://burn7.newgrounds.com/moviesr   z*https://brian-beaton.newgrounds.com/movieszbrian-beaton
      c                 c   s    |d7 }| j | d| |d| dddd}t|dd	d	thfD ]}| jd
|ddd\}}| d| t |V  q#d S )Nr   z?page=zDownloading page z0application/json, text/javascript, */*; q = 0.01rD   )rF   rH   )noterK   rt   .zD<a[^>]+\bhref=["\'][^"\']+((?:portal/view|audio/listen)/(\d+))[^>]+>r&   )r   r   )groupr   )rR   r   rT   rQ   r   r   r   )rV   
channel_idr&   page
posts_infopostr   r~   rZ   rZ   r[   _fetch_page#  s    
zNewgroundsUserIE._fetch_pagec                 C   s.   |  |}tt| j||| j}| ||S )N)rm   r   	functoolspartialr   
_PAGE_SIZEr   )rV   r&   r   r   rZ   rZ   r[   r   1  s   
zNewgroundsUserIE._real_extractN)	r   r   r   r   r   r   r   r   r   rZ   rZ   rZ   r[   r     s,    r   )r   r   commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   utils.traversalr   r   r   r   rZ   rZ   rZ   r[   <module>   s    8 D1