
    i+                         S r SSKJrJr  SSKJrJr  S 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://nozomi.la/   )	ExtractorMessage   )textdtc              #      #    [        S[        U 5      S5       H*  nX   S-  XS-      S-  -   XS-      S-  -   XS-      -   v   M,     g 7f)	N          r      r         )rangelen)nis     H/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/nozomi.pydecode_nozomir      sQ     1c!fa trza!fl+q1v{;a!fDD !s   AAc                   J    \ 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g)NozomiExtractor   z Base class for nozomi extractorsnozomizhttps://nozomi.lazgold-usergeneratedcontent.netz{postid} {dataid}.{extension}z{dataid}c                 J    U R                   U R                  R                  S'   g )NOrigin)rootsessionheadersselfs    r   _initNozomiExtractor._init   s    )-X&    c              #     #    U R                  5       n[        [        U R                  5       5       GH  nSU R                   SUS    SUSS  SU S3	nU R                  USS9nUR                  S	:  a3  U R                  R                  S
X$R                  UR                  5        Mv  UR                  5       nU R                  UR                  S5      5      US'   U R                  UR                  S5      5      US'   U R                  UR                  S5      5      US'   U R                  UR                  S5      5      US'    [        R                  " US   S-   5      US'   UR#                  U5        US   nS H  nXu;   d  M
  XW	 M     [$        R&                  SU4v   [)        US5       H  u  US'   nUS   =US'   =US'   n	UR                  S5      (       a  SOS=US'   n
US   nU
(       a  SnOUS:X  a  SnOSnS nXS!'   S"U S#U R                   SU	S    SU	SS  SU	 S#U 3=US$'   n[$        R*                  X54v   M     GM     g ! [         a    [        R                   US'    GNf = f7f)%N
https://j.z/post//z.jsonF)fatali  zSkipping post %s ('%s %s')generaltagsartist	copyright	characterdatez:00	imageurls)r)   imageurlr/    r   numdataidfilenameis_videoTtypevgifgwwebp	extensionzhttps://.url)metadatamapstrpostsdomainrequeststatus_codelogwarningreasonjson_listgetr   	parse_iso	ExceptionNONEupdater   	Directory	enumerateUrl)r   datapost_idr>   responsepostimageskeyimagedidvideoext	subdomains                r   itemsNozomiExtractor.items   s}    }}3

-G} -r{m1WR^$4AgYeEC||Cu|5H##s*  0118??D ==?D::dhhy&9:DL!ZZ(:;DN $

488K+@ AD $

488K+@ AD'!||DL5,@AV KK+&F;;	 < ##R--&/&:"UU:?/IZ I4>C!IIj11Du=Z 5 Fm #IE\ #I #I C$'[!'/	{!DKK='(R	3r":,auAcU&L MUckk3,,# ';= .&  '!wwV's1   EI.I
#I.CI.
I+'I.*I++I.c              #     #    SU R                   -   n[        R                  " U R                  S5      S-
  S-  n SSU SUS-    30nU R	                  XS9n[        UR                  5       S h  vN   US-  nUR                  R                  S	S
5      R                  S5      S   n[        R                  " XR5      U::  a  g M   NT7f)Nzhttps://n.nozomi.lar      Rangezbytes=-   )r   zContent-Ranger1   r&   r   )
r   r   	parse_intpnumrD   r   contentr   rK   
rpartition)r   r>   offsetr   rU   crs         r   rB   NozomiExtractor.postsS   s     #dkk1..A.2c9&&3, @AG||C|9H$X%5%5666cMF!!%%or:EEcJ1MB~~b)V3  7s   A,C.C/ACc                     0 $ N r   s    r   r?   NozomiExtractor.metadataa   s    	r"   c                 H    U(       a  U Vs/ s H  o"S   PM	     sn$ S$ s  snf )Ntagname_displayrn   rn   )r   srcxs      r   rJ   NozomiExtractor._listd   s%    69c2c#$c2ArA2s   rn   N)__name__
__module____qualname____firstlineno____doc__categoryr   rC   filename_fmtarchive_fmtr    r^   rB   r?   rJ   __static_attributes__rn   r"   r   r   r      s9    *HD,F2LK32-hBr"   r   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)
NozomiPostExtractorh   z+Extractor for individual posts on nozomi.larV   z#(?:https?://)?nozomi\.la/post/(\d+)z!https://nozomi.la/post/12345.htmlc                 B    [         R                  X5        US   U l        g Nr   )r   __init__rT   r   matchs     r   r   NozomiPostExtractor.__init__n   s      -Qxr"   c                     U R                   4$ rm   rT   r   s    r   rB   NozomiPostExtractor.postsr   s    r"   r   N)ru   rv   rw   rx   ry   subcategorypatternexampler   rB   r}   rn   r"   r   r   r   h   s    5K4G1G r"   r   c                   *    \ rS rSrSrSrSrSrS rSr	g)	NozomiIndexExtractorv   z!Extractor for the nozomi.la indexindexzH(?:https?://)?nozomi\.la/(?:(index(?:-Popular)?)-(\d+)\.html)?(?:$|#|\?)zhttps://nozomi.la/index-1.htmlc                     [         R                  X5        UR                  5       u  o l        SU=(       d    S S3U l        g )Nr&   r   .nozomi)r   r   groupsrf   r   )r   r   r   s      r   r   NozomiIndexExtractor.__init__}   s6      - <<>y%*7+73r"   )r   rf   N)
ru   rv   rw   rx   ry   r   r   r   r   r}   rn   r"   r   r   r   v   s    +KBG.G4r"   r   c                   8    \ rS rSrSrSrSrSrSrSr	S r
S	 rS
rg)NozomiTagExtractor   z2Extractor for posts from tag searches on nozomi.latag)
{category}z{search_tags}t_{search_tags}_{dataid}z.(?:https?://)?nozomi\.la/tag/([^/?#]+)-(\d+)\.z https://nozomi.la/tag/TAG-1.htmlc                     [         R                  X5        UR                  5       u  o l        [        R
                  " U5      U l        SU R                   S3U l        g )Nz/nozomi/r   )r   r   r   rf   r   unquoter*   r   )r   r   r*   s      r   r   NozomiTagExtractor.__init__   sC      -,,.iLL&	 73r"   c                     SU R                   0$ Nsearch_tagsr*   r   s    r   r?   NozomiTagExtractor.metadata       tyy))r"   )r   rf   r*   N)ru   rv   rw   rx   ry   r   directory_fmtr|   r   r   r   r?   r}   rn   r"   r   r   r      s(    <K3M,K?G0G4*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g)NozomiSearchExtractor   z)Extractor for search results on nozomi.lasearch)r   z{search_tags:J }r   z1(?:https?://)?nozomi\.la/search\.html\?q=([^&#]+)z%https://nozomi.la/search.html?q=QUERYc                     [         R                  X5        [        R                  " US   5      R	                  5       U l        g r   )r   r   r   r   splitr*   r   s     r   r   NozomiSearchExtractor.__init__   s-      -LLq*002	r"   c                     SU R                   0$ r   r   r   s    r   r?   NozomiSearchExtractor.metadata   r   r"   c           	        ^  S n/ n/ nU 4S jnT R                    HC  nUS   S:X  a  UOUR                  [        R                  " UR	                  SS5      5      5        ME     U H/  nU" SU-   5      nUc  [        U5      nM  UR                  U5        M1     Uc  [        U" S5      5      nU H   nUR                  U" SUSS  -   5      5        M"     U(       a
  [        US	S
9$ S$ )Nc                 r   > STR                    SU  S3n[        TR                  U5      R                  5      $ )Nr$   r&   r   )rC   r   rD   rg   )pathr>   r   s     r   r   +NozomiSearchExtractor.posts.<locals>.nozomi   s5    t{{m1TF':C c!2!:!:;;r"   r	   rc   r&   r1   znozomi/r   r   T)reversern   )	r*   appendr   quotereplacesetintersection_updatedifference_updatesorted)r   resultpositivenegativer   r   idss   `      r   rB   NozomiSearchExtractor.posts   s    	< 99CQ3XH<<

3;;sB/02  CS)C~S**3/  >)FC$$VIAB,?%@A  06vfd+=2=r"   r   N)ru   rv   rw   rx   ry   r   r   r|   r   r   r   r?   rB   r}   rn   r"   r   r   r      s-    3K6M,KBG5G3*>r"   r   N)ry   commonr   r   r1   r   r   r   r   r   r   r   r   rn   r"   r   <module>r      sW    ( & E
QBi QBh/ 
4? 
4* *$(>O (>r"   