U
    gr?                     @   s`   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 G dd deZdS )    N   )InfoExtractor   )
ExtractorErrorfloat_or_noneint_or_noneparse_qstraverse_objtry_getunescapeHTMLupdate_url_queryurl_or_noneurlencode_postdatac                   @   s  e Zd ZdZdZddddddd	d
dddeeedddddidddddddddddddeeeddddd d!dd"d#dd$d%d&d'd(eeed)d*dddidd+d,d-d.d/d0d1d2d3dd4d5d6dd7d8d9eeedd:d;dd<d=d>dd?d@dAdBdCdDdEddeeedFddGdHdIddJdKdLdMd9dNdOdeeedPdQdRdSdTddUdVdWdXdYdZd[deeed\d]id^ddidd_d`ddadbdcdddedfdgdeeed\d]id^dddhddiddjdkddjdlddjdmddjdnddjdoddjdpddjgZdqdr Zdsdt Zdudv Z	dwS )xRedditIEZredditzbhttps?://(?:\w+\.)?reddit(?:media)?\.com/(?P<slug>(?:(?:r|user)/[^/]+/)?comments/(?P<id>[^/?#&]+))zHhttps://www.reddit.com/r/videos/comments/6rrwyj/that_small_heart_attack/Zzv89llsvexdzmp4Z6rrwyjzThat small heart attack.zre:^https?://.*\.(?:jpg|png)zcount:4iЅYZ20170805ZAntw87   r   Zvideos)idext
display_idtitle	thumbnail
thumbnails	timestampupload_dateuploaderduration
like_countdislike_countcomment_count	age_limit
channel_idskip_downloadT)url	info_dictparamsz\https://www.reddit.com/r/aww/comments/90bu6w/heat_index_was_110_degrees_so_we_offered_him_a/Z 8b5902cfda3006bf90faea7adf765a49Zgyh95hiqc0b11Z90bu6wz_Heat index was 110 degrees so we offered him a cold drink. He went for a full body soak insteadzcount:7i>Q[Z20180720ZFootLoosePickleJuice   Zaww)r"   md5r#   zehttps://www.reddit.com/user/creepyt0es/comments/nip71r/i_plan_to_make_more_stickers_and_prints_check/Zzasobba6wp071Znip71rzpI plan to make more stickers and prints! Check them out on my Etsy! Or get them through my Patreon. Links below.zcount:5i%Q`Z20210522Z
creepyt0es      Zu_creepyt0eszchttps://www.reddit.com/r/KamenRider/comments/wzqkxp/finale_kamen_rider_revice_episode_50_family_to/r   Zwzqkxpz$md5:72d3d19402aa11eff5bd32fc96369b37)r   r   )r"   Zplaylist_countr#   zAhttps://www.reddit.com/r/dumbfuckers_club/comments/zjjw82/cringe/Z 746180895c7b75a9d6b05341f507699aZa1oneun6pa5a1Zzjjw82ZCringezOtaku-senpai69420Z20221212ic   Zdumbfuckers_club)r   r   r   r   r   r   r   r   r   r   r   r   r   r    z'https://www.reddit.com/comments/124pp33Z 15eec9d828adcef4468b741a7e45a395Zantsenjc2jqa1Z124pp33z"Harmless prank of some old friendsZDudezilaZContagiousLaughter   Z20230328i"d)r   r   r   r   r   r    r   r   r   r   r   r   r   r   z@https://old.reddit.com/r/GenZedong/comments/12fujy3/based_hasan/Z 3156ea69e3c1f1b6259683c5abd36e71Z8bwtclfggpsa1Z12fujy3zBased Hasan?ZKingNigelXLIIZ	GenZedongZ20230408i´1d)r   r   r   r   r   r    r   r   r   r   r   r   r   z=Requires account that has opted-in to the GenZedong subreddit)r"   r&   r#   skipz]https://www.reddit.com/r/Unexpected/comments/1cl9h0u/the_insurance_claim_will_be_interesting/Za2mdj5d57qyc1Z1cl9h0uz'The insurance claim will be interestingZdarrenpauliZ
Unexpected5   Z20240506inO8fenz
mincount:1)r   r   r   r   r   r    r   r   r   r   r   r   r   	subtitleszbhttps://www.reddit.com/r/soccer/comments/1cxwzso/tottenham_1_0_newcastle_united_james_maddison_31/Zxbmj4t3igy1d1Z1cxwzsoz7Tottenham [1] - 0 Newcastle United - James Maddison 31'Z
WoodstoviaZsoccer   Z20240522i&Mf)r!   Zwritesubtitlesz/https://www.reddit.com/r/videos/comments/6rrwyj)r"   Zonly_matchingzAhttps://www.reddit.com/r/MadeMeSmile/comments/6t7wi5/wait_for_it/zAhttps://old.reddit.com/r/MadeMeSmile/comments/6t7wi5/wait_for_it/z]https://www.reddit.com/r/videos/comments/6t7sg9/comedians_hilarious_joke_about_the_guam_flag/z^https://www.reddit.com/r/videos/comments/6t75wq/southern_man_tries_to_speak_without_an_accent/z`https://nm.reddit.com/r/Cricket/comments/8idvby/lousy_cameraman_finds_himself_in_cairns_line_of/zlhttps://www.redditmedia.com/r/serbia/comments/pu9wbx/ako_vu%C4%8Di%C4%87_izgubi_izbore_ja_%C4%87u_da_crknem/c              	   C   s   |  dd dd }|r"tddd| j d| d td||d	d
ddd}dt|d}|rrtd| ddnt|d	ddthfstdd S )Nz6https://www.reddit.com/api/requires_captcha/login.jsonzChecking login requirementrequiredz(Reddit is requiring captcha before loginTexpectedz!https://www.reddit.com/api/login/z
login-mainjson)opuserpasswdZapi_typez
Logging inzLogin request failed)dataZnoteZerrnotez; )r3   errors.r   z!Unable to login, Reddit API says r7   cookiez'Unable to login, no cookie was returned)_download_jsonr   r   joinr	   str)selfusernamepasswordZcaptchaloginr8    rA   ;/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/reddit.py_perform_login   s4        zRedditIE._perform_loginc                 C   s.   d| d}| j ||ddr*dd|igiS d S )Nhttps://v.redd.it/z/wh_ben_en.vttr.   )itemr-   r"   )Z_is_valid_url)r=   video_idZcaption_urlrA   rA   rB   _get_subtitles   s    zRedditIE._get_subtitlesc                    sn  |  |dd\}}z| jd| d|dd}W n< tk
rn } zt|jtjr\| d  W 5 d }~X Y nX t	|ddkr|
d	}|d
kr| d n"|dkr| d ntd| |d d d d d }|d }|
d}|dkrd}	n|dkrd}	nd }	g fdd}
t|dd p,g D ]N}t|tsBq.|
|
d |
d}t|tr.|D ]}|
| qjq.|
dt|
d|
d|
d t|
d!t|
d"t|
d#|	d$	}tj|}d%|jkrd&| d&|jkrg }t	|d'td(D ]}|
dr|
d)d*kr2qg }|
d+rd|| jt|d+ |d,d-dd. |
d/r|| jt|d/ |d0dd1 |r||d ||d2| q|r| |||
dS td3dd4t	|d5dd6  r( fd7d8d9D }|}| jd: d; d<|d=}|d p.d>| d?}|d@ pDd>| dA}t	t|dBdBddCd hfi}t||}t d; t 
dDt 
dEt 
dFdGdHd,dIdJdK	g}| j||d,d-dd.\}}|| | j||d0dd1\}}|| | j ||dL |||||p| !|t 
dMdNS |jdOkr^| j"dPd|dQ ||j#d&d@ |dRS ||dS|dTS )UNslugr   zhttps://www.reddit.com/z/.jsoni  )Zexpected_statusz"Account authentication is requirederrorreasonZquarantinedz?Quarantined subreddit; an account that has opted in is requiredprivatez@Private subreddit; an account that has been approved is requiredz(HTTP Error 403 Forbidden; reason given: r   r7   childrenr"   over_18Tr(   Fc                    sX   t | tsd S t| d}|s$d S  t|t| dt| dddid d S )Nr"   widthheightAcceptz*/*)r"   rN   rO   Zhttp_headers)
isinstancedictr   getappendr   r   )srcZthumbnail_url)r   rA   rB   add_thumbnail  s    
z-RedditIE._real_extract.<locals>.add_thumbnailc                 S   s   | d d S )NpreviewZimagesrA   xrA   rA   rB   <lambda>,      z(RedditIE._real_extract.<locals>.<lambda>sourceresolutionsr   Zcreated_utcauthorZ	subredditZupsZdownsZnum_comments)	r   r   r   r   r    r   r   r   r   z
reddit.com/)Zmedia_metadata.)Zexpected_typeeZRedditVideoZhlsUrlr   Zhls)Zm3u8_idfatalZdashUrlZdash)Zmpd_idra   )r   r   formatszNo media foundr1   ))N)Zcrosspost_parent_list.)Zsecure_mediamediareddit_video)get_allc                    s   g | ] t  fd dqS )c                    s   t |   S )N)r   rX   yrA   rB   rZ   `  r[   z3RedditIE._real_extract.<locals>.<listcomp>.<lambda>)r
   ).0)rd   rf   rB   
<listcomp>_  s   z*RedditIE._real_extract.<locals>.<listcomp>)Zdash_urlZhls_urlz%https?://v\.redd\.it/(?P<id>[^/?#&]+)Zfallback_urlrF   )defaultrD   z/DASHPlaylist.mpdr   z/HLSPlaylist.m3u8fc                 S   s   | rd | dgS dS )N,ZsubsAllz
hd,subsAll)r;   rX   rA   rA   rB   rZ   m  r[   rO   rN   Zbitrate_kbpsnoneZh264fallbackzDASH video, mp4_dash)	r"   rO   rN   ZtbrZacodecZvcodecr   Z	format_idZformat_note)targetr   )r   r   rb   r.   r   z	v.redd.itzThis video is processing)r2   rF   )r   r   Zurl_transparent)r   _typer"   )$Z_match_valid_urlgroupr:   r   rQ   causer3   JSONDecodeErrorZraise_login_requiredr	   rS   r
   rR   listr   r   urllibparseurlparsenetlocpathextendZ_extract_m3u8_formatsr   Z_extract_mpd_formatsrT   Zplaylist_resultZ_search_regexr   r   Z#_extract_m3u8_formats_and_subtitlesZ"_extract_mpd_formats_and_subtitlesZ_merge_subtitlesZextract_subtitlesZraise_no_formatssplit)r=   r"   rH   rF   r7   r`   rJ   Z	video_urlrM   r   rV   imager]   
resolutioninfo
parsed_urlentriesrc   rb   Zplaylist_urlsr   Zdash_playlist_urlZhls_playlist_urlqsZhls_fmtsr.   Z	dash_fmtsZ	dash_subsrA   )rd   r   rB   _real_extract   s    
  





 
    
   

   

    

   

	zRedditIE._real_extractN)
__name__
__module____qualname__Z_NETRC_MACHINEZ
_VALID_URLintZ_TESTSrC   rG   r   rA   rA   rA   rB   r      s|    
   Pr   )r3   urllib.parseru   commonr   utilsr   r   r   r   r	   r
   r   r   r   r   r   rA   rA   rA   rB   <module>   s   0