
    i`                         S r SSKJrJr  SSKJrJr  SSKJr  SSK	r	Sr
 " S	 S
\5      r " S S\5      r " S S\5      rS rg)z!Extractors for https://8chan.moe/   )	ExtractorMessage   )textdt)memcache    Nz (?:https?://)?8chan\.(moe|se|cc)c                   Z    \ rS rSrSrSrSrS r\" 5       S 5       r	\" 5       S 5       r
Srg	)
_8chanExtractor   zBase class for 8chan extractors8chanzhttps://8chan.moec                 J    SUS   -   U l         [        R                  " X5        g )Nzhttps://8chan.r   )rootr   __init__)selfmatchs     G/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/8chan.pyr   _8chanExtractor.__init__   s     $uQx/	4'    c                    SU R                   S   -   nU R                   Hw  nUR                  U:X  d  M  UR                  R	                  5       R                  S5      (       d  ME  U R                  R                  SUR                  5        UR                  s  $    U R                  S-   nSU R                  S-   0nU R                  X4SS	9nUR                   He  nUR                  R	                  5       R                  S5      (       d  M3  U R                  R                  SUR                  5        UR                  s  $    U R                  R                  S
5        g)Nz8chan.r	   toszTOS cookie name: %sz/.static/pages/confirmed.htmlRefererz/.static/pages/disclaimer.htmlF)headersallow_redirectsz"Unable to determin TOS cookie nameTOS20250418)groupscookiesdomainnamelower
startswithlogdebugr   requesterror)r   r   cookieurlr   responses         r   cookies_tos_name _8chanExtractor.cookies_tos_name   s	   DKKN*llF}}&KK%%'225994fkkB{{"	 # ii99dii*JJK<<e<L&&F{{  "--e444fkkB{{" '
 	;<r   c                    [         R                  " 5       nU R                  S-   nSUR                  S5      0nU R	                  X#S9R
                    U R                  R                  S5      S   nU R                   Hl  nUR                  R                  U5      (       d  M%  S Ul
        UR                  S:X  d  M>  U[         R                  " SS	5      -   R                  S
5      Ul        Mn     U R                  $ )Nz/captcha.jsdz#%a %b %d %Y %H:%M:%S GMT+0000 (UTC))params/r   captchaexpiration   i,  z%a, %d %b %Y %H:%M:%S GMT)r   nowr   strftimer$   content
rpartitionr   r   endswithexpiresr   	timedeltavalue)r   r1   r'   r-   r   r&   s         r   cookies_prepare_8chanExtractor.cookies_prepare1   s     ffhii-'s||$IJKS(00
 %%c*1-llF}}%%f--!%;;"55$'",,r3*?$?#I#I3$5FL	 # ||r   )r   N)__name__
__module____qualname____firstlineno____doc__categoryr   r   r   r)   r9   __static_attributes__ r   r   r   r      s@    )HD( Z ( Z r   r   c                   <    \ rS rSrSrSrSrSrSr\	S-   r
SrS	 rS
rg)_8chanThreadExtractorH   zExtractor for 8chan threadsthread)z
{category}z
{boardUri}z{threadId} {subject[:50]}z/{postId}{num:?-//} {filename[:200]}.{extension}z{boardUri}_{postId}_{num}z/([^/?#]+)/(?:res|last)/(\d+)z"https://8chan.moe/a/res/12345.htmlc              #     #    U R                   u  pnU R                  R                  U R                  5       SU R                  SS  S9  U R                   SU SU S3nUS-   U R
                  R                  S'   U R                  US	-   5      nUS
   US'   SUS-   0US'    U R                  5       U l        UR                  SS5      n[        R                   SU4v   ["        R$                  " U4U5       H  nUR                  SS5      nU(       d  M  UR'                  U5        [)        U5       Hb  u  pU
R'                  U5        XS'   [*        U
S'   [,        R.                  " U
S   U
5        [        R0                  U R                  U
S   -   U
4v   Md     M     g ! [         a:  nU R                  R                  SUR                  R                  XUS9   S nAGN#S nAff = f7f)N1   r   r.   /res/.htmlr   jsonthreadIdpostId_http_headersz(Failed to fetch captcha cookies:  %s: %s)exc_infopostsrB    filesnum_http_validateoriginalNamepath)r   r   setr)   r   sessionr   request_jsonr9   	Exceptionr"   r#   	__class__r;   popr   	Directory	itertoolschainupdate	enumerate	_validater   nameext_from_urlUrl)r   _boardrF   r'   excrS   postrU   rV   files              r   items_8chanThreadExtractor.itemsR   s    ;;&..0#diimL 1UG52*-,Y'""3<0!*-x#,cFl";	F//1DL 

7B'V++OOVIu5DHHWb)EMM$&u-	F#!U)2%&%%d>&:DAkk499tF|#;TAA . 6  	FHHNNE==113  F	Fs1   BG  F 5C$G 
G#/GG GG )r   N)r;   r<   r=   r>   r?   subcategorydirectory_fmtfilename_fmtarchive_fmtBASE_PATTERNpatternexamplerm   rA   rB   r   r   rD   rD   H   s1    %K2MDL-K==G2GBr   rD   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	_8chanBoardExtractors   zExtractor for 8chan boardsri   z/([^/?#]+)/(?:(\d+)\.html)?$zhttps://8chan.moe/a/c              #     #    U R                   u  pnU R                  R                  U R                  5       SU R                  SS  S9  [
        R                  " US5      nU R                   SU SU S3nU R                  U5      nUS   n U H8  n[        US'   U R                   SU S	US
    S3n[        R                  XG4v   M:     US-  nX5S   :  a  g U R                   SU SU S3nU R                  U5      S   nMw  7f)NrH   rI   rJ   r   r.   z.jsonthreads
_extractorrK   rO   z.html	pageCount)r   r   rZ   r)   r   r   	parse_intr\   rD   r   Queue)r   rh   ri   pnumr'   datarz   rF   s           r   rm   _8chanBoardExtractor.itemsy   s    $..0#diimL~~dA&1UG1TF%0  %y/!'<|$1UG5
1C0DEJmmS00 "
 AID;''YYKqqe4C'',Y7G s   D DrB   N)r;   r<   r=   r>   r?   ro   rs   rt   ru   rm   rA   rB   r   r   rw   rw   s   s    $K<<G$G8r   rw   c                     U R                   R                  nU" S5      S:H  =(       a    U" S5      S:H  =(       a    U" S5      S:H  (       + $ )Nr6   0zcontent-length166zcontent-typez	image/png)r   get)r(   hgets     r   re   re      sN    DY3 	,%'	,^+ r   )r?   commonr   r   rT   r   r   cacher   ra   rs   r   rD   rw   re   rB   r   r   <module>r      sH    ( &   22i 2j(BO (BV8? 88r   