U
    Mf[                     @   s   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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
 d
eZG dd deZG dd deZdS )    N   )InfoExtractor)VidsIoIE)VimeoIE   )	HTTPError)KNOWN_EXTENSIONSExtractorError
clean_htmldetermine_extint_or_nonemimetype2extparse_iso8601smuggle_urlstr_or_nonetraverse_objurl_or_noneurljoinc                   @   s   e Zd ZdZdddZdS )PatreonBaseIEz0Patreon/7.6.28 (Android; Android 11; Scale/2.10)NTc           
   
   C   s   |d kri }d|kr| j |d< |r0|ddi z&| jd| ||rH|nd|||dW S  tk
r } znt|jtrt|jjj	
ddkr | j| |jjd ||d	d
}t|dd	d}	|	rtd|	 dd W 5 d }~X Y nX d S )N
User-Agentjson-api-version      ?zhttps://www.patreon.com/api/zDownloading API JSON)notequeryfatalheaderszContent-TypejsonFr   )errors.Zdetail)get_allzPatreon said: T)expected)
USER_AGENTupdateZ_download_jsonr	   
isinstancecauser   r   responser   getZ_parse_jsonZ_webpage_read_contentr   )
selfepZitem_idr   r   r   r   eZerr_jsonZerr_message r*   </tmp/pip-unpacked-wheel-zk9bgjdq/yt_dlp/extractor/patreon.py	_call_api   s.    
 
  $zPatreonBaseIE._call_api)NNTN)__name__
__module____qualname__r!   r,   r*   r*   r*   r+   r      s   r   c                   @   s  e Zd ZdZdddddddd	d
ddeedddeddddddddd	eedddddddddd	dddd gd!ed"d#dd$d%ed&d'ed(d)ed(d*d+d(d(d,d-d.d(d/d0d(d/d1d2d3dd4d5d	d6d7d8d9ddd:d;ded<ed=d>d	d?d@dAdBdCdDgdEd?edFdGdHdIddJdKdLdMdNdOedPd	eedQdRdSdTgdKdUddVdWdXddYedZd[d\d	d]gd^eed_d`dad\dbdGdcddddedfdgdhdidjdidkdldmeedndodpdqid-drdsdtdudvdwdxdydzdyed{d|eednd}dd~gZdDZdd Zdd ZdS )	PatreonIEzPhttps?://(?:www\.)?patreon\.com/(?:creation\?hid=|posts/(?:[\w-]+-)?)(?P<id>\d+)z*http://www.patreon.com/creation?hid=743933Z e25505eec1053a6e6813b8ed369875ccZ743933Zmp3z*Episode 166: David Smalley of Dogma Debatez$md5:34d207dd29aa90e24f1b3f58841b81c7Cognitive Dissonance Podcastre:^https?://.*$iSZ2014072787145%https://www.patreon.com/dissonancepod80642)idexttitledescriptionuploader	thumbnail	timestampupload_dateuploader_id
like_countcomment_countuploader_url
channel_idchannel_urlchannel_follower_count)urlmd5	info_dictz*http://www.patreon.com/creation?hid=754133Z 3eb09345bf44bf60451b8b0b81759d0aZ754133zCD 167 Extra)r6   r7   r8   r:   r;   r?   r@   rA   zPatron-only content)rE   rF   rG   skipz,https://www.patreon.com/creation?hid=1682498ZSU4fj_aEMVwZmp4zI'm on Patreon!ZTraciJHinesZ20150211z$md5:8af6425f50bd46fbf29f3db0fc3a8364z@TraciHinesMusicZEntertainmenti  zcount:39r   z8https://www.youtube.com/channel/UCGLim4T2loE5rwCMdpCIPVgZnot_liveZUCGLim4T2loE5rwCMdpCIPVgpublicTz(https://www.youtube.com/@TraciHinesMusiczcount:4)r6   r7   r8   r:   r;   r=   r9   r>   
categoriesdurationZ
view_counttags	age_limitchannelrC   Zlive_statusr?   rB   ZavailabilityrD   Zplayable_in_embedrA   r@   Zchannel_is_verifiedZchapters)Z
noplaylistskip_download)rE   rG   paramsz3https://www.patreon.com/posts/episode-166-of-743933rE   Zonly_matchingz$https://www.patreon.com/posts/743933z6https://www.patreon.com/posts/kitchen-as-seen-51706779Z 96656690071f6d64895866008484251bZ	555089736z&KITCHEN AS SEEN ON DEEZ NUTS EXTENDED!z	Cold OnesZ20210526z$md5:557a409bd79d3898689419094934ba79Z14936315)r6   r7   r8   r:   r;   r=   r9   r>   z7https://www.patreon.com/posts/video-sketchbook-32452882Z32452882Z4301314i|]Z20191218zhttps://www.patreon.com/loishz$md5:e2693e97ee299c8ece47ffdb67e7d9d2zVIDEO // sketchbook flipthroughzLoish Z
sketchbookvideoZ1641751)r6   r7   r@   r>   r?   r<   r=   r;   rA   r9   r8   r:   rL   rB   rC   rD   )rE   rG   z5https://www.patreon.com/posts/premium-access-70282931Z70282931zD[Premium Access + Uncut] The Office - 2x6 The Fight - Group Reactionz"https://www.patreon.com/thenormiesZ573397Z2929435zThe Normiesz$md5:79c9fd8778e2cef84049a94c058a5e23Z20220809iTebz
The Officezearly accessZuncut)r6   r7   r8   rC   rB   r>   r:   r9   r@   r=   r;   rD   r?   r<   rL   rA   )rE   rG   rH   z6https://www.patreon.com/posts/hunter-x-hunter-34007913Z34007913z-Hunter x Hunter | Kurapika DESTROYS Uvogin!!!Z
YaBoyRoshiiE^z"https://www.patreon.com/yaboyroshizHunter x HunterZ14264111z!Kurapika is a walking cheat code!Z20200213Z2147162)r6   r7   r8   r?   r:   r<   rC   r;   rL   r>   r@   rD   r9   r=   rB   rA   z6https://www.patreon.com/posts/4k-spiderman-4k-96414599Z	902250943uY   ❤️(4K) Spiderman Girl Yeonhwa’s Gift ❤️(4K) 스파이더맨걸 연화의 선물uZ   ❤️(4K) Spiderman Girl Yeonhwa’s Gift 
❤️(4K) 스파이더맨걸 연화의 선물ZNpickyeonhwaZ90574422z"https://www.patreon.com/Yeonhwa726Z10237902F   iɆeZ20240113zre:^https?://.+)r6   r7   r8   r9   r:   r>   rA   rB   rC   rK   r<   r=   r@   r?   r;   rO   m3u8z7https://www.patreon.com/posts/holy-wars-solos-100601977   Z	100601977z<"Holy Wars" (Megadeth) Solos Transcription & Lesson/Analysisz$md5:d099ab976edfce6de2a65c2b169a88d3zBradley HallZ24401883z)https://www.patreon.com/bradleyhallguitarZ3193932ieeZ20240318)r6   r8   r9   r:   r>   rA   rB   rC   rD   r<   r=   r?   r@   r;   )rE   playlist_countrG   rH   c                 C   s   |  |}| jd| |dddddddd	d
}|d d }t|dtjhfdthfddthtfdthfdt	hfdt	hfd}g }d}t|ddd fD ]F}|d }	|	dkr0t|dt
hfpi }
t|
d}t|
d}t	|
d}|r|tkr|d k	r|d7 }|| d| |||d  q|	d!krj|t|dd"thfd#thfdd$thfd% q|	d&krt|ddthf }r|d'g | q|	d(kr|t|ddthfd#thfdd$thfdd)t	hfd* qd+d,i}t|d-d.krjtj| jd/t|d0d1thfd2d3d4p$d5}t|rj| j||d6|d3d3d7d8rj|| jt|d,td9d: t|d0d$thf}|r| j||d;|d3d3d<d8 }r|jd<kst|r|| t|| t|d=t
hf}|r\|d>}t|}|tkr||||d$ d? nD|d@ks6t|d$dAkr\| |d$ |\}}||||dB t|dC}d }|r|dr|  |}|s|d3kr| j!dD|d9dE nd|s| j!dF|d9dE nLt"|dkr||d  n.|D ]}|| q| j#||f|dG|iS ||d#< ||dG< |S )HNposts/z download_url,mimetype,size_bytesz_comment_count,content,embed,image,like_count,post_file,published_at,title,current_user_can_viewfull_name,urlvaluezurl,name,patron_countfalsez7audio,user,user_defined_tags,campaign,attachments_media)zfields[media]fields[post]fields[user]zfields[post_tag]fields[campaign]json-api-use-default-includesinclude)r   data
attributesr8   contentimage)Z	large_urlrE   Zpublished_atr?   r@   )r8   r9   r;   r<   r?   r@   r   includedc                 S   s   |d S )Ntyper*   _vr*   r*   r+   <lambda>      z)PatreonIE._real_extract.<locals>.<lambda>re   Zmediadownload_urlmimetype
size_bytesr   -)r6   r7   filesizerE   user	full_namer6   rE   )r:   r>   rA   post_tagrL   campaignpatron_count)rN   rB   rC   rD   Zrefererzhttps://patreon.com/)embedZproviderZVimeoz?(https(?:%3A%2F%2F|://)player\.vimeo\.com.+app_id(?:=|%3D)+\d+)ru   htmlz	vimeo urlFr    zChecking Vimeo embed URLi  )r   r   ZerrnoteZexpected_statusT)Zurl_transparentzChecking embed URLi  	post_filename)r6   r7   rE   rR   rT   )r6   formats	subtitlesZcurrent_user_can_viewz#You do not have access to this post)video_idr    z%No supported media found in this postZ__post_extractor)$Z	_match_idr,   r   strstripr
   r   anyr   r   dictr&   r   r   appendr"   r   
setdefaulturllibparseunquoteZ_html_search_regexZ_request_webpage
url_resultr   Z_smuggle_referrerstatusr   suitabler   r   Z#_extract_m3u8_formats_and_subtitlesZextract_commentsZraise_no_formatslenZplaylist_result)r'   rE   r|   postra   infoentriesidxr_   Zinclude_typeZmedia_attributesrk   r7   rm   rr   r   Zv_urlZ	embed_urlZurlhrx   ry   rz   r{   Zcan_view_postcommentsentryr*   r*   r+   _real_extract   s    
 

	









       
 
     




zPatreonIE._real_extractc                 #   sN  d }d}dddddddd	d
}t dD ]}||r>d|ini  | jd| d||d| d}d }t|dddd ffdfD ]}|d7 }|d}|dpi }	|d krqt|d t|d fdddfdti d}
||	dt|	dt|ddd |	d! |
d"|
d#d$V  q|t|d%k r:t|d&}|d kr( qJq(d S )'Nr   2   a`  parent.commenter.campaign,parent.post.user,parent.post.campaign.creator,parent.replies.parent,parent.replies.commenter.campaign,parent.replies.post.user,parent.replies.post.campaign.creator,commenter.campaign,post.user,post.campaign.creator,replies.parent,replies.commenter.campaign,replies.post.user,replies.post.campaign.creator,on_behalf_of_campaignzbody,created,is_by_creatorzimage_url,full_name,urlzimage_tiny_url,namez-createdr   rZ   )zpage[count]r_   zfields[comment]r\   zfilter[flair]sortr   r^   r   page[cursor]rW   z	/commentszDownloading comments page r   r   r`   rd   c                 S   s   |d dkS )Nre   commentr*   rf   r*   r*   r+   ri     rj   z)PatreonIE._get_comments.<locals>.<lambda>.r6   ra   )relationshipsZ	commenterr`   r6   c                    s   |d  ko|d dkS )Nr6   re   rp   r*   rf   	author_idr*   r+   ri     rj   F)r   expected_typedefaultbodycreated)r   parentr`   r6   root)r   Zis_by_creatorrq   Z	image_url)r6   textr<   r   Zauthor_is_uploaderr   authorZauthor_thumbnail)metacount)r`   r6   )	itertoolsr   r"   r,   r   r&   r   r   )r'   Zpost_idcursorr   rP   pager%   r   Z
comment_idra   Zauthor_infor*   r   r+   _get_commentss  s^    
   

   

zPatreonIE._get_commentsN)	r-   r.   r/   
_VALID_URLint_TESTSZ_RETURN_TYPEr   r   r*   r*   r*   r+   r0   2   sr  
"
  C{r0   c                       s   e Zd ZdZddddddddedddd	d
ddddedddddddddd	dddddddddgZe fddZdd Zdd Z	  Z
S )PatreonCampaignIEzXhttps?://(?:www\.)?patreon\.com/(?!rss)(?:(?:m/(?P<campaign_id>\d+))|(?P<vanity>[-\w]+))z&https://www.patreon.com/dissonancepod/r1   r4   r5   z$md5:eb2fa8b83da7ab887adeac34da6b7af7r   r3   r2   )r8   rC   r6   r9   rB   rN   rM   rD   r>   rA   r:   r;   D   )rE   rG   Zplaylist_mincountz'https://www.patreon.com/m/4767637/postszNot Just BikesZ4767637z$https://www.patreon.com/notjustbikesz$md5:595c6e7dca76ae615b1d38c298a287a1Z37306634)r8   rD   r6   rB   rC   r9   rM   rN   rA   r:   r>   r;   G   z+https://www.patreon.com/dissonancepod/postsTrQ   z!https://www.patreon.com/m/5932659c                    s   t |rdS t |S )NF)r0   r   super)clsrE   	__class__r*   r+   r     s    zPatreonCampaignIE.suitablec                 c   s   d }d|dddd}t dD ]l}||r2d|ini  | jd||d| d	}t|d
}t|dD ]}| td|tV  qd|d kr qqd S )Nzpatreon_url,urlrZ   z-published_at)r[   zfilter[campaign_id]zfilter[is_draft]r   r^   r   r   ZpostszDownloading posts page r   )r   Z
paginationZcursorsnext)r`   .ra   Zpatreon_urlzhttps://www.patreon.com/)r   r   r"   r,   r   r   r   r0   )r'   campaign_idr   rP   r   Z
posts_jsonZpost_urlr*   r*   r+   _entries  s    
zPatreonCampaignIE._entriesc           
      C   s4  |  |dd\}}|d kr\| j||d| jid}| ||d d d d d	 d
 d }ddddd}| jd| |dd|dpi }|d
pi }t|d}t|ddd fi tdd}	d||| 	|t
t|dt|dtt|d||t|	dt|	dt|	dt|dt|d r d!nd"tt|d#d$S )%Nr   vanityr   )r   propsZ	pagePropsZbootstrapEnvelopeZpageBootstraprs   r`   r6   rZ   rX   zEname,summary,url,patron_count,creation_count,is_nsfw,avatar_photo_urlZcreator)r^   r\   r]   r_   z
campaigns/zDownloading campaign infoF)r   r   r   )ra   ry   rd   c                 S   s   |d dkS )Nre   rp   r*   rf   r*   r*   r+   ri     rj   z1PatreonCampaignIE._real_extract.<locals>.<lambda>)r   r   r   Zplaylist)ra   summary)ra   rE   )ra   rt   )ra   rq   )ra   Zcreation_count)ra   Zis_nsfw   r   )ra   Zavatar_photo_url)_typer6   r8   r   r9   rC   rD   rB   rN   rA   r>   r:   rV   rM   r;   )Z_match_valid_urlgroupZ_download_webpager!   Z_search_nextjs_datar,   r&   r   r   r   r
   r   r   r   )
r'   rE   r   r   ZwebpagerP   Zcampaign_responseZcampaign_infoZchannel_nameZ	user_infor*   r*   r+   r     sx       
 
  zPatreonCampaignIE._real_extract)r-   r.   r/   r   r   r   classmethodr   r   r   __classcell__r*   r*   r   r+   r     sX   *r   )r   urllib.parser   commonr   Zsproutvideor   Zvimeor   Znetworking.exceptionsr   utilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r0   r   r*   r*   r*   r+   <module>   s   8  u