
    il                         S r SSK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 S\	5      rg)z<Extractors for https://rule34.world/ and https://rule34.xyz/   )BooruExtractor   )text	exception)cache    Nz+(?:https?://)?(?:www\.)?rule34\.(xyz|world)c            	           \ rS rSrSrSrSrSrSrSSSSS	S
SSS.r	SSSSS.r
S rS rS rS rS rS rS!S jrS r\" SSS9S 5       rS rg)"Rule34xyzExtractor   	rule34xyzzhttps://rule34.xyzzhttps://rule34xyz.b-cdn.netz{category}_{id}.{extension}<   general	copyright	characterartistsystemmeta)Nr   r   r                zpic.jpgzmov.mp4z
mov720.mp4z
mov480.mp4)10100101102c                 l    US   S:X  a  SU l         SU l        SU l        [        R                  " X5        g )Nr   worldrule34worldzhttps://rule34.worldzhttps://rule34storage.b-cdn.net)categoryrootroot_cdnr   __init__)selfmatchs     K/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/rule34xyz.pyr"   Rule34xyzExtractor.__init__+   s1    8w)DM.DI=DM,    c                     U R                  S5      =n(       a-  [        U[        5      (       a  UR                  S5      nXl        g SU l        g )Nformat,)r   r   r   r   )config
isinstancestrsplitformats)r#   r/   s     r%   _initRule34xyzExtractor._init2   s=    kk(++7+'3''!--,"L6DLr'   c           	         US   nU R                    H%  nX2;   d  M
  U R                  R                  U5      n  O5   U R                  R	                  SUS   5        [        [        U5      5      nUS   nX#   S   (       a  U R                  OU R                  nU SUS-   SU SU SW 3	=US	'   nX1S
'   UR                  S5      S   US'   U$ )Nfilesz"%s: Requested format not availableidr   z/posts/i  /.file_url	format_idr)   )
r/   FORMATSgetlogwarningnextiterr!   r    	partition)r#   postr3   fmt	extensionpost_idr    urls           r%   	_file_urlRule34xyzExtractor._file_url:   s    W<<C| LL,,S1	  
 HHA4:NtE{#Ct* %
1t}}499fGGtO,AgYay)M	NZ3[",,S1!4X
r'   c                     UR                  SS 5        U R                  US   5      US'   US   R                  S5      u  US'   o!S'   SU;   a  US    Vs/ s H  o3S   PM	     snUS'   g g s  snf )	Nr3   createddatefilenamer6   r)   tagsvalue)popparse_datetime_iso
rpartition)r#   r@   _ts       r%   _prepareRule34xyzExtractor._prepareN   sx    $..tI?V.2:.>.I.I#.N+Z!(^T>04V=1gJ=DL =s   A*c                 0   SU;  a#  UR                  U R                  US   5      5        [        R                  " [        5      nUS    H  nX4S      R                  US   5        M     U R                  nUR                  5        H  u  pgXqSXV   -   '   M     g )NrK   r4   typerL   tags_)update_fetch_postcollectionsdefaultdictlistappend	TAG_TYPESitems)r#   r@   rP   rK   tagtypesrU   valuess           r%   _tagsRule34xyzExtractor._tagsU   s    KK((d45&&t,<CV$$S\2   JJLLD*05;&' )r'   c                 F    U R                    SU 3nU R                  U5      $ )Nz/api/v2/post/)r    request_json)r#   rC   rD   s      r%   rX   Rule34xyzExtractor._fetch_post`   s'    =	2  %%r'   Nc              #   l  #    U R                    SU 3nUc  0 nU R                  U R                  -  US'   U R                  US'   SUS'   SUS'   SUS	'   U R                  n U R                  US
US9nUS    S h  vN   [	        US   5      U:  a  g US==   U R                  -  ss'   US   US'   MR   N87f)Nz/apiSkiptakeF
CountTotalTIncludeLinksr   OrderByPOST)methodjsonr^   cursor)r    
page_startper_pagere   len)r#   endpointparamsrD   	thresholddatas         r%   _paginationRule34xyzExtractor._paginationd   s     4z*>F4==8vv$|!%~yMM	$$Sf$EDG}$$4=!I-6Ndmm+N#H~F8  %s   A7B49B2:9B4c                     U R                  5       u  pU(       a)  U R                  X5      U R                  R                  S'   g g )NAuthorization)_get_auth_info_login_implsessionheaders)r#   usernamepasswords      r%   loginRule34xyzExtractor.loginz   s=    !002  4 LL  1 r'   i r   )maxagekeyargc                 &   U R                   R                  SU5        U R                  S-   nXS.nU R                  USUSS9nUR	                  S5      =n(       a  SU-   $ [
        R                  " UR	                  S	5      =n=(       a    S
U S
35      e)NzLogging in as %sz/api/v2/auth/signin)emailr   rm   F)rn   ro   fataljwtzBearer message")r;   infor    re   r:   r   AuthenticationError)r#   r   r   rD   rw   responser   msgs           r%   r}   Rule34xyzExtractor._login_impl   s    ((3ii//!8$$T % 8 ,,u%%3%s?"++LL++S;1SE= 	=r'   )r   r/   r    r!   )N)__name__
__module____qualname____firstlineno__r   r    r!   filename_fmtrr   r]   r9   r"   r0   rE   rR   rb   rX   rx   r   r   r}   __static_attributes__ r'   r%   r
   r
      s    HD,H0LH 	I 	G-7(>	1&.,5 *Q'= (=r'   r
   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	Rule34xyzPostExtractor   r@   z{id}z/post/(\d+)zhttps://rule34.xyz/post/12345c                 @    U R                  U R                  S   5      4$ )Nr   )rX   groupsr#   s    r%   postsRule34xyzPostExtractor.posts   s      Q022r'   r   N)r   r   r   r   subcategoryarchive_fmtBASE_PATTERNpatternexampler   r   r   r'   r%   r   r      s     KK^+G-G3r'   r   c                   :    \ rS rSrSrSrSr\S-   rSr	S r
S rS	rg
)Rule34xyzPlaylistExtractor   playlist)
{category}z{playlist_id}zp_{playlist_id}_{id}z/playlists/view/(\d+)z'https://rule34.xyz/playlists/view/12345c                 $    SU R                   S   0$ )Nplaylist_idr   )r   r   s    r%   metadata#Rule34xyzPlaylistExtractor.metadata   s    t{{1~..r'   c                 H    SU R                   S   -   nU R                  U5      $ )Nz/v2/post/search/playlist/r   )r   rx   )r#   rt   s     r%   r    Rule34xyzPlaylistExtractor.posts   s%    .Q?))r'   r   Nr   r   r   r   r   directory_fmtr   r   r   r   r   r   r   r   r'   r%   r   r      s+    K3M(K55G7G/*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
)Rule34xyzTagExtractor   r_   )r   z{search_tags}zt_{search_tags}_{id}z/([^/?#]+)$zhttps://rule34.xyz/TAGc                     [         R                  " [         R                  " U R                  S   5      R                  SS5      5      R	                  S5      U l        SSR                  U R
                  5      0$ )Nr   rP    |search_tagsz, )r   unquoter   replacer.   rK   joinr   s    r%   r   Rule34xyzTagExtractor.metadata   sX    LLKKN"#GC-//4uSz 		tyy344r'   c                 D    SnSU R                   0nU R                  X5      $ )Nz/v2/post/search/rootincludeTags)rK   rx   )r#   rt   ru   s      r%   r   Rule34xyzTagExtractor.posts   s&    )+11r'   )rK   Nr   r   r'   r%   r   r      s*    K3M(K^+G&G5
2r'   r   )__doc__boorur    r   r   r   rY   r   r
   r   r   r   r   r'   r%   <module>r      sR    C !   =y= y=x3/ 3*!3 *2. 2r'   