
    i&                         S r SSKJr  SSKJr  SSKJrJrJr  SSKrSr	 " S	 S
\5      r
 " S S\
5      r " S S\
5      rg)z(Extractors for https://www.zerochan.net/   )BooruExtractor   )cache)textutil	exception    Nz%(?:https?://)?(?:www\.)?zerochan\.netc                       \ rS rSrSrSrSrSrSrSr	Sr
S	rS
r\R                  rSrS r\" SSS9S 5       rS rS rS rS rSrg)ZerochanExtractor   z"Base class for zerochan extractorszerochanzhttps://www.zerochan.netz{id}.{extension}z{id}r      z.zerochan.net)z_idz_hash)g      ?g      ?c                     SU l         U R                  U R                  5      (       a  g U R                  5       u  pU(       a   U R	                  U R                  X5      5      $ SU l         g )NTF)
_logged_incookies_checkcookies_names_get_auth_infocookies_update_login_impl)selfusernamepasswords      J/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/zerochan.pyloginZerochanExtractor.login    sZ    d0011!002&&t'7'7'KLL    i v )maxagekeyargc                    U R                   R                  SU5        U R                  S-   nU R                  US.nSUUSS.nU R                  USXESS	9nUR                  (       d  [
        R                  " 5       eUR                  $ )
NzLogging in as %sz/login)OriginReferer/Login)refnamer   r   POSTi  )methodheadersdataexpected)loginforootrequesthistoryr   AuthenticationErrorcookies)r   r   r   urlr+   r,   responses          r   r   ZerochanExtractor._login_impl+   s    ((3ii("		

   	
 <<V   M//11r   c                 :   U R                    SU 3nU R                  USS9R                  n U R                  U5      n[        R
                  " U5      n[        R                  " U5      US   U R                  US   5      [        R                  " US   S S 5      [        R                  " US	   S S 5      [        R                  " US
   S S 5      [        R                  " U" SS5      5      SS  U" SS5      U" SS5      [        R                  " [        R                  " U" SS5      R                  S5      S   5      5      S.
n US   S   US'   US   n/ =oS'   UR                  S5      SS   H~  n	[        R                  " U	SS5      n
[        R                  " [        R                  " U	SS5      5      nUR                  U
R!                  S5      S   R#                  5       S -   U-   5        M     U$ ! [         a    SU0s $ f = f! [         a    SUS'    Nf = f)!Nr$   r)   )r-   id
contentUrldatePublishedwidthheightcontentSizezclass="breadcrumbsz</nav>r   zhref="/user/"z<ul id="tags"</ul>zid="source-url"z</p>z</s>)
r9   file_urldater<   r>   sizepathuploadertagssourceauthorr'    rH   z
<li class=r   z
data-tag=" r	   :)r0   r1   r   _extract_jsonld	Exceptionextract_from	parse_intparse_datetime_isoparse_bytes
split_htmlunescaperemove_html
rpartitionsplitextrappend	partition
capitalize)r   entry_idr5   pagejsonldrY   r,   htmlrH   tagcategoryr'   s               r   _parse_entry_html#ZerochanExtractor._parse_entry_htmlB   s   1XJ'||C&|166	$))$/F   &x0|,//0GHvgs';<vh'7'<=(()>s)CD$h)0 1125^S1_g6d&6&6t!68++5:f+=a8A 'B C
	 #H-f5DN F|  F|::l+AB/Cyyc3/H==3c!BCDKK**3/2==?#ELM 0
 ?  	$(##	$*  	 DN	 s#   G4 H 4HHHHc           
         U R                    SU S3nU R                  U5      R                  n [        R                  " U5      nUS   US   US   US   US   US   US	   UR                  S
5      S.nU R                  (       d  US   US'   U$ ! [
         a-    U R                  U5      n[        R                  " U5      US'    Nf = f)Nr$   z?jsonr9   fullr<   r>   rE   primaryhashrI   )r9   rC   r<   r>   rE   r'   md5rI   rH   )
r0   r1   r   r   
json_loads
ValueError_parse_jsonrQ   getr   )r   r]   r5   txtitemr,   s         r   _parse_entry_api"ZerochanExtractor._parse_entry_apii   s    1XJe,ll3$$	2??3'D T
VWXVYV*	
 <DL%  	2##C(D1DJ	2s   B 4CCc                    [         R                  " S5      R                  SU5      nUR                  S5      u  p#n0 nUR	                  S5      SS   HP  nUR                  S5      u  psnU(       a%  US   S:X  a  USS	 nO[         R
                  " U5      nU(       d  ML  XU'   MR     US
S  R	                  S5      =US'   nU(       a  US	   S S US	'   U$ )Nz[\x00-\x1f\x7f]rK   ztags": [z,  "r   z": r	   rA   r@      z",    "rH   )r   resubr[   rX   rQ   )	r   rn   main_rH   ro   linekeyvalues	            r   rl   ZerochanExtractor._parse_json   s    gg()--b#6j1JJv&qr*D NN51MCE8s?!!BKE NN51Es!S	 + #12hnnY77VtBx}DHr   c                     [         R                  " [        5      nUS    H*  nUR                  S5      u  pVnX5   R	                  U5        M,     UR                  5        H  u  pXSUR                  5       -   '   M     g )NrH   rM   tags_)collectionsdefaultdictlistr[   rZ   itemslower)
r   postr^   rH   ra   rb   rx   r'   rz   r{   s
             r   _tagsZerochanExtractor._tags   sj    &&t,<C #c 2HN!!$'   **,JC*/399;&' 'r   )r   N)__name__
__module____qualname____firstlineno____doc__rb   r0   filename_fmtarchive_fmt
page_startper_pagecookies_domainr   r   USERAGENT_GALLERYDL	useragentrequest_intervalr   r   r   rc   rp   rl   r   __static_attributes__ r   r   r   r      ss    ,H%D%LKJH$N&M((I!	  (1%  & ,%N2*0r   r   c                   R    \ rS rSrSrSr\S-   rSrS r	S r
S rS	 rS
 rSS jrSrg)ZerochanTagExtractor   ra   )z
{category}z{search_tags}z"/(?!\d+$)([^/?#]+)/?(?:\?([^#]+))?zhttps://www.zerochan.net/TAGc                 h    [         R                  X5        UR                  5       u  U l        U l        g )N)r   __init__groups
search_tagquery)r   matchs     r   r   ZerochanTagExtractor.__init__   s$    ""4/&+lln#r   c                    U R                  S5      S:X  a  U R                  U l        SU l        OU R                  U l        U R                  S5      =n(       a-  [        U[        5      (       a  UR                  S5      nXl        g SU l        g )N
paginationr`      
extensions,)jpgpngwebpgif)	config
posts_htmlpostsr   	posts_api
isinstancestrrX   exts)r   r   s     r   _initZerochanTagExtractor._init   sj    ;;|$.DJDMDJ;;|,,4,$$$zz#I5DIr   c                 f    S[         R                  " U R                  R                  SS5      5      0$ )Nsearch_tags+rL   )r   unquoter   replace)r   s    r   metadataZerochanTagExtractor.metadata   s.    t||OO##C- / 0 	0r   c           
   #   P  #    U R                   S-   U R                  -   nU R                  S5      n[        R                  " U R
                  SS9n[        R                  " UR                  S5      U R                  5      US'     U R                  XSS9R                  n[        R                  " US	S
5      n[        R                  " U5      n U" SS5      nU(       d  OU(       a?  U" SS5      n	U R                  U	5      nUR!                  U R#                  U	5      5        Uv   O8U" SS5      U" SS5      U" SS5      U" SS5      U" SS5      SU" SS5      -   S.v   M  SU;  a  g US==   S-  ss'   M  ! [        R                   a  nUR                  S:X  a   S nAg e S nAff = f7f)Nr$   r   Temptypr)   )paramsr-     z<ul id="thumbsrB   z<li class=">zhref="/rA   zalt="ztitle="z&#10005;rK   rL   bzhttps://static.z<a href="https://static.)r9   r'   r<   r>   rE   rC   z
rel="next"r   )r0   r   r   r   parse_queryr   rQ   rm   r   r1   r   	HttpErrorstatusrY   rP   rc   updaterp   )
r   r5   r   r   r^   excthumbsrY   r   r]   s
             r   r   ZerochanTagExtractor.posts_html   s    ii#o/;;z*!!$**D9nnVZZ_dooFs|| $ 99=  YYt%5w?F$$V,DM3/#Is3H11(;DKK 5 5h ?@J #'y#"6"&w"4"&y*"="&r3-"&r3-$569= %=  * 4'3K1KE  && ::$s7   BF&E4 CF&4F#FF&FF##F&c              #     #    U R                   S-   U R                  -   nU R                  S5      n[        R                  " U R
                  SS9n[        R                  " UR                  S5      U R                  5      US'   UR                  SU R                  5        SUS'     U R                  XS	S
9nUR                  S:  aw  [        R                   " U R                   UR"                  S   5      nU R$                  R'                  SU5        U R                  S5      (       a  M  [        R(                  " 5       eUR+                  5       n US   nU(       aS  U HL  nUS   n	UR1                  U R3                  U	5      5        UR1                  U R5                  U	5      5        Uv   MN     O0U H*  nU R7                  U5      n
[9        U
5      US'   XS'   Uv   M,     UR                  S5      (       d  g US==   S-  ss'   GM_  ! [        R                   a  nUR                  S:X  a   S nAg e S nAff = f! [,         a    U R$                  R/                  SU5         g f = f7f)Nr$   r   Tr   r   l1jsonF)r   allow_redirectsr   i,  locationzHTTP redirect to %s	redirectsr   zServer response: %sr9   rC   	_fallbacknextr   )r0   r   r   r   r   r   rQ   rm   r   
setdefaultr   r1   r   r   r   status_codeurljoinr+   r.   warningAbortExtractionr   rO   debugr   rc   rp   _urlsr   )r   r5   r   r   r6   r   r,   r   r   post_idurlss              r   r   ZerochanTagExtractor.posts_api   s    ii#o/;;z*!!$**D9nnVZZ_dooFs#t}}-v<< ( ? ##s*ll499h.>.>z.JK  !6<;;{++//11==?DW
 !D"4jGKK 6 6w ?@KK 5 5g >?J	 " "D::d+D'+DzD$(,%J	 " 88F##3K1KM  && ::$  4d;s\   B"I!%H 5BI!H5 B1I!H2H-'I!,H--H22I!5&II!II!c              #   f   #    U[        US   5      -   S-   nU R                   H	  nX4-   v   M     g 7f)Nr9   .)r   r   )r   r   staticbaseexts        r   r   ZerochanTagExtractor._urls  s2     DJ'#-99C* s   /1)r   r   r   r   r   N)z"https://static.zerochan.net/.full.)r   r   r   r   subcategorydirectory_fmtBASE_PATTERNpatternexampler   r   r   r   r   r   r   r   r   r   r   r      s<    K3MBBG,G560)V/br   r   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)ZerochanImageExtractori  imagez/(\d+)zhttps://www.zerochan.net/12345c                    U R                   S   n U R                  U5      nU R                  S5      (       a   UR                  U R                  U5      5        U4$ ! [        R                   am  nUR                  S;   aW  [
        R                  " UR                  R
                  SS5      =n(       a  U R                  R                  SU S35         S nAge S nAff = f)Nr	   )r   i  z<h2><'r   r   )r   rc   r   r   r   r   rY   r6   r.   r   r   r   rp   )r   image_idr   r   msgs        r   r   ZerochanImageExtractor.posts#  s    ;;q>	))(3D ;;z""KK--h78w "" 	zzZ'))CLL$5$5vsCC3CHH$$qQZ0	s   A C/A"CCCr   N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r     s    KY&G.Gr   r   )r   boorur   r   rK   r   r   r   r   r   r   r   r   r   r   r   <module>r      sJ    / !  $ $ 7J0 J0Z{, {|. r   