
    yfP                         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
e      Z G d de      Z G d de      Zy)    N   )InfoExtractor)VimeoIE   )compat_urllib_parse_unquote)	HTTPError)KNOWN_EXTENSIONSExtractorError
clean_htmldetermine_extint_or_nonemimetype2extparse_iso8601str_or_nonetraverse_objtry_geturl_or_noneurljoinc                       e Zd ZdZddZy)PatreonBaseIEz0Patreon/7.6.28 (Android; Android 11; Scale/2.10)Nc                    |i }d|vr| j                   |d<   |r|j                  ddi       	 | j                  d| ||sdn||||      S # t        $ r}t	        |j
                  t              r;t        |j
                  j                  j                  j                  d            dk7  r | j                  | j                  |j
                  j                  d |      |d	
      }t        |dd	      }	|	rt        d|	 d       d }~ww xY w)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.detail)get_allzPatreon said: T)expected)
USER_AGENTupdate_download_jsonr
   
isinstancecauser   r   responser   get_parse_json_webpage_read_contentr   )
selfepitem_idr   r   r   r   eerr_jsonerr_messages
             :/usr/lib/python3/dist-packages/yt_dlp/extractor/patreon.py	_call_apizPatreonBaseIE._call_api   s   ?Gw&$(OOGL!LL,c23	&&.rd3D4d5' ' ; ;  	aggy1\!''BRBRBZBZB^B^_mBn5osy5y''(B(B177CSCSUY[b(celty'zH&x1JTYZK$~k]%CdSS	s   A 	D
B0DD
)NNTN)__name__
__module____qualname__r%   r5        r4   r   r      s    CJr:   r   c                   h   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i dddddddd d!d	d"d#d$d%d&d'd(d)gd*d+d,ed-d.d/d0d1d d2d3d4d5d6ed7d8ed9d:ed9d;d<d9d9d=d>d?d9d@dAd9d@dBdCdDddEdFd	dGdHdIdJdddKi ddLdddMed&dNd6edOdPd"dQd!d	dRdSd$dTddUddVd-dWdXgdYdZd2dSd[ed\d]i dd^dddd_d2d`dYdad&dbddcd$dddMed"ded!d	d[ed6edOdfd-g dgdRd`ddhdii ddjddddkd6eddldOdmd2dnd!d	d-dogd&dpdMed[ed$dqd"drdYdsdRdnd\g	Zdt Zdu Zyv)w	PatreonIEzPhttps?://(?:www\.)?patreon\.com/(?:creation\?hid=|posts/(?:[\w-]+-)?)(?P<id>\d+)z*http://www.patreon.com/creation?hid=743933 e25505eec1053a6e6813b8ed369875cc743933mp3z*Episode 166: David Smalley of Dogma Debatez$md5:34d207dd29aa90e24f1b3f58841b81c7Cognitive Dissonance Podcastre:^https?://.*$iS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=754133 3eb09345bf44bf60451b8b0b81759d0a754133zCD 167 Extra)rF   rG   rH   rJ   rK   rO   rP   rQ   zPatron-only content)rU   rV   rW   skipz,https://www.patreon.com/creation?hid=1682498rF   SU4fj_aEMVwrG   mp4rH   zI'm on Patreon!rJ   TraciJHinesrK   rM   20150211rI   z$md5:8af6425f50bd46fbf29f3db0fc3a8364rN   z@TraciHinesMusic
categoriesEntertainmentdurationi  
view_counttagszcount:39	age_limitr   channelrS   z8https://www.youtube.com/channel/UCGLim4T2loE5rwCMdpCIPVglive_statusnot_liverO   UCGLim4T2loE5rwCMdpCIPVgpublicTz(https://www.youtube.com/@TraciHinesMusiczcount:4)rR   availabilityrT   playable_in_embedrQ   rP   channel_is_verifiedchapters)
noplaylistskip_download)rU   rW   paramsz3https://www.patreon.com/posts/episode-166-of-743933rU   only_matchingz$https://www.patreon.com/posts/743933z6https://www.patreon.com/posts/kitchen-as-seen-51706779 96656690071f6d64895866008484251b	555089736z&KITCHEN AS SEEN ON DEEZ NUTS EXTENDED!z	Cold Ones20210526z$md5:557a409bd79d3898689419094934ba7914936315)rF   rG   rH   rJ   rK   rM   rI   rN   z7https://www.patreon.com/posts/video-sketchbook-3245288232452882rP   4301314rL   i|]20191218rQ   zhttps://www.patreon.com/loishz$md5:e2693e97ee299c8ece47ffdb67e7d9d2zVIDEO // sketchbook flipthroughzLoish 
sketchbookvideorR   1641751rT   )rU   rW   z5https://www.patreon.com/posts/premium-access-7028293170282931zD[Premium Access + Uncut] The Office - 2x6 The Fight - Group Reactionz"https://www.patreon.com/thenormies5733972929435zThe Normiesz$md5:79c9fd8778e2cef84049a94c058a5e2320220809iTeb)z
The Officezearly accessuncut)rU   rW   rZ   z6https://www.patreon.com/posts/hunter-x-hunter-3400791334007913z-Hunter x Hunter | Kurapika DESTROYS Uvogin!!!
YaBoyRoshiiE^z"https://www.patreon.com/yaboyroshizHunter x Hunter14264111z!Kurapika is a walking cheat code!202002132147162c                 @   | j                  |      }| j                  d| |dddddddd	
      }|d   d   }|d   j                         }|j                  d      xs i }||t	        |j                  d            |j                  d      xs |j                  d      t        |j                  d            t        |j                  d            t        |j                  d            d}t        |d      }|r|d   r| j                  |      |d<   |j                  dg       D ]  }	|	j                  d      }
|
dk(  ru|	j                  d      xs i }|j                  d      }t        |j                  d            }t        |j                  d            }|sw|t        v s|i ||||dc S |
dk(  r`|	j                  d      }|s|j                  |j                  d       t        |	j                  d!            |j                  d      d"       |
d#k(  r-|j                  d$g       j                  t        |	d%             &|
d&k(  s-|j                  t        |	d'      t        |	j                  d!            t        |	d(      t        t        |	d)            d*        t        |d+       d,k(  r|t        |d-       }t!        t#        | j%                  d.|d/d01                  }|rFt'        j(                  |d2      }| j+                  ||d3d0d04      r | j,                  |t&        fd5d6i|S t        |d7       }|r)| j+                  ||d8d0d04      r | j,                  |fi |S t        |d9      }|rs|j                  d:      }t/        |      }|t        v ri |||d   d;S |d<k(  st/        |j                  d            d=k(  r!| j1                  |d   |      \  }}i |||d>S |d0u r| j3                  d?|d6@       |S | j3                  dA|d6@       |S )BN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
attributesrH   imagecontent	large_urlrU   published_atrO   rP   )rF   rH   rI   rK   rL   rO   rP   current_user_can_view__post_extractorincludedtypemediadownload_urlmimetype
size_bytes)rG   filesizerU   user	full_namerF   )rJ   rN   rQ   post_tagrc   )r   r   campaign)r   rH   r   rU   r   patron_count)re   rR   rS   rT   c                     | d   d   S )Nembedproviderr9   xs    r4   <lambda>z)PatreonIE._real_extract.<locals>.<lambda>  s    7J)? r:   Vimeoc                     | d   d   S )Nr   htmlr9   r   s    r4   r   z)PatreonIE._real_extract.<locals>.<lambda>  s    qz&7I r:   z?(https(?:%3A%2F%2F|://)player\.vimeo\.com.+app_id(?:=|%3D)+\d+)z	vimeo urlFr    zhttps://patreon.comzChecking Vimeo embed URL)r   errnoteurl_transparentTc                     | d   d   S )Nr   rU   r9   r   s    r4   r   z)PatreonIE._real_extract.<locals>.<lambda>  s    !G*U2C r:   zChecking embed URL	post_filename)rG   rU   r{   m3u8)formats	subtitlesz#You do not have access to this post)video_idr$   z%No supported media found in this post)	_match_idr5   stripr+   r   r   r   r   extract_commentsr   r	   r&   r   
setdefaultappendr   r   r   _search_regexr   _smuggle_referrer_request_webpage
url_resultr   #_extract_m3u8_formats_and_subtitlesraise_no_formats)r.   rU   r   postr   rH   r   infocan_view_postii_typemedia_attributesr   rG   r   user_attributes
embed_htmlv_url	embed_urlr   r   r   r   s                          r4   _real_extractzPatreonIE._real_extract   sy   >>#&~~XJ!C !B /$+$;18T2  	 &\,/
7#))+w'-2%jnnY&?@;/C599U3C&z~~n'EF%jnn\&BC()HI
 %Z1HIT/2'+'<'<X'FD#$*b) $	AUU6]F #$55#6#<" /33NC"#3#7#7
#CD ))9)=)=l)KL
C+;$;
@V"$.+	  6!"#%%"5"KK$3$7$7$D'2155;'?(7(;(;E(B!  :%+22<CZ3[\:%+A/FG"-aeeDk":#/3H#I.9,qJh:i.j	 ?$	N :?@GK -IJJ ;""#egqs~  GL"  M!N OE11%9NO((:T\akp(q*4??5'X4XSWXXJ(CD	..y(DX`eot.u"4??9555 [9	==(D%C&&$U+ 
 M)--2F$G6$Q%)%M%MiX]N^`h%i"&!*  E!!!"GRZei!j  !!"IT\gk!lr:   c              #     K   d }d}dddddddd	d
}t        j                  d      D ]0  }|j                  |rd|ini        | j                  d| d||d|z        }d }t	        |ddd ffdf      D ]  }|dz  }|j                  d      }|j                  d      xs i }	|1t	        |d      t	        |dfddfdt        i       }
||	j                  d      t        |	j                  d            t	        |dd      |	j                  d       |
j                  d!      |
j                  d"      d#  |t	        |d$      k  rt	        |d%      }|1 y  y w)&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   r   )zpage[count]r   zfields[comment]r   zfilter[flair]sortr   r   r   page[cursor]r   z	/commentszDownloading comments page %dr   r   r   r   c                     |d   dk(  S )Nr   commentr9   _vs     r4   r   z)PatreonIE._get_comments.<locals>.<lambda>I  s    VWX^V_clVl r:   .rF   r   )relationships	commenterr   rF   c                 (    |d   k(  xr |d   dk(  S )NrF   r   r   r9   )r   r   	author_ids     r4   r   z)PatreonIE._get_comments.<locals>.<lambda>Q  s"    $98L8dQRSYQZ^dQd r:   F)r#   expected_typedefaultbodycreated)r   parentr   rF   root)r   is_by_creatorr   	image_url)rF   textrL   r   author_is_uploaderr   authorauthor_thumbnail)metacount)r   rF   )	itertoolsr   r&   r5   r   r+   dictr   )r.   post_idcursorr   rp   pager*   r   
comment_idr   author_infor   s              @r4   _get_commentszPatreonIE._get_comments4  s     z;52 #-4	
 OOA& !	DMMf>62"E~~	+WFIgjnIn & pH F'FZIl<m3nps2tu 
$[[.
$[[6<"
%(2^_	*z+dfrs!rC
 %&NN62!.z~~i/H!I*74]gmn*4..*I!*)ook:(3(D	 	, |H.?@@%h0BC~C!	s   EEEN)r6   r7   r8   
_VALID_URLint_TESTSr   r   r9   r:   r4   r<   r<   1   sb   dJ;1AA6+#%" C!B&)
* <1#6+ C	
 & >
-
5
 '
 	

 +
 :
 A
 -
 ?+
 
 #
 J
 
 }
 U
  :!
" ##
$ 5$&)!%F #'!3
8 !
;!D E 6 H1=#+%A%	
 &  I
*
5
 S
 9	

 #
 
 :
 ,
 ;
 A
 6
 
 \7+
 )
 :
  %c!
. G
*
5
 [
 ?	

 (
 9
 
 A
 S
 :
 ,
 %c
 #
 
 ;
  @!
$ &+0 H
*
5
 D
 #	

 
 
 ?
 ,
 &'
 :
 S
 %c
 >
 :
 )
  @!
EWFrfP/r:   r<   c                        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       Zd Zd Z	 xZ
S )PatreonCampaignIEzXhttps?://(?:www\.)?patreon\.com/(?!rss)(?:(?:m/(?P<campaign_id>\d+))|(?P<vanity>[-\w]+))z&https://www.patreon.com/dissonancepod/r@   rD   rE   z$md5:eb2fa8b83da7ab887adeac34da6b7af7r   rC   rA   )rH   rS   rF   rI   rR   re   rd   rT   rN   rQ   rJ   rK   D   )rU   rW   playlist_mincountz'https://www.patreon.com/m/4767637/postszNot Just Bikes4767637z$https://www.patreon.com/notjustbikesz$md5:595c6e7dca76ae615b1d38c298a287a137306634)rH   rT   rF   rR   rS   rI   rd   re   rQ   rJ   rN   rK   G   z+https://www.patreon.com/dissonancepod/postsTrq   z!https://www.patreon.com/m/5932659c                 X    t         j                  |      rdS t        t        |   |      S )NF)r<   suitablesuperr   )clsrU   	__class__s     r4   r   zPatreonCampaignIE.suitable  s)    !**3/u`U;Lc5[\_5``r:   c              #   8  K   d }d|dddd}t        j                  d      D ]t  }|j                  |rd|ini        | j                  d||d|z  	      }t	        |d
      }t	        |d      D ]$  }| j                  t        d|      t               & |t y  y w)Nzpatreon_url,urlr   z-published_at)r   zfilter[campaign_id]zfilter[is_draft]r   r   r   r   postszDownloading posts page %dr   )r   
paginationcursorsnext)r   .r   patreon_urlzhttps://www.patreon.com/)r   r   r&   r5   r   r   r   r<   )r.   campaign_idr   rp   r   
posts_jsonpost_urls          r4   _entrieszPatreonCampaignIE._entries  s     -#. '#-4
 OOA& 
	DMMf>62"EFQlosQstJ!*.WXF(5_` `oog.H(&SU^__` ~
	s   BBBc                    | j                  |      j                  dd      \  }}|3| j                  ||d| j                  i      }| j	                  d|d      }ddd	d
d}| j                  d| |dd|      xs i }|j                  d      xs i }t        |d      }t        |dd fi t        d      }	d||| j                  |      t        t        |d            t        |d      t        t        |d            ||t        |	d      t        |	j                  d            t        |	d      t        |d      t        |d      rdndt        t        |d            d S )!Nr	  vanityr   )r   z-https://www.patreon.com/api/campaigns/(\d+)/?zCampaign IDr   r   zEname,summary,url,patron_count,creation_count,is_nsfw,avatar_photo_urlcreator)r   r   r   r   z
campaigns/zDownloading campaign infoF)r   r   r   r   )r   r   r   c                     |d   dk(  S )Nr   r   r9   r   s     r4   r   z1PatreonCampaignIE._real_extract.<locals>.<lambda>  s    6f9L r:   )r   r   r#   playlist)r   summaryr   r   rF   )r   r   )r   creation_count)r   is_nsfw   r   )r   avatar_photo_url)_typerF   rH   entriesrI   rS   rT   rR   re   rQ   rN   rJ   playlist_countrd   rK   )_match_valid_urlgroup_download_webpager%   r   r5   r+   r   r   r  r   r   r   r   )
r.   rU   r	  r  webpagerp   campaign_responsecampaign_infochannel_name	user_infos
             r4   r   zPatreonCampaignIE._real_extract  s   "33C8>>}hWV,,S&<QUQ`Q`Ba,bG,,-]_fhuvK .5+ g 	
 !NN&,E +      	
 *--f5;#M3IJ 
,LMdE;	
  !}}[1%l=B[&\]'7LM&1,}Nl2m&n%#(4IJ&y}}T':;$Y0KL*=:Z[+M;TU[\$\-Ac%de
 	
r:   )r6   r7   r8   r   r   r   classmethodr   r  r   __classcell__)r  s   @r4   r   r   f  s    lJ73BA!5&)"C6,
  !$ 9%&)#AA'B(%,
  !$ = 3K(FT a a,)
r:   r   )r   commonr   vimeor   compatr   networking.exceptionsr   utilsr	   r
   r   r   r   r   r   r   r   r   r   r   r   r<   r   r9   r:   r4   <module>r)     sQ     !  0 -    M 4r rj	p
 p
r:   