
    i&$                        S r SSKJrJr  SSKJr  SSKr " S S\5      r\R                  S	S
S.SSS.SSS.SSS.SSS.SSS.SSS.SSS.SSS.S.	5      r	 " S S\5      r
 " S S \5      r " S! S"\5      r " S# S$\5      rg)%z'Extractors for FoolFuuka 4chan archives   )BaseExtractorMessage   )text    Nc                   L    \ rS rSrSrSrSrSrSrS r	S r
S	 rS
 rS rS rSrg)FoolfuukaExtractor   2Base extractor for FoolFuuka based boards/archives	foolfuukaz+{timestamp_ms} {filename_media}.{extension}z${board[shortname]}_{num}_{timestamp}defaultc                     [         R                  " X5        U R                  S:X  a  U R                  U l        g U R                  S:X  a  SU l        SU l        g SU l        g )Nb4karchivedmoeFT)r   __init__category_remote_directremoterefererfixup_redirectselfmatchs     K/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/foolfuuka.pyr   FoolfuukaExtractor.__init__   sL    t+==E!--DK]]m+ DL"&D"'D    c              #     #    [         R                  SU R                  5       4v   U R                  5        H  nUS   nU(       d  M  US   nU(       d  SU;   a  U R	                  U5      nU(       a  US   S:X  a  U R
                  U-   nUS   R                  S5      u  US'   oAS	'   US
   R                  S5      S   US'   [        R                  " US   R                  S5      S   5      US'   [         R                  X14v   M     g 7f)N media
media_linkremote_media_linkr   /.filename	extensionmedia_filenamefilename_media
media_origtimestamp_ms)
r   	Directorymetadatapostsr   root
rpartitionr   	parse_intUrl)r   postr   url_s        r   itemsFoolfuukaExtractor.items!   s     T]]_44JJLDME%C.%7kk%(s1v}ii#o g))#. 3Dak!2%*+;%<%G%G%LQ%OD!"#'>>l#..s3A6$8D ++s((! !s   DDc                     g)zReturn general metadataN r   s    r   r+   FoolfuukaExtractor.metadata5       r   c                     g)z*Return an iterable with all relevant postsNr7   r8   s    r   r,   FoolfuukaExtractor.posts8   r:   r   c                 (  ^ U R                  US   5      R                  n[        R                  " USS5      nUR                  S5      (       a  UR	                  S5      (       a  USS nU$ U R
                  (       a  UR                  S5      u  mpES	S	S	S	S	S	S	S	S	S
S.
nUR                  SS5      S   nXv;   a  Xg   nSU SU SU 3nU$ [        U4S jS 5       5      (       a0  UR                  S5      u  pn
[        U	5      S:  a  T SU	SS  SU
 3nU$ )zResolve a remote media linkr!   z%http-equiv="Refresh" content="0; url="zhttps://thebarchive.com/z.webmNr"   z
warosu.orgzarchive.4plebs.org)
3bizckdiyfaicjplitscitg      zhttps://z/full_image/c              3   ,   >#    U  H	  oT;   v   M     g 7f)Nr7   ).0archivepaths     r   	<genexpr>,FoolfuukaExtractor.remote.<locals>.<genexpr>]   s      9 58_ 58s   )zb4k.zdesuarchive.zpalanq.r#      )
requestr   extr
startswithendswithr   r.   splitanylen)r   r   pager2   r3   r$   board_domainsboarddomainnameextrO   s              @r   r   FoolfuukaExtractor.remote;   sI   ||E"567<<iiEsK>>455||G$$#2h@ 
=    #s 3D!
 $########+M IIc1%a(E%&- %XJG 
  9 58 9 9 9'2237t9r>!F!D"I;au5C
r   c                     US   $ )Nr!   r7   )r   r   s     r   r   !FoolfuukaExtractor._remote_directe   s    ())r   )r   r   r   N)__name__
__module____qualname____firstlineno____doc__basecategoryfilename_fmtarchive_fmtexternalr   r4   r+   r,   r   r   __static_attributes__r7   r   r   r	   r	      s8    <L@L8KH()(&9(T*r   r	   zhttps://archive.4plebs.orgz(?:archive\.)?4plebs\.org)r-   patternzhttps://archived.moezarchived\.moezhttps://archiveofsins.comz(?:www\.)?archiveofsins\.comzhttps://arch.b4k.devzarch\.b4k\.(?:dev|co)zhttps://desuarchive.orgzdesuarchive\.orgzhttps://boards.fireden.netzboards\.fireden\.netzhttps://archive.palanq.winzarchive\.palanq\.winzhttps://rbt.asiaz1(?:rbt\.asia|(?:archive\.)?rebeccablacktech\.com)zhttps://thebarchive.comzthebarchive\.com)	4plebsr   archiveofsinsr   desuarchivefiredenpalanqrbtthebarchivec                   @    \ rS rSrSrSrSr\S-   rSr	S r
S rS	 rS
rg)FoolfuukaThreadExtractor   z=Base extractor for threads on FoolFuuka based boards/archivesthread)
{category}z{board[shortname]}z!{thread_num} {title|comment[:50]}z/([^/?#]+)/thread/(\d+)z$https://archived.moe/a/thread/12345/c                     [         R                  X5        U R                  S   U l        U R                  S   U l        S U l        g Nr?   )r	   r   groupsr\   rx   datar   s     r   r   !FoolfuukaThreadExtractor.__init__   s5    ##D0[[_
kk"o	r   c                     U R                   S-   nU R                  U R                  S.nU R                  XS9U R                     U l        U R                  S   $ )Nz/_/api/chan/thread/)r\   numparamsop)r-   r\   rx   request_jsonr~   )r   r2   r   s      r   r+   !FoolfuukaThreadExtractor.metadata   sO    ii//::dkk:%%c%9$++F	yyr   c                     U R                   S   4nU R                   R                  S5      =n(       a?  [        UR                  5       5      nUR	                  S S9  [
        R                  " X5      $ U$ )Nr   r,   c                     U S   $ )N	timestampr7   )ps    r   <lambda>0FoolfuukaThreadExtractor.posts.<locals>.<lambda>   s    Q{^r   )key)r~   getlistvaluessort	itertoolschain)r   r   r,   s      r   r,   FoolfuukaThreadExtractor.posts   s]    iioIIMM'**5*(EJJ3J4??2--	r   )r\   r~   rx   N)rc   rd   re   rf   rg   subcategorydirectory_fmtBASE_PATTERNrm   exampler   r+   r,   rl   r7   r   r   rv   rv      s0    GK:M77G4Gr   rv   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
FoolfuukaBoardExtractor   r   r\   z /([^/?#]+)(?:/(?:page/)?(\d*))?$zhttps://archived.moe/a/c                 ~    [         R                  X5        U R                  S   U l        U R                  S   U l        g r{   )r	   r   r}   r\   rZ   r   s     r   r    FoolfuukaBoardExtractor.__init__   s.    ##D0[[_
KKO	r   c              #   f  #    U R                    SU R                   S3nU R                    SU R                   S3nU R                  n[        R                  " [
        R                  " US5      5       H  nU R                  U[        U5      -   5       n UR                  5       nS S S 5        W(       d    g UR                  5        H7  u  pxU[        U5      -   US'   [        US'   [        R                  US   U4v   M9     U(       d  M    g    g ! [         a    S n Nxf = f! , (       d  f       N= f7f)Nz/_/api/chan/index/?board=&page=r"   z/thread/r   r2   
_extractor)r-   r\   rZ   r   countr   r/   rS   strjson
ValueErrorr4   formatrv   r   Queue)	r   
index_basethread_baserZ   pnumresponsethreadsr   rx   s	            r   r4   FoolfuukaBoardExtractor.items   s     		{";DJJ<vN
1TZZL9yyOODNN4$;<Dj3t945#&mmoG 6 &}} +fSk 9u'?|$mmVE]F::  /
 t! = " #"G# 65sC   BD1D D$A!D1	D1DD DD  
D.	*D1)r\   rZ   N)rc   rd   re   rf   rg   r   r   rm   r   r   r4   rl   r7   r   r   r   r      s$    <K@@G'G$
r   r   c                   D    \ rS rSrSrSrSr\S-   rSr	Sr
S rS	 rS
 rSrg)FoolfuukaSearchExtractor   zDBase extractor for search results on FoolFuuka based boards/archivessearch)ry   r   z{search}z(/([^/?#]+)/search((?:/[^/?#]+/[^/?#]+)+)z)https://archived.moe/_/search/text/QUERY/)g      ?g      ?c                    [         R                  X5        0 =U l        nS nU R                  S   R	                  S5       H(  nU(       a  [
        R                  " U5      X#'   S nM&  UnM*     U R                  S   nUS:w  a  XRS'   g g )Nr?   r"   r|   r3   boards)r	   r   r   r}   rW   r   unescape)r   r   r   r   argr\   s         r   r   !FoolfuukaSearchExtractor.__init__   s~    ##D0!!f;;r?((-C"mmC0 . BC<$8 r   c                 >    SU R                   R                  SS5      0$ )Nr   r   r   )r   r   r8   s    r   r+   !FoolfuukaSearchExtractor.metadata   s    $++//&"566r   c              #     #    U R                   S-   nU R                  R                  5       n[        R                  " UR                  S5      S5      US'   SU;  a  SUS'     U R                  XS9n[        U[        5      (       a   UR                  S5      (       a  g US   S	   nO[        U[        5      (       a	  US
   S	   nOg U S h  vN   [        U5      S::  a  g US==   S-  ss'   M  ! [         a     g f = f N37f)Nz/_/api/chan/search/rZ   r   filterr   r   error0r,   r   rK   )r-   r   copyr   r/   r   r   r   
isinstancedictr   rY   )r   r2   r   r~   r,   s        r   r,   FoolfuukaSearchExtractor.posts   s     ii//!!#

6(:A>v6!%F8(((< $%%88G$$S	'*D$''Q(5zQ6NaN%    s7   AD "C. 1AD 
C>#D .
C;8D :C;;D r   N)rc   rd   re   rf   rg   r   r   r   rm   r   request_intervalr   r+   r,   rl   r7   r   r   r   r      s4    NK8MHHG9G!% 7 r   r   c                   :    \ rS rSrSrSrSr\S-   rSr	S r
S rS	rg
)FoolfuukaGalleryExtractori  z&Base extractor for FoolFuuka galleriesgallery)ry   z{board}r   z/([^/?#]+)/gallery(?:/(\d+))?zhttps://archived.moe/a/galleryc                 6    U R                   S   =U l        nSU0$ )Nr|   r\   )r}   r\   )r   r\   s     r   r+   "FoolfuukaGalleryExtractor.metadata  s!    ![[_,
Ur   c              #     #    U R                   S   nUc  [        R                  " S5      OU4nU R                   SU R                   S3nU H3  nU R                  U[        U5      -   5      nU(       d    g U S h  vN   M5     g  N	7f)Nr?   r   z/_/api/chan/gallery/?board=r   )r}   r   r   r-   r\   r   r   )r   r   pagesbaser,   s        r   r,   FoolfuukaGalleryExtractor.posts  sz     {{2&*l	"))7

|6JD%%dSY&67E	  s   A8B:B;
B)r\   N)rc   rd   re   rf   rg   r   r   r   rm   r   r+   r,   rl   r7   r   r   r   r     s)    0K8M==G.G 	r   r   )rg   commonr   r   r   r   r   r	   updater   rv   r   r   r   r7   r   r   <module>r      s    . *  V* V*r "((,/
 '#
 ,2
 '+
 *&
 -*
 -*
 #G
 *&C%* %P1 : 0  F4 1 4 n 2 r   