U
    g6.                     @   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NewgroundsIEZ
newgroundsz]https?://(?:www\.)?newgrounds\.com/(?:audio/listen|portal/view)/(?P<id>\d+)(?:/format/flash)?z.https://www.newgrounds.com/audio/listen/549479Z fe6033d297591288fa1c1f780386f07aZ549479Zmp3zB7 - BusModeZBurn7i<0RZ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/1Z fbfb40e2dc765a7e830cb251d370d9811Zmp4z	Scrotum 1zBrian-BeatoniW8Z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/689400Z689400zZTV News Episode 8z	ZONE-SAMAiOҰXZ20170225z$md5:aff9b330ec2e78ed93b1ad6d017accc6z=re:^https://picon\.ngfiles\.com/689000/flash_689400_card\.pngZskip_downloadT)r    r"   paramsz-https://www.newgrounds.com/portal/view/297383Z 2c11f5fd8cb6b433a63c89ba3141436cZ297383zMetal Gear AwesomeZ	EgoraptoriLjCZ20060223z$md5:9246c181614e23754571995104da92e0   z=re:^https://picon\.ngfiles\.com/297000/flash_297383_card\.pngz:https://www.newgrounds.com/portal/view/297383/format/flashZ 5d05585a9a0caca059f5abfbd3865524Zswf)
r   r   r   r   r   r   r   r   r   r   z-https://www.newgrounds.com/portal/view/823109Z823109zRouge Futa Fleshlight FuckzbI made a fleshlight model and I wanted to use it in an animation. Based on a video by CDNaturally.ZDefaultUser12Z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| |||d	d
}t|ddthf }rt	d
|pdddd S )NzDownloading login pagez<form action="([^"]+)"zlogin endpointdefaultz
Logging inapplication/jsonXMLHttpRequestAcceptZRefererX-Requested-With)usernamepassword)headersdataerrors.z, zUnknown ErrorT)expected)_download_webpage
_LOGIN_URLr   _search_regex_download_jsonr   Z_hidden_inputsr   strr   join)selfr3   r4   Zlogin_webpageZ	login_urlresultr7    rA   ?/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/newgrounds.py_perform_login   s(    
   
	zNewgroundsIE._perform_loginc                    s  |  |}z| ||}W nD tk
r^ } z&t|jtrL|jjdkrL|    W 5 d }~X Y nX | jd|dd d}|rd }| 	||dddg}n| 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  q|s2| 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 urlr,   sourcer   )r    	format_idqualityz(https://www.newgrounds.com/portal/video/r.   r/   r0   )r5   authorsources.c                 3   s   | ]} |d V  qdS ))rE   rF   r    NrA   ).0r    rE   rF   rA   rB   	<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noneZvcodecz;itemprop="(?:uploadDate|datePublished)"\s+content="([^"]+)"r   z""duration"\s*:\s*["\']?(\d+)["\']?r   Z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_idr9   r   
isinstancecauser   statusZraise_login_requiredr;   Z_parse_jsonr<   r   r=   dictitemsr   extendr   Z_html_search_regexlenZ_check_formats_html_extract_titler   r   Z_og_search_thumbnailr   r
   Z_og_search_description
_AGE_LIMITgetr   )r?   r    media_idwebpageerrorZmedia_url_stringr   rQ   Z
json_videorH   Zvideo_type_descriptionrA   rK   rB   _real_extract   s    
   



       
     
     zNewgroundsIE._real_extractN)__name__
__module____qualname__Z_NETRC_MACHINE
_VALID_URLint_TESTSr[   r:   rC   r`   rA   rA   rA   rB   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/catsZcatsZCats)r   r   -   r    r"   Zplaylist_mincountz*https://www.newgrounds.com/collection/dogsZdogsZDogs   z1http://www.newgrounds.com/audio/search/title/catsT)r    Zonly_matchingc           
      C   s   |  |}| ||}| j|d d}| jd|d|d}g }td|D ]B\}}}t|d}	|	dkrhqF|| j	d| t
 |d qF| |||S )	Nr,   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/)ZieZvideo_id)rR   r9   rZ   r;   refindallr	   r\   append
url_resultr   ie_keyplaylist_result)
r?   r    Zplaylist_idr^   r   entriesr+   pathr]   Za_classrA   rA   rB   r`      s2    
   z"NewgroundsPlaylistIE._real_extractN)ra   rb   rc   IE_NAMErd   rf   r`   rA   rA   rA   rB   rg      s&   rg   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   Zburn7   ri   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 ]4}| jd
|ddd\}}| d| t |V  qDd S )Nr   z?page=zDownloading page z0application/json, text/javascript, */*; q = 0.01r/   )r1   r2   )Znoter5   rW   .zD<a[^>]+\bhref=["\'][^"\']+((?:portal/view|audio/listen)/(\d+))[^>]+>r    )r   r   )grouprl   )r<   r   r=   r;   rp   r   rq   )r?   
channel_idr    pageZ
posts_infopostrt   r]   rA   rA   rB   _fetch_page#  s"       
zNewgroundsUserIE._fetch_pagec                 C   s.   |  |}tt| j||| j}| ||S )N)rR   r   	functoolspartialr~   
_PAGE_SIZErr   )r?   r    r{   rs   rA   rA   rB   r`   1  s    
  zNewgroundsUserIE._real_extractN)	ra   rb   rc   ru   rd   rf   r   r~   r`   rA   rA   rA   rB   rv     s0      rv   )r   rm   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   Zutils.traversalr   r   rg   rv   rA   rA   rA   rB   <module>   s   8 D1