
    iE$                         S r SSKJrJrJr  SSKJr  SSKJr  SSK	J
r
Jr  SSKr " S	 S
\5      r " S S\\5      r " S S\5      r " S S\5      r " S S\5      r\" SS9S 5       rg)z!Extractors for https://hitomi.la/   )GalleryExtractor	ExtractorMessage)decode_nozomi   )memcache)textutil    Nc                   .    \ rS rSrSrSrSrSrS	S jrSr	g)
HitomiExtractor   z Base class for hitomi extractorshitomizhttps://hitomi.lazgold-usergeneratedcontent.netNc           	      n   UR                  5       R                  S5      u  pEnUS:X  d  US:X  a  SnUnOUS:X  a  SnUnSnOUS-  nS	U R                   S
U SUR                  SS5       SU S3	nUc  0 nU R                  US'   U R                  S-   US'   [        U R                  XsS9R                  5      $ )N:femalemaleztag/language index/https://ltn.z/n/_ -.nozomiOriginRefererheaders)strip	partitiondomainreplacerootr   requestcontent)selfqueryr   r    nsr   tagurls           H/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/hitomi.pyload_nozomiHitomiExtractor.load_nozomi   s    [[],,S1
s>R6\BC:BHC#IBdkk]#bT3;;sC()8*G=?G II!YY_	T\\#\?GGHH     )allN)
__name__
__module____qualname____firstlineno____doc__categoryr%   r#   r.   __static_attributes__r1   r0   r-   r   r      s    *HD,FIr0   r   c                   8    \ rS rSrSrSrSrS rS rS r	S r
S	rg
)HitomiGalleryExtractor.   z!Extractor for hitomi.la gallerieszc(?:https?://)?hitomi\.la/(?:manga|doujinshi|cg|gamecg|imageset|galleries|reader)/(?:[^/?#]+-)?(\d+)z)https://hitomi.la/manga/TITLE-867789.htmlc                     [         R                  " XS5        U R                  S   =U l        nSU R                   SU S3U l        g )NFr   r   /galleries/z.js)r   __init__groupsgidr#   page_url)r(   matchrA   s      r-   r?   HitomiGalleryExtractor.__init__5   s@    !!$u5Q'3&t{{m;se3Gr0   c                 j    U R                    SU R                   S3U R                  R                  S'   g )Nz/reader/.htmlr   )r%   rA   sessionr    )r(   s    r-   _initHitomiGalleryExtractor._init:   s+    -1YYKxz*OY'r0   c                    [         R                  " UR                  S5      S   5      =U l        nUR                  nU" S5      =n(       a  UR                  5       nU" S5      =n(       a  US-  n/ nU" S5      =(       d    S Hd  n[        R                  " US   5      nUR	                  S	5      (       a  US
-  nOUR	                  S5      (       a  US-  nUR                  U5        Mf     [        R                  " US   5      US   UR	                  S5      =(       d    SUS   R                  5       U[         R                  " U5      U R                  U5      UU" S5      =(       d    S V	s/ s H  oS   PM	     sn	U" S5      =(       d    S V	s/ s H  oS   PM	     sn	U" S5      =(       d    S V	s/ s H  oS   PM	     sn	U" S5      =(       d    S V	s/ s H  oS   PM	     sn	S.$ s  sn	f s  sn	f s  sn	f s  sn	f )N=r   r   datez:00tagsr1   r+   r   u    ♀r   u    ♂idtitlejapanese_titler   typeartistsartistr@   groupparodysparody
characters	character)
gallery_idrO   	title_jpnrQ   r   langrL   rM   rS   rT   rV   rW   )r
   
json_loadsr"   infoget
capitalizestringcapwordsappendr	   	parse_intlanguage_to_codeparse_datetime_iso)
r(   pager]   igetr   rL   rM   tinfor+   os
             r-   metadataHitomiGalleryExtractor.metadata=   s   ??4>>#+>q+ABB	DxxJ''8'**,H<4EMD&\'R'E//%,/Cyy""v6""vKK ( ..d4w-((#34:v,113"//911$704Y0E20EF0E1X;0EF/3H~/C/CD/C!W:/CD04Y0E20EF0E1X;0EF373E3K3KL3Ka[>3KL
 	
 GDFLs   +G'G,1G1G6c                    [        U 5      u  p#nU R                  S5      =(       d    S=pVUS:g  n/ nU R                  S    H  n	U(       a  U	R                  SU-   5      (       a  UOSnU	S   n
[        R
                  " U	S   5      nUS   US'   XkS'   [        U
S	   U
S
S	 -   S5      nSUS    UR                  X5      S-    SU R                   SU SU SU
 SU 3nUR                  X45        M     U$ )Nformatwebpfileshashashname	extensionextension_original   zhttps://r   r   .r   )		_parse_ggconfigr]   r^   r	   nameext_from_urlintr#   rb   )r(   r   gg_mgg_b
gg_defaultfmtextcheckresultsimageihashidatainumr,   s                 r-   imagesHitomiGalleryExtractor.images_   s   !*4JKK)3V3YYw'E"YYus{33c&ME))%-8E*/*<E&'!$+ uRy5B</4Dc!fXdhht&@1&D%EQkk]!D64&%#@CNNC<( ( r0   )rA   r]   rB   N)r3   r4   r5   r6   r7   patternexampler?   rH   rj   r   r9   r1   r0   r-   r;   r;   .   s*    +&G :GH
P 
Dr0   r;   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)
HitomiTagExtractorw   z6Extractor for galleries from tag searches on hitomi.lar+   zQ(?:https?://)?hitomi\.la/(tag|artist|group|series|type|character)/([^/?#]+)\.htmlz#https://hitomi.la/tag/TAG-LANG.htmlc                     [         R                  " X5        UR                  5       u  U l        U l        U R                  R                  S5      u  p#nUR                  5       (       a  X l        g g )Nr   )r   r?   r@   rQ   r+   
rpartition	isdecimal)r(   rC   r+   r   nums        r-   r?   HitomiTagExtractor.__init__   sQ    4'#lln	48hh))#.==??H r0   c              #     #    [         [        R                  " U R                  R	                  S5      S   5      S.nSU R
                   SU R                   SU R                   S3nU R                  SS.nSnS n U R                   SU R                   SU R                   S	US
-  S-    3US'   SU SUS-    3US'   U R                  X#S9n[        UR                  5       H)  nU R                   SU S3n[        R                  X4v   M+     US
-  nUc5  [        R                  " UR                  S   R	                  S5      S   5      nXE:  a  g M  7f)Nr   r   
_extractorsearch_tagsr   r   r   	max-age=0r   zCache-Control.html?page=d   r   r   bytes=c   Ranger   r>   rF   content-ranger   )r;   r	   unquoter+   r   r#   rQ   r%   r&   r   r'   r   Queuerc   r    	r(   data
nozomi_urlr    offsettotalresponserY   gallery_urls	            r-   itemsHitomiTagExtractor.items   sd    0<<(;(;C(@(CD
 $DKK=$))AdhhZwO
ii(

 %)YYKq1TXXJ G++1S=1+<*=#?GI!'xq">GG||J|@H+H,<,<=
!%;zl%Hmm[66 > cMF}$$_5@@EaHJ s   EE)r+   rQ   Nr3   r4   r5   r6   r7   subcategoryr   r   r?   r   r9   r1   r0   r-   r   r   w   s"    @K#G 4Gr0   r   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)
HitomiIndexExtractor   z8Extractor for galleries from index searches on hitomi.lar   z*(?:https?://)?hitomi\.la/(\w+)-(\w+)\.htmlz!https://hitomi.la/index-LANG.htmlc                 j    [         R                  " X5        UR                  5       u  U l        U l        g )N)r   r?   r@   r+   r   )r(   rC   s     r-   r?   HitomiIndexExtractor.__init__   s$    4'"',,.$-r0   c              #   F  #    S[         0nSU R                   SU R                   SU R                   S3nU R                  SS.nSnS n U R                   SU R                   SU R                   S	US
-  S-    3US'   SU SUS-    3US'   U R                  X#S9n[        UR                  5       H)  nU R                   SU S3n[        R                  X4v   M+     US
-  nUc5  [        R                  " UR                  S   R                  S5      S   5      nXE:  a  g M  7f)Nr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r>   rF   r   r   )r;   r#   r+   r   r%   r&   r   r'   r   r   r	   rc   r    r   r   s	            r-   r   HitomiIndexExtractor.items   sE    45$T[[M$((1T]]O7<
 ii(

 %)YYKq
!DMM?$/#0A/B#DGI!'xq">GG||J|@H+H,<,<=
!%;zl%Hmm[66 > cMF}$$_5@@EaHJ s   DD!)r   r+   Nr   r1   r0   r-   r   r      s    BK;G1G1r0   r   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)
HitomiSearchExtractor   z?Extractor for galleries from multiple tag searches on hitomi.lasearchz.(?:https?://)?hitomi\.la/search\.html\?([^#]+)z#https://hitomi.la/search.html?QUERYc              #      #    [         R                  " U R                  S   5      n[        US.nU R	                  U5       H)  nU R
                   SU S3n[        R                  XB4v   M+     g 7f)Nr   r   r>   rF   )r	   r   r@   r;   gallery_idsr%   r   r   )r(   rM   r   rY   r   s        r-   r   HitomiSearchExtractor.items   sf     ||DKKN+ 1

 **40J!YYK{:,eDK--22 1s   A,A.c                    S n/ n/ nUR                  5        H3  nUS   S:X  a  UR                  USS  5        M"  UR                  U5        M5     U H5  nU R                  U5      nUc  [        U5      nM$  UR	                  U5        M7     Uc  [        U R                  S5      5      nU H#  nUR                  U R                  U5      5        M%     U(       a
  [        USS9$ S$ )Nr   r   r   zlanguage:allT)reverser1   )splitrb   r.   setintersection_updatedifference_updatesorted)r(   rM   resultpositivenegativer+   idss          r-   r   !HitomiSearchExtractor.gallery_ids   s    ::<C1v}AB($	   C""3'C~S**3/  >)).9:FC$$T%5%5c%:;  06vfd+=2=r0   r1   N)r3   r4   r5   r6   r7   r   r   r   r   r   r9   r1   r0   r-   r   r      s    IK?G3G
3>r0   r   i  )maxagec                    U R                  S5      R                  n0 n/ n[        R                  " S5      R	                  U5       H`  nUR                  5       u  pVUR                  [        U5      5        U(       d  M8  [        U5      nU H  nXbU'   M	     UR                  5         Mb     [        R                  " S5      R	                  U5       H   n[        US   5      U[        US   5      '   M"     [        R                  " S5      R                  U5      n[        R                  " S5      R                  U5      nX(S   R                  S5      U(       a  [        US   5      4$ S	4$ )
Nz/https://ltn.gold-usergeneratedcontent.net/gg.jsz"case\s+(\d+):(?:\s*o\s*=\s*(\d+))?z,if\s+\(g\s*===?\s*(\d+)\)[\s{]*o\s*=\s*(\d+)r   r   z"(?:var\s|default:)\s*o\s*=\s*(\d+)zb:\s*[\"'](.+)[\"']r   r   )r&   r	   r
   
re_compilefinditerr@   rb   r|   clearr   r!   )	extrrf   mkeysrC   keyvaluedbs	            r-   ry   ry      s-   <<IJOOD
AD133;8D>B\\^
CH5JE# JJLB ;==EXd^LuQx=#eAh-L 	=>EEdKA./66t<AdjjoAs1Q4y44144r0   )r7   commonr   r   r   nozomir   cacher   r   r	   r
   r`   r   r;   r   r   r   ry   r1   r0   r-   <module>r      s}    ( 8 8 !   Ii I8F_.> FR, ,^$- $N*>O *>Z 
5 5r0   