
    iB                        S r SSKJrJrJr  SSKJrJrJr  SSK	J	r	J
r
  SSK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 " 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://www.iwara.tv/   )	ExtractorMessageDispatch   )textutil	exception)cachememcache    Nz&(?:https?://)?(?:www\.)?iwara\.(tv|ai)z/profile/([^/?#]+)c                   ~    \ 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S jrS rSS jrS rS rS rS rS rSrg	)IwaraExtractor   z"Base class for iwara.tv extractorsiwarazhttps://www.iwara.tv)z
{category}z{user[name]}z0{date} {id} {title[:200]} {filename}.{extension}z"{type} {user[name]} {id} {file_id}c                    SU R                   S   -   U l        [        U 5      U l        U R	                  S5      =n(       a  [        U[        5      (       a0  UR                  SS5      R                  5       R                  S5      nO'[        U[        [        45      (       d  [        U5      4nXl        U R                  U l        g g )Nzhttps://www.iwara.r   format  ,)groupsrootIwaraAPIapiconfig
isinstancestrreplacelowersplitlisttupleformatsextract_video_source_customextract_video_source)selffmtss     G/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/iwara.py_initIwaraExtractor._init   s    (4;;q>9	D>;;x((4($$$||C,224::3?tUm44D	|L(,(H(HD% )    Nc           	   #     #    U H  n SU;   a  US   nUR                  S5      =n(       d#  U R                  R                  US   5      nUS   nU R                  USS5      nUc  U R	                  U5      OUUS'   SUS	'   [        U5      US
'   [        R                  SU4v   [        US5       HG  u  pxU R                  US 5      n	U	S   n
SU
 SU
 SU	S    3n[        R                  U0 U	EUESU0E4v   MI     M     g ! [
         aV  nU =R                  S-  sl        U R                  R                  SUS   UR                  R                  U5         S nAGMU  S nAff = f7f)NimagefilesidfileFuserr   z#Failed to process image %s (%s: %s)typecountr   file_idz"https://i.iwara.tv/image/original//.	extensionnum)getr   r,   extract_media_infoextract_user_info	Exceptionstatuslogerror	__class____name__lenr   	Directory	enumerateUrl)r%   imagesr0   r,   r-   
group_infoexcr7   r/   	file_infor3   urls               r'   items_imageIwaraExtractor.items_image&   sz    Ee#!'NE!&7!333 HHNN5;7E!'NE!44UFEJ
)- '+&<&<U&C;? 6" ")Jv"%e*Jw##R33&ua0	 33D$?	#I.;!!G9Ai.D-EGkk3(O9(O
(OE3(OOO 1+   q D$T{CMM,B,BCI	s1   E"A2C?;BE"?
E	A
EE"EE"c              #     #    U H  n SU;   a  US   nSU;  a  U R                   R                  US   5      nUS   nU R                  U R                   R                  U5      5      nUS   R	                  S5      nU R                  US5      nUR	                  S5      US'   S	=US
'   US'   Uc  U R                  U5      OUUS'   [        R                  SU4v   [        R                   SU-   U4v   M     g ! [         aq  nU =R                  S	-  sl        U R                  R                  U5        U R                  R                  SUS   UR                  R                  U5         S nAGMg  S nAff = f7f)NvideofileUrlr.   srcdownloadr/   namer   r   r2   r7   r0   z#Failed to process video %s (%s: %s)r   zhttps:)r   rM   r$   sourcer8   r9   r:   r;   r<   r=   	tracebackr>   r?   r@   r   rB   rD   )	r%   videosr0   rM   file_urlrR   download_urlinforG   s	            r'   items_videoIwaraExtractor.items_videoC   s]    Ee#!'NEE) HHNN5;7E +22488??83LM%e}00<..uf=!'F!3X.//WU#'< !% 6 6u =59 V ##R--++x,6<<1    q ""3'D$T{CMM,B,BCIs0   E4B;C62E46
E1 A%E,%E4,E11E4c              #      #    U R                   S-   nU H9  nUb  XB   nUS   =nc  M  SUS'   [        US'   [        R                  X5-   U4v   M;     g 7f)N	/profile/usernamer0   r1   
_extractor)r   IwaraUserExtractorr   Queue)r%   userskeybaser0   r\   s         r'   
items_userIwaraExtractor.items_user^   sb     yy;&Dy ,,5!DL!3D--$66 s   AAc                     US:X  a  U R                  U5      $ US:X  a  U R                  U5      $ US:X  a  U R                  U5      $ [        R                  " SU S35      e)Nr,   rM   r0   zUnsupported result type '')rJ   rX   rc   r	   AbortExtraction)r%   r1   resultss      r'   items_by_typeIwaraExtractor.items_by_typei   sc    7?##G,,7?##G,,6>??7++''*CD6(KLLr*   c                    US   UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      UR                  S5      =(       d    S Vs/ s H  oDS   PM	     snUR                  S	5      =n(       a  UR                  5       OS
UR                  S5      =n(       a  UR                  5       OS
S.	nU(       Ga  Uc  UOUR                  U5      =(       d    0 nUR                  SS
5      R                  S5      u  pxn	UR                  S5      US'   XuS'   XS'   U R                  UR                  S5      5      US'   U R                  UR                  S5      5      US'   UR                  S5      US'   UR                  S5      US'   UR                  S5      US'   UR                  S5      US'   UR                  S5      US'   UR                  S5      US'   U$ s  snf )Nr.   slugratingnumLikesnumViewsnumCommentstags titler   body)	r.   rl   rm   likesviewscommentsrq   rs   descriptionrQ   r5   r3   filenamer6   	createdAtdate	updatedAtdate_updatedmimesizewidthheightdurationr1   )r8   strip
rpartitionparse_datetime_iso)
r%   itemra   include_file_infotrW   rH   ry   _r6   s
             r'   r9   !IwaraExtractor.extract_media_infos   s   T
(*,,/*.((6*:*@b*@A*@Q4*@A+/88G+<&<a&<	2.2hhv.>)>)>1779R

  ##1D"I%.]]62%>%I%I#%N"H'mmD1DO' )22k*,DL#'#:#:k*$,D $==0DL$==0DL%MM'2DM&]]84DN(}}Z8D$==0DL/ Bs   1G=c                 v   UR                  S5      =(       d    0 nUR                  S5      UR                  S5      UR                  S5      R                  5       UR                  S5      UR                  S5      UR                  S5      U R                  UR                  S5      5      UR                  S	5      S
.$ )Nr0   r.   r\   rQ   r<   rolepremiumrz   rt   )r.   rQ   nickr<   r   r   r{   rx   )r8   r   r   )r%   profiler0   s      r'   r:    IwaraExtractor.extract_user_info   s    {{6"(bxx~xx
+xx'--/xx)xx'xx	*..txx/DE";;v.	
 		
r*   c                 @    UR                  U R                  SS9  US   $ )NT)ra   reverser   )sort_sort_formats)r%   sourcess     r'   r$   #IwaraExtractor.extract_video_source   s"    ++T:qzr*   c                 &   U Vs0 s HF  nUR                  S5      (       d  M  UR                  S5      =n(       d  M5  UR                  5       U_MH     nnU R                   H  nXT;   d  M
  XE   s  $    U R                  R	                  S5        g s  snf )NrO   rQ   z!Requested format(s) not available)r8   r   r"   r=   warning)r%   r   rR   rQ   r&   fmts         r'   r#   *IwaraExtractor.extract_video_source_custom   s     "
!zz%  !.4jj.@&@d&@ !DJJL& ! 	 
 <<C{y    	<=
s   BBBc                     U R                   u  pn[        R                  " U5      nU R                  R	                  U5      nUS   S   US'   U R                  U5      U4$ )Nr0   r.   )r   r   parse_queryr   r   r:   )r%   r   r0   qsparamsr   s         r'   _user_paramsIwaraExtractor._user_params   s[    kk!!"%((""4( .v%%g.66r*   c                     UR                  S5      (       d  S$ UR                  S5      =nS:X  a  S$ [        R                  " U5      $ )NrO   r   rQ   Sourcei )r8   r   	parse_int)r%   r   rQ   s      r'   r   IwaraExtractor._sort_formats   sC     	&"%''&/1$h>	&t$	&r*   )r   r$   r"   r   N)T)r@   
__module____qualname____firstlineno____doc__categoryr   directory_fmtfilename_fmtarchive_fmtr(   rJ   rX   rc   ri   r9   r:   r$   r#   r   r   __static_attributes__rr   r*   r'   r   r      sY    ,H!D2MEL6K
IP:=6	7MB

>7&r*   r   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)r^      z$Extractor for iwara.tv profile pagesz/?$z%https://www.iwara.tv/profile/USERNAMEc                     U R                   u  pU R                  S S  U SU S3nU R                  [        US-   4[        US-   4[
        US-   44S5      $ )Nr[   r4   rE   rT   	playlists)user-imagesuser-videos)r   r   _dispatch_extractorsIwaraUserImagesExtractorIwaraUserVideosExtractorIwaraUserPlaylistsExtractor)r%   tldr0   rb   s       r'   itemsIwaraUserExtractor.items   sp    KK	))CR.!#ivQ7((%$/:%$/:($*<=*
 *	+ 	+r*   rr   N)
r@   r   r   r   r   USER_PATTERNpatternexampler   r   rr   r*   r'   r^   r^      s    .V#G5G+r*   r^   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)r      r   z/images(?:\?([^#]+))?z,https://www.iwara.tv/profile/USERNAME/imagesc                 |    U R                  5       u  pU R                  U R                  R                  U5      U5      $ r   )r   rJ   r   rE   r%   r0   r   s      r'   r   IwaraUserImagesExtractor.items   2    ((* 7>>r*   rr   N
r@   r   r   r   subcategoryr   r   r   r   r   rr   r*   r'   r   r          K55G<G?r*   r   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)r      r   z/videos(?:\?([^#]+))?z,https://www.iwara.tv/profile/USERNAME/videosc                 |    U R                  5       u  pU R                  U R                  R                  U5      U5      $ r   )r   rX   r   rT   r   s      r'   r   IwaraUserVideosExtractor.items   r   r*   rr   Nr   rr   r*   r'   r   r      r   r*   r   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)r      zuser-playlistsz/playlists(?:\?([^#]+))?z/https://www.iwara.tv/profile/USERNAME/playlistsc              #      #    U R                   S-   nU R                  R                  U R                  5       S   5       H,  nSUS'   [        US'   XS   -   n[
        R                  X24v   M.     g 7f)N
/playlist/r   playlistr1   r]   r.   )r   r   r   r   IwaraPlaylistExtractorr   r_   )r%   rb   r   rI   s       r'   r   !IwaraUserPlaylistsExtractor.items   sj     yy<'**4+<+<+>q+ABH)HV%;H\"$'C--..	 Cs   A-A/rr   Nr   rr   r*   r'   r   r      s    "K88G?G/r*   r   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)IwaraFollowingExtractor   	following
/followingz/https://www.iwara.tv/profile/USERNAME/followingc                     U R                   R                  U R                  S   5      S   S   nU R                  U R                   R	                  U5      S5      $ )Nr   r0   r.   )r   r   r   rc   user_followingr%   uids     r'   r   IwaraFollowingExtractor.items   sH    hht{{1~.v6t<txx66s;VDDr*   rr   Nr   rr   r*   r'   r   r      s    K]*G?GEr*   r   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)IwaraFollowersExtractor   	followers
/followersz/https://www.iwara.tv/profile/USERNAME/followersc                     U R                   R                  U R                  S   5      S   S   nU R                  U R                   R	                  U5      S5      $ )Nr   r0   r.   follower)r   r   r   rc   user_followersr   s     r'   r   IwaraFollowersExtractor.items   sH    hht{{1~.v6t<txx66s;ZHHr*   rr   Nr   rr   r*   r'   r   r      s    K]*G?GIr*   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	IwaraImageExtractori  z-Extractor for individual iwara.tv image pagesr,   z/image/([^/?#]+)zhttps://www.iwara.tv/image/IDc                 r    U R                  U R                  R                  U R                  S   5      45      $ Nr   )rJ   r   r,   r   r%   s    r'   r   IwaraImageExtractor.items
  +    A!? ABBr*   rr   Nr@   r   r   r   r   r   BASE_PATTERNr   r   r   r   rr   r*   r'   r   r     s     7K00G-GCr*   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	IwaraVideoExtractori  z(Extractor for individual iwara.tv videosrM   z/video/([^/?#]+)zhttps://www.iwara.tv/video/IDc                 r    U R                  U R                  R                  U R                  S   5      45      $ r   )rX   r   rM   r   r   s    r'   r   IwaraVideoExtractor.items  r   r*   rr   Nr   rr   r*   r'   r   r     s     2K00G-GCr*   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	r   i  z0Extractor for individual iwara.tv playlist pagesr   z/playlist/([^/?#]+)z https://www.iwara.tv/playlist/IDc                 p    U R                  U R                  R                  U R                  S   5      5      $ r   )rX   r   r   r   r   s    r'   r   IwaraPlaylistExtractor.items  s*     1 1$++a. ABBr*   rr   Nr   rr   r*   r'   r   r     s     :K33G0GCr*   r   c                   ,    \ rS rSrSr\S-   rSrS rSr	g)IwaraFavoriteExtractori"  favoritez/favorites(?:/(image|video)s)?z%https://www.iwara.tv/favorites/videosc                     U R                   S   =(       d    SnU R                  XR                  R                  U5      5      $ )Nr   vidoo)r   ri   r   	favorites)r%   r1   s     r'   r   IwaraFavoriteExtractor.items'  s4    {{1~(!!$(:(:4(@AAr*   rr   N)
r@   r   r   r   r   r   r   r   r   r   rr   r*   r'   r   r   "  s    K>>G5GBr*   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	IwaraSearchExtractori,  z#Extractor for iwara.tv search pagessearchz/search\?([^#]+)z1https://www.iwara.tv/search?query=QUERY&type=TYPEc                 4   [         R                  " U R                  S   5      nUR                  S5      =(       d    SnUS   S:w  a  US-  nUR                  S5      =U R                  S'   nU R                  US S U R                  R                  X#5      5      $ )Nr   r1   rT   squerysearch_tags)r   r   r   r8   kwdictri   r   r   )r%   r   r1   r  s       r'   r   IwaraSearchExtractor.items2  s    !!$++a.1zz&!-X8s?CKD-3ZZ-@@M"U!!$s)TXX__T-IJJr*   rr   Nr   rr   r*   r'   r   r   ,  s     -K00GAGKr*   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	IwaraTagExtractori;  z!Extractor for iwara.tv tag searchtagz/(image|video)s(?:\?([^#]+))?z%https://www.iwara.tv/videos?tags=TAGSc                     U R                   u  pn[        R                  " U5      nUR                  S5      U R                  S'   U R                  X R                  R                  X$5      5      $ )Nrq   r  )r   r   r   r8   r  ri   r   media)r%   r   r1   r   r   s        r'   r   IwaraTagExtractor.itemsA  sT    kk!!"%%+ZZ%7M"!!$t(DEEr*   rr   Nr   rr   r*   r'   r	  r	  ;  s     +K==G5GFr*   r	  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S9S 5       rS rS rS rS r\" SSS9S 5       rSS jrSS jrSrg)r   iH  zInterface for the Iwara APIzhttps://apiq.iwara.tvc                     Xl         UR                  S-   SUR                  UR                  SS  S.U l        UR                  5       u  U l        U l        U R                  (       d  [        R                  U l        g g )Nr4   zapplication/json   )RefererzContent-TypeOriginzX-Site)		extractorr   headers_get_auth_infor\   passwordr   noopauthenticate)r%   r  s     r'   __init__IwaraAPI.__init__L  se    "%NNS0.%NN%NN12.	
 (1'?'?'A$t}}} $		D r*   c                 .    SU-   nU R                  U5      $ )Nz/image/_call)r%   image_idendpoints      r'   r,   IwaraAPI.imageY      x'zz(##r*   c                 .    SU-   nU R                  U5      $ )Nz/video/r  )r%   video_idr  s      r'   rM   IwaraAPI.video]  r!  r*   c                 .    SU-   nU R                  U5      $ )Nr   _pagination)r%   playlist_idr  s      r'   r   IwaraAPI.playlista  s    +-))r*   c                 @    SUS    SUS    3nU R                  U5      $ )Nr4   r1   r.   r  )r%   r  r  s      r'   detailIwaraAPI.detaile  s+    uV}oQuT{m4zz(##r*   c                 L    SnUR                  SS5        U R                  X!5      $ )Nz/imagesrm   all
setdefaultr'  r%   r   r  s      r'   rE   IwaraAPI.imagesi  (    (E*11r*   c                 L    SnUR                  SS5        U R                  X!5      $ )Nz/videosrm   r.  r/  r1  s      r'   rT   IwaraAPI.videosn  r3  r*   c                 (    SnU R                  X!5      $ )Nz
/playlistsr&  r1  s      r'   r   IwaraAPI.playlistss  s    11r*   c                 T    SU S3nUR                  SS5        U R                  X25      $ )Nr4   r  rm   r.  r/  )r%   r1   r   r  s       r'   r  IwaraAPI.mediaw  s0    tfA;(E*11r*   c                     U R                   (       d  [        R                  " SS5      eSU S3nU R                  U5      $ )Nzusername & passwordzyour favoritesz/favorites/r  )r\   r	   AuthRequiredr'  )r%   r1   r  s      r'   r   IwaraAPI.favorites|  sA    }}((%'79 9 a())r*   c                 0    SnXS.nU R                  X45      $ )Nz/search)r1   r  r&  )r%   r1   r  r  r   s        r'   r   IwaraAPI.search  s     /11r*   r   )keyargc                 .    SU-   nU R                  U5      $ )Nr[   r  )r%   r\   r  s      r'   r   IwaraAPI.profile  s    )zz(##r*   c                 0    SU S3nU R                  U5      $ )N/user/r   r&  r%   user_idr  s      r'   r   IwaraAPI.user_following  !    G9J/))r*   c                 0    SU S3nU R                  U5      $ )NrC  r   r&  rD  s      r'   r   IwaraAPI.user_followers  rG  r*   c                 `   UR                  S5      u  p#n[        R                  " USS5      =n(       d  gUR                  S5      S   nSnU SU SU 3n[        R
                  " UR                  5       5      R                  5       n	S	U	0U R                  En
U R                  R                  XS
9$ )N?zexpires=&rr   r4   r    mSvL05GfEmeEmsEYfGCnVpEjYgTJraJNr   z	X-Version)r  )	partitionr   extrr   hashlibsha1encode	hexdigestr  r  request_json)r%   rU   rb   r   r  expiresr3   sha_postfixsha_keyhashr  s              r'   rR   IwaraAPI.source  s    !++C099UJ<<<//#&q)8IQwiq6||GNN,-77955~~**8*EEr*   c                 T    U R                  U R                  5      U R                  S'   g )NAuthorization)_authenticate_implr\   r  r   s    r'   r  IwaraAPI.authenticate  s    (,(?(?(N_%r*   i  maxager?  c                 x   [        U5      nUc  U R                  R                  R                  SU5        U R                  S-   nUU R
                  S.nU R                  R                  USU R                  USS9nUR                  S5      =n(       dJ  U R                  R                  R                  U5        [        R                  " UR                  S5      5      e[         R                  X5        U R                  R                  R                  S	U5        U R                  S
-   nSSU-   0U R                  EnU R                  R                  USUSS9nUR                  S5      =n(       dJ  U R                  R                  R                  U5        [        R                  " UR                  S5      5      eSU-   $ )NzLogging in as %sz/user/login)emailr  POSTF)methodr  jsonfataltokenmessagezRefreshing access token for %sz/user/tokenr[  zBearer )rc  r  re  accessToken)_refresh_token_cacher  r=   rW   r   r  rT  r  r8   debugr	   AuthenticationErrorupdate)r%   r\   refresh_tokenrI   rd  datar  access_tokens           r'   r\  IwaraAPI._authenticate_impl  s   ,X6 NN##$6A))m+C$ MMD >>..FDLLt / D &*XXg%66M6""((.33DHHY4GHH ''@ @(Kii-'"I$=NN~~**u + > !% 777NN$$T*//0CDD<''r*   Nc                     Uc  U R                   nU R                  U-   nU R                  5         U R                  R	                  XBUS9$ )N)r   r  )r  r   r  r  rT  )r%   r  r   r  rI   s        r'   r  IwaraAPI._call  sD    ?llGii("~~**3w*OOr*   c              #      #    Uc  0 nSUS'   SUS'    U R                  X5      nUR                  S5      =n(       d  g U S h  vN   [        U5      US   :  a  g US==   S-  ss'   MV   N&7f)Nr   page2   limitrh   r   )r  r8   rA   )r%   r  r   rn  rh   s        r'   r'  IwaraAPI._pagination  s}     >Fvw::h/D#xx	22G27|fWo-6NaN 
 s   A A+A)'A+)r  r  r  r  r\   )NNr   )r@   r   r   r   r   r   r  r,   rM   r   r+  rE   rT   r   r  r   r   r   r   r   r   rR   r  r
   r\  r  r'  r   rr   r*   r'   r   r   H  s    %"D*$$*$2
2
22
*2
 Q$ $**	FO $q!( "(>P r*   r   i $ r^  c                     g r   rr   )r\   s    r'   ri  ri    s    r*   )r   commonr   r   r   r   r   r   r	   r
   r   rP  r   r   r   r^   r   r   r   r   r   r   r   r   r   r   r	  r   ri  rr   r*   r'   <module>rz     s   + 0 0 $ $ # 833i&Y i&X+> +?~ ??~ ?/. /En EIn IC. CC. CC^ CB^ BK> K
F 
FR  R j hq! "r*   