
    i2                        S r SSKJrJr  SSKJrJr  SSKJr  Sr " S S\5      r	 " S	 S
\	5      r
 " S S\	5      r " S S\	5      r " S S\	5      r " S S\	5      r " S S\	5      r " S S\	5      r " S S5      r\" SSS9S 5       rg)z$Extractors for https://inkbunny.net/   )	ExtractorMessage   )text	exception)cachez%(?:https?://)?(?:www\.)?inkbunny\.netc                   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Srg)InkbunnyExtractor   z"Base class for inkbunny extractorsinkbunny)
{category}z{username!l}z-{submission_id} {file_id} {title}.{extension}z	{file_id}zhttps://inkbunny.netc                 $    [        U 5      U l        g N)InkbunnyAPIapiselfs    J/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/inkbunny.py_initInkbunnyExtractor._init   s    t$    c              #   &  #    U R                   R                  5         U R                  5       nSnU R                  5        GHB  nUR	                  U5        U R                  US   S S 5      US'   US    Vs/ s H  oDS   PM	     snUS'   US    Vs/ s H  oUS	   PM	     snUS'   US
   nU H  nXs;   d  M
  X7   S:H  X7'   M     US	 US
	 [        R                  SU4v   [        US5       H  u  US'   nUR	                  U5        US   S:H  US'   U R                  US   S S 5      US'   [        R                  " US   U5        US   n	SU	;   a  U	SU R                   R                  -   -  n	[        R                  X4v   M     GME     g s  snf s  snf 7f)N)deletedfavoritefriends_onlyguest_blockhiddenpublicscrapscreate_datetimer   datekeywordskeyword_nametagsratingsnamefilest r   numr   	file_namefile_url_fullz/private_files/z?sid=)r   authenticatemetadatapostsupdateparse_datetime_isor   	Directory	enumerater   nameext_from_url
session_idUrl)
r   r.   to_boolpostkwrr'   keyfileurls
             r   itemsInkbunnyExtractor.items   s    ==?1 JJLDKK!22&',.DL9=j9IJ9I2~.9IJDL26y/B/Qy/BDOME;!%c!1DI  Z W##R--%.ua%8!UTD!#'	?c#9Y#66*+CR0 2V%%d;&7>?+$+7TXX%8%888Ckk3,, &9! ! KBs%   A3F5FFFF5CFc                     gN rB   r   s    r   r/   InkbunnyExtractor.posts@       r   c                     grA   rB   r   s    r   r.   InkbunnyExtractor.metadataC   rD   r   )r   N)__name__
__module____qualname____firstlineno____doc__categorydirectory_fmtfilename_fmtarchive_fmtrootr   r>   r/   r.   __static_attributes__rB   r   r   r
   r
      s3    ,H2MBLK!D% -Dr   r
   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
InkbunnyUserExtractorG   z$Extractor for inkbunny user profilesuserz*/(?!s/)(gallery/|scraps/)?(\w+)(?:$|[/?#])zhttps://inkbunny.net/USERc                     UR                  5       u  o l        U(       d  S U l        O&US   S:X  a  SU l        SU l        OSU l        SU l        [        R                  X5        g )N    ggallerynor   only)groupsrU   r   subcategoryr
   __init__)r   matchkinds      r   r^   InkbunnyUserExtractor.__init__M   sR    ,,.iDK!W^(DDK'D DK""4/r   c                     U R                  S5      nU R                  U R                  US.nU(       a  UR                  S5      (       a  SUS'   U R                  R                  U5      $ )Norderby)usernamer   rc   unread_yesunread_submissions)configrU   r   
startswithr   search)r   rc   paramss      r   r/   InkbunnyUserExtractor.postsY   s[    ++i(		

 w)))44+0F'(xxv&&r   )r   r]   rU   NrG   rH   rI   rJ   rK   r]   BASE_PATTERNpatternexampler^   r/   rQ   rB   r   r   rS   rS   G   s$    .KJJG)G
0	'r   rS   c                   <    \ rS rSrSrSr\S-   rSrS r	S r
S rS	rg
)InkbunnyPoolExtractore   zExtractor for inkbunny poolspoolzd/(?:poolview_process\.php\?pool_id=(\d+)|submissionsviewall\.php\?((?:[^#]+&)?mode=pool(?:&[^#]+)?))z7https://inkbunny.net/poolview_process.php?pool_id=12345c                     [         R                  X5        US   =n(       a  X l        SU l        g [        R
                  " US   5      nUR                  S5      U l        UR                  SS5      U l        g )Nr   
pool_orderr   pool_idrc   )r
   r^   rw   rc   r   parse_queryget)r   r_   pidrk   s       r   r^   InkbunnyPoolExtractor.__init__n   s_    ""4/(?3?L'DL%%eAh/F!::i0DL!::i>DLr   c                     SU R                   0$ )Nrw   )rw   r   s    r   r.   InkbunnyPoolExtractor.metadatax   s    4<<((r   c                 j    U R                   U R                  S.nU R                  R                  U5      $ )N)rw   rc   )rw   rc   r   rj   r   rk   s     r   r/   InkbunnyPoolExtractor.posts{   s,    ||||
 xxv&&r   )rc   rw   NrG   rH   rI   rJ   rK   r]   rn   ro   rp   r^   r.   r/   rQ   rB   r   r   rr   rr   e   s0    &K 7 7G HG?)'r   rr   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)InkbunnyFavoriteExtractor   z%Extractor for inkbunny user favoritesr   )r   z{favs_username!l}	Favoriteszr/(?:userfavorites_process\.php\?favs_user_id=(\d+)|submissionsviewall\.php\?((?:[^#]+&)?mode=userfavs(?:&[^#]+)?))zAhttps://inkbunny.net/userfavorites_process.php?favs_user_id=12345c                    [         R                  X5        US   =n(       a  X l        U R                  SS5      U l        g [
        R                  " US   5      nUR                  S5      U l        UR                  SS5      U l        g )Nr   rc   fav_datetimer   user_id)r
   r^   r   rh   rc   r   rx   ry   )r   r_   uidrk   s       r   r^   "InkbunnyFavoriteExtractor.__init__   sj    ""4/(?3?L;;y.ADL%%eAh/F!::i0DL!::i@DLr   c                     U R                    SU R                   3nU R                  U5      R                  n[        R                  " USS5      n[        R                  " USS5      nU R                  US.$ )Nz(/userfavorites_process.php?favs_user_id=z<a rel="author"z</a>zhref="/")favs_user_idfavs_username)rP   r   requestr   extr)r   r=   page	user_linkr   s        r   r.   "InkbunnyFavoriteExtractor.metadata   so    ))   $~/||C %%IId$5v>			)Y< !LL*
 	
r   c                     U R                   U R                  S.nU R                  (       a%  U R                  R                  S5      (       a  SUS'   U R                  R	                  U5      $ )N)r   rc   re   rf   rg   )r   rc   ri   r   rj   r   s     r   r/   InkbunnyFavoriteExtractor.posts   sR     LL LL
 <<DLL33I>>+0F'(xxv&&r   )rc   r   N)rG   rH   rI   rJ   rK   r]   rM   rn   ro   rp   r^   r.   r/   rQ   rB   r   r   r   r      s5    /KDM ; ;G%GA
'r   r   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
InkbunnyUnreadExtractor   z)Extractor for unread inkbunny submissionsunreadzA/submissionsviewall\.php\?((?:[^#]+&)?mode=unreadsubs(?:&[^#]+)?)zGhttps://inkbunny.net/submissionsviewall.php?text=&mode=unreadsubs&type=c                 j    [         R                  X5        [        R                  " US   5      U l        g Nr   r
   r^   r   rx   rk   r   r_   s     r   r^    InkbunnyUnreadExtractor.__init__   &    ""4/&&uQx0r   c                     U R                   R                  5       nUR                  SS 5        UR                  SS 5        SUS'   U R                  R	                  U5      $ )Nridmoderf   rg   )rk   copypopr   rj   r   s     r   r/   InkbunnyUnreadExtractor.posts   sN    !!#

5$

64 ',#$xxv&&r   rk   Nrm   rB   r   r   r   r      s*    3K < <G.G1'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
)InkbunnySearchExtractor   z%Extractor for inkbunny search resultsrj   z=/submissionsviewall\.php\?((?:[^#]+&)?mode=search(?:&[^#]+)?)zFhttps://inkbunny.net/submissionsviewall.php?text=TAG&mode=search&type=c                 j    [         R                  X5        [        R                  " US   5      U l        g r   r   r   s     r   r^    InkbunnySearchExtractor.__init__   r   r   c                     SU R                   0$ )Nrj   r   r   s    r   r.    InkbunnySearchExtractor.metadata   s    $++&&r   c                    U R                   R                  5       nUR                  nU" SS 5        U" SS 5      US'   U" SS 5      US'   U" SS 5      US'   U" SS 5      =n(       a[  U R                   S	U 3nU R	                  U5      R
                  n[
        R                  " US
S5      nUR                  S5      S   US'   U R                  R                  U5      $ )Nr   
stringtypestring_join_typedays	dayslimitartistrd   favsby/z	?user_id='&rW   r   )
rk   r   r   rP   r   r   r   	partitionr   rj   )r   rk   r   r   r=   r   r   s          r   r/   InkbunnySearchExtractor.posts   s    !!#jjE4%(t%<!"!&$/{ 40z4((6(YYKq)C<<$))Diik37G%,%6%6s%;A%>F>"xxv&&r   r   Nr   rB   r   r   r   r      s/    /K 8 8G-G1''r   r   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
InkbunnyFollowingExtractor   z#Extractor for inkbunny user watches	followingzq/(?:watchlist_process\.php\?mode=watching&user_id=(\d+)|usersviewall\.php\?((?:[^#]+&)?mode=watching(?:&[^#]+)?))zFhttps://inkbunny.net/watchlist_process.php?mode=watching&user_id=12345c                     [         R                  X5        US   =(       d(    [        R                  " US   5      R	                  S5      U l        g )Nr   r   r   )r
   r^   r   rx   ry   r   r   s     r   r^   #InkbunnyFollowingExtractor.__init__   s@    ""4/Qx 6U1X&**95 	r   c              #   |  #    U R                   S-   nSU R                  S.nU R                  XS9 nUR                  R	                  S5      u  pnUR
                  nS S S 5        [
        R                  " U5      n[
        R                  " UR                  S5      S5      US'   S[        0n [
        R                  " WS	S
UR                  S5      5       H%  n[        R                  U R                   U-   U4v   M'     SU;  a  g US==   S-  ss'   U R                  XS9R
                  nM  ! , (       d  f       N= f7f)Nz/watchlist_process.phpwatching)r   r   r   ?r   r   
_extractorz&<a class="widget_userNameSmall" href="r   zid="changethumboriginal_form"z<a title='next page' )rP   r   r   r=   r   r   rx   	parse_intry   rS   extract_iterindexr   Queue)r   r=   rk   response_r   datarU   s           r   r>    InkbunnyFollowingExtractor.items   s    ii22$>\\#\-%\\33C8NCF==D . !!&)

6(:A>v34))BCJJ>?A mmTYY%5t;;A
 'd26NaN<<<388D  .-s   .D<+D+CD<+
D95D<)r   N)rG   rH   rI   rJ   rK   r]   rn   ro   rp   r^   r>   rQ   rB   r   r   r   r      s*    -K ; ;G.G6
9r   r   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
InkbunnyPostExtractori  z'Extractor for individual Inkbunny postsr8   z/s/(\d+)zhttps://inkbunny.net/s/12345c                 B    [         R                  X5        US   U l        g r   )r
   r^   submission_idr   s     r   r^   InkbunnyPostExtractor.__init__  s    ""4/"1Xr   c                     U R                   R                  SU R                  045      nUS   c  [        R                  " S5      eU$ )Nr   rW   
submission)r   detailr   r   NotFoundError)r   submissionss     r   r/   InkbunnyPostExtractor.posts  sC    hhoo9K9K'L&NOq>!)),77r   )r   Nrm   rB   r   r   r   r     s#    1K[(G,G&r   r   c                   N    \ rS rSrSrS rS rS r  SS jrSS jr	S r
S	 rS
rg)r   i  zGInterface for the Inkunny API

Ref: https://wiki.inkbunny.net/wiki/API
c                     Xl         S U l        g r   	extractorr5   )r   r   s     r   r^   InkbunnyAPI.__init__#  s    "r   c                     [        U5       VVs0 s H  u  p#US   U_M     nnnSR                  U5      SSS.nS/[        U5      -  nU R                  SU5      S    H  nX1XCS      '   M     U$ s  snnf )z5Get full details about submissions with the given IDsr   ,rf   )submission_idsshow_description
show_poolsNr   )r3   joinlen_call)r   r   idxsubidsrk   s         r   r   InkbunnyAPI.detail'  s     &k2
2  #%2 	 

 "hhsm %
 fs3x'::mV4]CC58012 D
s   A/c                 $    U R                  U5      $ )zPerform a search)_pagination_searchr   s     r   rj   InkbunnyAPI.search8  s    &&v..r   c                 ~    U(       a  SOSU(       a  SOSU(       a  SOSU(       a  SOSS.nU R                  SU5        g)z!Change allowed submission ratingsrf   rZ   )ztag[2]ztag[3]ztag[4]ztag[5]
userratingN)r   )r   nuditysexualviolencestrong_violencerk   s         r   set_allowed_ratingsInkbunnyAPI.set_allowed_ratings<  s7      &e4'eT%e4.eD	
 	

<(r   c                     U R                   R                  5       u  p#U(       a  [        R                  U=(       d    S5        U(       a  [        XU5      U l        g [        U SS5      U l        U R                  5         g )Nguestr)   )r   _get_auth_info_authenticate_impl
invalidater5   r   )r   r   rd   passwords       r   r-   InkbunnyAPI.authenticateG  sZ    !^^::<))(*=g>0JDO0wCDO$$&r   c                    SU-   S-   n U R                   US'   U R                  R                  X2S9nSU;  a  U$ [        US   5      S:X  a  U R	                  SS9  MT  [
        R                  " UR                  S	5      5      e)
Nzhttps://inkbunny.net/api_z.phpTsidr   
error_code2)r   error_message)r5   r   request_jsonstrr-   r   AbortExtractionry   )r   endpointrk   r=   r   s        r   r   InkbunnyAPI._callQ  s    )H4v= OOF5M>>..s.BD4'4%&#-!!T!2++DHH_,EFFr   c              #      #    SUS'   SUS'   SUS'    U R                  SU5      nUS   (       d  g U R                  US   5       S h  vN   US   US   :  a  g SU;   a  US	 US	   US	'   US==   S-  ss'   Mf   N17f)
Nr   r   rf   get_ridsubmission_ids_onlyrj   r   pages_countr   )r   r   )r   rk   r   s      r   r   InkbunnyAPI._pagination_searcha  s     v!y(-$%::h/D&{{4#6777F|tM22F"9% $Uu6NaN 
 8s   AA;A92A;r   N)TTTT)F)rG   rH   rI   rJ   rK   r^   r   rj   r   r-   r   r   rQ   rB   r   r   r   r     s3    
"/ 7;;?	)'G  r   r   i3)maxagekeyargc                     U R                   R                  R                  SU5        SnXS.nU R                   R                  USUS9nSU;  a%  [        R
                  " UR                  S5      5      eUS   $ )NzLogging in as %sz"https://inkbunny.net/api_login.php)rd   r   POST)methodr   r   r   )r   loginfor   r   AuthenticationErrorry   )r   rd   r   r=   r   s        r   r   r   u  sq    MM-x8
.C 7D==%%c&t%DDD++DHH_,EFF;r   N)rK   commonr   r   r)   r   r   r   rn   r
   rS   rr   r   r   r   r   r   r   r   rB   r   r   <module>r     s    + &   81	 1h'- '<'- '<)' 1 )'X'/ '('/ 'D$9!2 $9N- "U  U p i"	 #	r   