
    i@                         S r SSKJrJr  SSKJrJr  SSKJr  S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g)z%Extractors for https://www.fanbox.cc/   )	ExtractorMessage   )textutil)memcachez"(?:https?://)?(?:www\.)?fanbox\.cczN(?:https?://)?(?:(?!www\.)([\w-]+)\.fanbox\.cc|(?:www\.)?fanbox\.cc/@([\w-]+))c                       \ 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S rS r\" SS9S 5       r\" SS9S 5       rS rS rS rSrg)FanboxExtractor   z Base class for fanbox extractorsfanboxhttps://www.fanbox.cc)z
{category}z{creatorId}z{id}_{num}.{extension}z
{id}_{num}firefoxTc                 F   SSSS SSSS.U l         U R                  SS	5      U l        U R                  S
5      =n(       ac  [        U[        5      (       a  UR                  S5      nO[        U[        [        45      (       d  SnSU;   U l        SU;   U l	        SU;   U l
        OS=U l        =U l	        U l
        U R                  S5      (       a  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, */*r   zhttps://www.fanbox.cc/emptycorsz	same-site)AcceptOriginRefererCookiezSec-Fetch-DestzSec-Fetch-ModezSec-Fetch-SiteembedsTmetadata,)userplanr   r   commentsF)FANBOXSESSIDzno 'FANBOXSESSID' cookie set)headersconfigr   
isinstancestrsplitlisttuple
_meta_user
_meta_plan_meta_comments_warningcookies_checklogwarningr
   )selfincludess     H/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/fanbox.py_initFanboxExtractor._init   s   :./%$)
 kk(D1{{:..8.(C((#>>#.4-88+%1DO%1DO#-#9DFKKDOKdo0C;;z"""&D==%%&788  !?@',O$     c              #   $  #    U R                  S5      nU R                  5        H  nUb-  XS   :  a%  U R                  R                  SUS   US   U5        O% SUS   -   nU R	                  X0R
                  S9S   nU R                  U5      u  pV[        R                  S	U4v   U R                  XV5       S h  vN   M     g ! [         a?  nU R                  R                  SUS   UR                  R                  U5         S nANS nAff = f NU7f)
Nzfee-maxfeeRequiredz)Skipping post %s (feeRequired of %s > %s)idz'https://api.fanbox.cc/post.info?postId=r   bodyzSkipping post %s (%s: %s) )r   postsr)   r*   request_jsonr   	Exception	__class____name___extract_postr   	Directory_get_urls_from_post)r+   fee_maxitemurlexccontent_bodyposts          r-   itemsFanboxExtractor.items>   s    ++i(JJLD"wm1D'D  !L!%dT--@'KND:&C,,S,,,GOD
 "&!3!3D!9L##R--//CCC ! ! NHH$$%@%)$Z1G1GN NN Ds<   AD$C<<D8D9	D
D5DDDDc                     g)z Return all relevant post objectsN r+   s    r-   r7   FanboxExtractor.postsR   s    r0   c              #      #    U(       aN  [         R                  " U5      nU R                  XR                  S9S   nUS    S h  vN   US   nU(       a  MM  g g  N7f)Nr4   r5   rE   nextUrl)r   ensure_http_schemer8   r   )r+   rA   r5   s      r-   _paginationFanboxExtractor._paginationU   sV     ))#.C$$S,,$?GDG}$$y/C c %s   AAAAAc                    SUS'   UR                  SS5      =n(       GaT  SU;   a  US   US'   US   S:X  a  UR                  5       US'   S	U;   Ga#  / n/ n/ nUS	    Hy  nS
U;   a  UR                  US
   5        SU;   a   US    H  nUR                  US   5        M     SU;   a  UR                  US   5        SU;   d  Me  UR                  US   5        M{     SR                  U5      US'   U R	                  USU5        U R	                  USU5      =n(       aZ  [
        R                  n	UR                  5        V
s/ s H+  n
U
R                  SS5      R                  5       U	;   d  M)  U
PM-     sn
US'    U R                  US   5      US'   U(       a  UR                  S
5      OSUS
'   SUS'   UR                  S5      nU R                  (       a  Ub  U R                  U5      US'   U R                  (       a9  Ub6  U R                  US   5      nUR                  S5      =(       d    Sn X   US'   U R$                  (       a5  UR                  S5      (       a  U R'                  US    5      US!'   X!4$ SUS!'   X!4$ s  sn
f ! [         a	    SUS'    GNf = f! [          aZ    U Vs/ s H  oU:  d  M
  UPM     Os  snf sn=n(       a  U[#        U5         nOUS   R                  5       nUUS'   U=US'   X'    Nf = f)"zFetch and process post datarH   archivesr5   NhtmltypearticlearticleBodyblocksr   linksrA   imageIdfileId
contentimageMapfileMap	extensionr6   publishedDatetimedateFisCoverImage	creatorIdr   r2       r   feecommentCountr3   r   )popcopyappendjoin	_sort_mapr   EXTS_ARCHIVEvaluesgetlowerparse_datetime_isor9   r$   _get_user_datar%   _get_plan_dataKeyErrorminr&   _get_comment_data)r+   rD   rC   r[   imagesfilesblocklinkfile_mapextsfilecidplansrd   ffeesr   s                    r-   r<   FanboxExtractor._extract_post^   s   Z88FD11<1%+F3VF|y(&2&7&7&9]#<')(3EuV}5%'$)'ND#NN4;7 %3 E)eI&675(U8_5 4 #'))G"4Y|Z@#~~lIuMM8M,,D %-OO$5($5D88K4::<D $5(D$	 2248K3LMDL 4@|''/TV$^hh{#??s..s3DL??s''[(9:E((=).QC1$zV xx''#'#9#9$t*#EZ  !! $&Z !!E(  	 DL	   1',9u!SAu9949 T+D 8==?D"%DK,00Vuz1sC   <(I:(I:5I? *J ?JJK9#	J70J76A K98K9c                     UR                  U5      nU(       d  Uc  0 $ U$ U Vs0 s H  nXT;   d  M
  XTU   _M     sn=X'   nU$ s  snf )N)rm   )r+   r5   keyidsorigr3   news          r-   rj   FanboxExtractor._sort_map   sb    xx}2/4/ 
z BRL
 	
	C 

s
   	A	Ar   )keyargc                     SnSU0nU R                  X#U R                  S9nUS   nUR                  UR                  S5      5        U$ )Nz!https://api.fanbox.cc/creator.getrb   paramsr   r5   r   )r8   r   updaterf   )r+   
creator_idrA   r   datar   s         r-   rp   FanboxExtractor._get_user_data   sM    1z*  T\\ JF|DHHV$%r0   c           
          SnSU0nU R                  X#U R                  S9nSSSSSSUS S S.0nUS    H  nUS	 XeUS	   '   M     U$ )
Nz&https://api.fanbox.cc/plan.listCreatorrb   r   rc   r6   )r3   titlerd   descriptioncoverImageUrlrb   hasAdultContentpaymentMethodr5   r   rd   )r8   r   )r+   r   rA   r   r   r}   r   s          r-   rq   FanboxExtractor._get_plan_data   s{    6z*  T\\ J!! !!)##	
 	 LDV!%$u+ ! r0   c                 b   SU-   n/ n U(       aV  U R                  [        R                  " U5      U R                  S9S   S   nUR	                  US   5        US   nU(       a  MV  U$ ! [
         a<  nU R                  R                  SUR                  R                  U5         S nAU$ S nAff = f)Nz7https://api.fanbox.cc/post.getComments?limit=10&postId=r4   r5   commentListrE   rL   zcomments: %s: %s)
r8   r   rM   r   extendr9   r)   debugr:   r;   )r+   post_idrA   r   comlistrB   s         r-   rt   !FanboxExtractor._get_comment_data   s    #%,- 	L++++C0$,, , ')  01i( #   	LHHNN-s}}/E/EsKK	Ls   AA( (
B.21B))B.c              #     #    SnUR                  S5      =n(       ar  [        R                  " S5      R                  SU5      nUR	                  5       nSUS'   XES'   [        R
                  " XE5        X5S'   US	-  n[        R                  XE4v   U(       d  g S
U;   a  / n[        R                  " US
   SS5       H5  nSU;   a  UR                  U5        M  SU;   d  M$  UR                  U5        M7     [        R                  " US
   SS5       H  nUR                  U5        M     U HJ  n	UR	                  5       n[        R
                  " X5        XS'   X5S'   US	-  n[        R                  X4v   ML     S H  n
X;   d  M
  X    H  nU
S:X  a  X   U   nUR	                  5       nUS   US'   [        R
                  " US   U5        SU;   a  US   US'   UR                  S5      US'   UR                  S5      US'   UR                  S5      US'   X5S'   US	-  n[        R                  US   U4v   M     M     S H  n
X;   d  M
  X    H  nU
S:X  a  X   U   nUR	                  5       nUS   US'   [        R
                  " US   U5        SU;   a  US   US'   SU;   a  US   US'   UR                  S5      US'   X5S'   US	-  n[        R                  US   U4v   M     M     U R                  (       a  / nSU;   a  UR                  US   5        UR                  UR                  S0 5      R                  5       5        U H-  nU R                  X-5      nU(       d  M  X>S   S'   US	-  nUv   M/     g g 7f) Nrc   r   z/c/[0-9a-z_]+r6   Tra   fileUrlnumr   rR   zhref=""zfanbox.pixiv.net/images/entryzdownloads.fanbox.cczdata-src-original=")ru   r\   r\   originalUrlr^   r3   rY   widthheight)rv   r]   r]   rA   namefilenamevideoembedMapr   )rm   r   resubrg   nameext_from_urlr   Urlextract_iterrh   r   r   rl   _process_embed)r+   rC   rD   r   cover_image
final_post	html_urlshrefsrcrA   groupr@   embeds_foundembedembed_results                  r-   r>   #FanboxExtractor._get_urls_from_post   s    ((?33;3''/266r;GKJ)-J~&$/y!!!+: #u1HC++{66\!I)),v*>#N2d:$$T**d2$$T*	 O
 ((f)=)>E  %E !!YY[
%%c6(+9%$'5!qkk322 ! ,E$(/D
*+248!%J,0,?Jy)))$}*=zJ"d*26{2C
;/+/88D>Jx(*.((7*;Jw'+/88H+=Jx((+u%1HC!++tM':JFF 0 ,& *E$(/D	)+248!%J,0KJy)))$u+zB"d*26{2C
;/~15f
:.+/88D>Jx((+u%1HC!++tE{J>> 0 *& ;;L,&##L$9: 0 0R @ G G IJ%#224?#),Q&q"" & s   CM7B M7CM7D0M7c                 "   UR                  5       nUS   nUR                  S5      =(       d    UR                  S5      nU R                  S:X  a  SOSnS nSnUS:X  a  US	-   U-   nS
nO~US:X  a  US-   U-   nS
nOmUS:X  a  US-   U-   nS
nO\US:X  a!  SU-   n U R                  U5      n[        US'   O5US:X  a  SU-   nO)US:X  a  SU S3nOU R                  R                  SU5        U(       aY  X#S'   XsS'   [        R                  " Xs5        [        R                  n
U(       a   U R                  S:X  a  [        R                  n
XU4$ g ! [
         a=  n	S nU R                  R                  SXYR                  R                  U	5         S n	A	NS n	A	ff = f)NserviceProvidervideoId	contentIdytdlzytdl:r6   F
soundcloudzhttps://soundcloud.com/Tyoutubezhttps://youtube.com/watch?v=vimeozhttps://vimeo.com/r   zhttps://www.pixiv.net/fanbox/
_extractorz*Unable to extract fanbox embed %s (%s: %s)twitterzhttps://twitter.com/_/status/google_formsz"https://docs.google.com/forms/d/e/z/viewform?usp=sf_linkzservice not recognized: %sr   embedUrl)rg   rm   r   request_locationFanboxPostExtractorr9   r)   r*   r:   r;   r   r   r   Queuer   )r+   rD   r   r   provider
content_idprefixrA   is_videorB   msg_types              r-   r   FanboxExtractor._process_embed6  s   YY[
*+YYy)CUYY{-C
 KK61r|#22:=CH"77
BCH --j8CH! 2*<C?++C0 ,?
<("1*<C'7 \!68C HH98D"'w%(z"!!#2}}HDKK61";;*,,   J  !M!+]]-C-CSJ JJs   E 
F3F		F)r&   r%   r$   r   r   N)r;   
__module____qualname____firstlineno____doc__categoryrootdirectory_fmtfilename_fmtarchive_fmtbrowserr'   r.   rE   r7   rN   r<   rj   r   rp   rq   rt   r>   r   __static_attributes__rH   r0   r-   r
   r
      s    *H"D1M+LKGH->D(/"@"D Q  Q * V#p--r0   r
   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
FanboxCreatorExtractorif  z+Extractor for a pixivFANBOX creator's workscreatorz(?:/posts)?/?$zhttps://USER.fanbox.cc/c                 v    SnU R                   S   =(       d    U R                   S   nU R                  X-   5      $ )Nz5https://api.fanbox.cc/post.paginateCreator?creatorId=rc   r   )groups_pagination_creator)r+   rA   r   s      r-   r7   FanboxCreatorExtractor.postsl  s5    E[[^5t{{1~
''(899r0   c              #   T  #    U R                  XR                  S9S   nU R                  S5      =n(       a  [        US5      u  pEU(       a  X$S  nOS nU HL  n[        R
                  " U5      nU R                  XR                  S9S   nU(       a  XeS  nS nU S h  vN   MN     g  N	7f)Nr4   r5   offset
   )r8   r   r   divmodr   rM   )r+   rA   urlsr   quotient	remainderr7   s          r-   r   *FanboxCreatorExtractor._pagination_creatorq  s       ll ;FC[[**6*"("4HIIC))#.C%%c<<%@HEj) 	  s   BB(B&
B(rH   N)r;   r   r   r   r   subcategoryUSER_PATTERNpatternexampler7   r   r   rH   r0   r-   r   r   f  s$    5K..G'G:
r0   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	FanboxTagExtractori  z2Extractor for a pixivFANBOX creator's tagged workstagz/tags/([^/?#]+)zhttps://USER.fanbox.cc/tags/TAGc                     U R                   u  pn[        R                  " U5      U R                  S'   SU=(       d    U SU 3nU R	                  U5      $ )Nsearch_tagsz0https://api.fanbox.cc/post.listTagged?creatorId=z&tag=)r   r   unquotekwdictrN   )r+   r|   cid2r   rA   s        r-   r7   FanboxTagExtractor.posts  sR    3%)\\#%6M" [DMse5$$r0   rH   Nr;   r   r   r   r   r   r   r   r   r7   r   rH   r0   r-   r   r     s    <K//G/G%r0   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	r   i  z2Extractor for media from a single pixivFANBOX postrD   z/posts/(\d+)z"https://USER.fanbox.cc/posts/12345c                 (    U R                   S   SS.4$ )Nr   rc   )r3   r2   )r   rI   s    r-   r7   FanboxPostExtractor.posts  s    {{1~a8::r0   rH   Nr   rH   r0   r-   r   r     s    <K_,G2G;r0   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	FanboxHomeExtractori  z(Extractor for your pixivFANBOX home feedhomez/?$zhttps://fanbox.cc/c                 (    SnU R                  U5      $ )Nz,https://api.fanbox.cc/post.listHome?limit=10rN   r+   rA   s     r-   r7   FanboxHomeExtractor.posts  s    <$$r0   rH   Nr;   r   r   r   r   r   BASE_PATTERNr   r   r7   r   rH   r0   r-   r   r     s    2KV#G"G%r0   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	FanboxSupportingExtractori  z3Extractor for your supported pixivFANBOX users feed
supportingz/home/supportingz!https://fanbox.cc/home/supportingc                 (    SnU R                  U5      $ )Nz2https://api.fanbox.cc/post.listSupporting?limit=10r   r   s     r-   r7   FanboxSupportingExtractor.posts  s    B$$r0   rH   Nr   rH   r0   r-   r  r    s    =K00G1G%r0   r  c                   2    \ rS rSrSrSrSrSrSrSr	S r
S	rg)
FanboxRedirectExtractori  z*Extractor for pixiv redirects to fanbox.ccr   redirectNz7(?:https?://)?(?:www\.)?pixiv\.net/fanbox/creator/(\d+)z*https://www.pixiv.net/fanbox/creator/12345c              #      #    SU R                   S   -   nU R                  USS9n[        R                  US[        04v   g 7f)Nz%https://www.pixiv.net/fanbox/creator/rc   r   )notfoundr   )r   r   r   r   r   )r+   rA   locations      r-   rE   FanboxRedirectExtractor.items  sC     5AF((v(>mmX6L'MMMs   ?ArH   )r;   r   r   r   r   r   r   cookies_domainr   r   rE   r   rH   r0   r-   r  r    s$    4HKNHG:GNr0   r  N)r   commonr   r   r6   r   r   cacher   r   r   r
   r   r   r   r   r  r  rH   r0   r-   <module>r     s{    , &  4' N-i N-b
_ :% %;/ ;%/ %% %Ni Nr0   