
    i                         S r SSKJrJr  SSKJrJr   " S S\5      r " S S\5      r " S	 S
\5      r	 " S S\5      r
g)z!Extractors for https://fantia.jp/   )	ExtractorMessage   )textutilc                   h    \ 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S jrSS jrS rS rS rSrg)FantiaExtractor   z Base class for Fantia extractorsfantiazhttps://fantia.jp)z
{category}z{fanclub_id}z{post_id}_{file_id}.{extension}z{post_id}_{file_id}Tc                     SSS.U l         SSSSSU R                  S-   S.U l        U R                  (       a=  U R	                  S5      (       d  U R
                  R                  S	5        S
[        l        g g )Nz!application/json, text/plain, */*XMLHttpRequest)AcceptzX-Requested-With     z'/images/fallback/plan/thumb_default.png)idpricelimitnamedescriptionthumb)_session_idzno '_session_id' cookie setF)headersroot_empty_plan_warningcookies_checklogwarningr	   selfs    H/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/fantia.py_initFantiaExtractor._init   st    : 0

 YY!JJ
 ==%%&677  !>?',O$     c           	   #   T  #    U R                  5        GH  nU R                  U5      nSUS'   U R                  U5      n[        U5      US'   SUS'   U H  nU R	                  X$5      n[
        R                  SU4v   US   S:w  a'  U R                  R                  SUS   US	   US
   5        U H_  nUR                  U5        US==   S-  ss'   [        R                  " US   =(       d    US   U5        [
        R                  US   U4v   Ma     M     US==   S-  ss'   GM     g 7f)Nr   numcontent_countcontent_numr   visible_statusvisiblez8Unable to download '%s' files from %s#post-content-id-%spost_urlr   r   content_filenamefile_url)posts_get_post_data_get_post_contentslen_process_contentr   	Directoryr   r   updater   nameext_from_urlUrl)r    post_idpostcontentscontentfilesfiles          r!   itemsFantiaExtractor.items(   s1    zz|G&&w/DDK..t4H$'MD!"#D#--d<''T11+,	9HH$$0189I1JZ('$-9
 "DKK%K1$K))/0DD4DdL!++tJ'7== " $" 1$3 $s   D&D(c                     g)zReturn post IDsN r   s    r!   r.   FantiaExtractor.postsD   s    r$   Nc              #      #    Uc  0 nSUS'    U R                  XS9R                  nU R                  U5        S n[        R                  " XCS5       H  nUv   M	     U(       d  g US==   S-  ss'   Me  7f)Nr   page)params")requestr   _csrf_tokenextract_iter)r    urlrD   needlerC   	target_ids         r!   _paginationFantiaExtractor._paginationG   s|     >Fv<<<388DT"I!..tSA	 B 6NaN s   A1A3c                     U(       d(  U R                  U R                  S-   5      R                  n[        R                  " USS5      U R                  S'   g )N/zname="csrf-token" content="rE   zX-CSRF-Token)rF   r   r   extrr   )r    rC   s     r!   rG   FantiaExtractor._csrf_tokenX   s@    <<		C055D'+yy/(6^$r$   c                    U R                   S-   U-   nU R                  X R                  S9S   nUS   U R                   S-   [        US   5      -   US   US   US   US	   U R	                  US	   S
5      US   S   US   S   S   US   S   S   US   S   U R                   S-   [        US   S   5      -   US    Vs/ s H  oDS   PM	     snUS.$ s  snf )zFetch and process post dataz/api/v1/posts/)r   r8   r   z/posts/titlecommentrating	posted_atz%a, %d %b %Y %H:%M:%S %zfanclubuserr   
/fanclubs/tags)r7   r+   
post_titlerT   rU   rV   date
fanclub_idfanclub_user_idfanclub_user_namefanclub_namefanclub_urlrZ   _data)r   request_jsonr   strparse_datetime)r    r7   rI   respts        r!   r/   FantiaExtractor._get_post_data^   s   ii((0  ll ;FCDz		I-DJ?w-I8nk*''[!#=?y/$/#Iv6t<!%i!8!@ OF399\1#d9od6K2LL(,V51vY5
 	
 6s   =Cc           
          US   S   n US   S   S   nUR                  SSSSUSS S.5        U$ ! [         a     U$ f = f)Nrb   post_contentsr   originalr   r*   )r   rS   categorydownload_urir)   plan)insert	Exception)r    r8   r9   rI   s       r!   r0   "FantiaExtractor._get_post_contentst   sq    =1	w-(4C OOA # #"+     	 	s   0 
>>c                 j   US   US'   US   US'   UR                  S5      =(       d    SUS'   US   US	'   UR                  S
5      =(       d    SUS'   US==   S-  ss'   US   =(       d    U R                  US'   / nSU;   a)  US    H   nUR                  US   US   S   S.5        M"     SU;   a4  US   nUS   S:X  a  U R                  U-   nUR                  US   US.5        US   S:X  a  S
U;   a  [        R
                  " US
   5      nSnUR                  S5      =(       d    S Hz  nUR                  S5      n	[        U	[        5      (       a  Xy-  nM/  [        U	[        5      (       d  MF  SU	;   d  MN  U	S   n
UR                  U
S   U R                  U
S   -   S.5        M|     XqS'   U$ SUS'   U$ )Nrl   content_categoryrS   content_titlefilenamer   r,   r   
content_idrT   content_commentr(   r   rn   post_content_photosrI   rk   )file_idr-   rm   r   rO   blogopsr@   ro   fantiaImageoriginal_urlblogpost_text)	getr   appendr   r   
json_loads
isinstancerd   dict)r    r8   r:   r;   photorI   comment_json	blog_textopro   imgs              r!   r2    FantiaExtractor._process_content   s   #*:#6  ' 0_#*;;z#:#@b $T]\")++i"8">B]q v:$*:*:V G+ !67%+*/,z*BD E 8 W$.)C1v}ii#oLLgdm&)+ , :&(Y'-A??79+=>LI"&&u-33)fc**'I---62I /CLLc$i.2ii#n:M.M"O P 4 %.!  %'D!r$   )r   r   )Nr   N)__name__
__module____qualname____firstlineno____doc__rl   r   directory_fmtfilename_fmtarchive_fmtr   r"   r=   r.   rL   rG   r/   r0   r2   __static_attributes__r@   r$   r!   r	   r	      sK    *HD2M4L'KH-$%8 "6
,&'r$   r	   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)
FantiaCreatorExtractor   z&Extractor for a Fantia creator's workscreatorz1(?:https?://)?(?:www\.)?fantia\.jp/fanclubs/(\d+)z https://fantia.jp/fanclubs/12345c                 B    [         R                  X5        US   U l        g Nr   )r	   __init__
creator_idr    matchs     r!   r   FantiaCreatorExtractor.__init__   s      -(r$   c                 `    U R                    SU R                   S3nU R                  US S5      $ )NrY   z/postsz class="link-block" href="/posts/)r   r   rL   )r    rI   s     r!   r.   FantiaCreatorExtractor.posts   s3    :doo%6f=T+MNNr$   )r   Nr   r   r   r   r   subcategorypatternexampler   r.   r   r@   r$   r!   r   r      s    0KBG0G#Or$   r   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)
FantiaPostExtractor   z-Extractor for media from a single Fantia postr8   z.(?:https?://)?(?:www\.)?fantia\.jp/posts/(\d+)zhttps://fantia.jp/posts/12345c                 B    [         R                  X5        US   U l        g r   )r	   r   r7   r   s     r!   r   FantiaPostExtractor.__init__   s      -Qxr$   c                 <    U R                  5         U R                  4$ r   )rG   r7   r   s    r!   r.   FantiaPostExtractor.posts   s    r$   )r7   Nr   r@   r$   r!   r   r      s    7K?G-G r$   r   c                   *    \ rS rSrSrSrSrSrS rSr	g)	FantiaSupportingExtractor   zDExtractor for free and paid supporting fanclubs for the current user
supportingzP(?:https?://)?(?:www\.)?fantia\.jp/mypage/users/plans(?:\?type=((?:not_)?free))?z$https://fantia.jp/mypage/users/plansc              #      #    U R                   S-   nU R                   S-   nS[        0nU R                  S   nUc  SOU4 H7  nSU0nU R                  XS5       H  n[        R
                  X'-   U4v   M     M9     g 7f)Nz/mypage/users/plansrY   
_extractorr   )not_freefreetypez$class="user-avatar" href="/fanclubs/)r   r   groupsrL   r   Queue)r    rI   basedatar   	plan_typerD   r]   s           r!   r=   FantiaSupportingExtractor.items   s     ii//yy<'45{{1~15-D7JIi(F"..!GI
mmT%6<<I Ks   A:A<r@   N)
r   r   r   r   r   r   r   r   r=   r   r@   r$   r!   r   r      s    NK.G4G
=r$   r   N)r   commonr   r   r   r   r   r	   r   r   r   r@   r$   r!   <module>r      sE    ( & ai aHO_ O/ = =r$   