
    i                         S r SSKJrJrJr  SSKJrJr  SSK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g)z#Extractors for https://nhentai.net/   )GalleryExtractor	ExtractorMessage   )textutil    Nc                   :    \ rS rSrSrSrSrSrSrS r	S r
S	 rS
rg)NhentaiGalleryExtractor   z.Extractor for image galleries from nhentai.netnhentaihttps://nhentai.netz"(?:https?://)?nhentai\.net/g/(\d+)zhttps://nhentai.net/g/12345/c                 \    U R                   S-   US   -   n[        R                  " XU5        g )Nz/api/gallery/r   )rootr   __init__)selfmatchurls      I/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/nhentai.pyr    NhentaiGalleryExtractor.__init__   s)    ii/)E!H4!!$s3    c                 :   [         R                  " U5      =U l        nUS   R                  SS5      nUS   R                  SS5      n[        R
                  " [        5      nUS    H  nXVS      R                  US   5        M     SnUS    H  nUS	:w  d  M  UR                  5       n  O   U=(       d    UUUUS
   [        R                  " US   5      US   US   US   US   US   US   US   US   (       a  US   S   OS[         R                  " U5      US.$ )Ntitleenglish japanesetagstypenamelanguage
translatedidmedia_idupload_date	scanlatorartistgroupparody	charactertagcategoryr	   )r   title_entitle_ja
gallery_idr#   dater%   r&   r'   r(   
charactersr   r   langr    )r   
json_loadsdatagetcollectionsdefaultdictlistappend
capitalizer   	parse_intlanguage_to_code)r   pager3   r,   r-   infor*   r    s           r   metadata NhentaiGalleryExtractor.metadata   s6   ??400	D=$$Y3=$$Z4&&t,<CV$$S[1   Z(H<'#..0 ) #.h""t*..j)9:}-{+x.w-x.{+u+15j1A$z*1-r//9"
 	
r   c                 "   SSSSSS.nU R                   nSUS   -   S	-   R                  n[        US
   S   S5       VVs/ s HA  u  pVU" [        R                  " SS5      XRR                  US   S5      5      US   US   S.4PMC     snn$ s  snnf )Njpgpnggifwebpavif)jpgwaz"https://i{}.nhentai.net/galleries/r#   z/{}.{}imagespagesr      trI   h)widthheight)r3   format	enumeraterandomrandintr4   )r   _extsr3   ufmtnumimgs          r   rK   NhentaiGalleryExtractor.images>   s    UfMyy4Z !#+,-3V 	 &d8nW&=qA

 B	 &..A&XXc#h-FGc(c(J  B
 	
 
s   AB)r3   N)__name__
__module____qualname____firstlineno____doc__r+   r   patternexampler   r>   rK   __static_attributes__ r   r   r   r      s)    8H D3G,G4 
D
r   r   c                   2    \ rS rSrSrSrSrS rS rS r	Sr
g	)
NhentaiExtractorN   z!Base class for nhentai extractorsr   r   c                 j    [         R                  " X5        UR                  5       u  U l        U l        g )N)r   r   groupspathquery)r   r   s     r   r   NhentaiExtractor.__init__S   s$    4' %	4:r   c              #      #    S[         0nU R                  5        HB  nU R                   SU S3n[        R                  " U5      US'   [
        R                  X14v   MD     g 7f)N
_extractorz/g//r.   )r   _paginationr   r   r:   r   Queue)r   r3   r.   r   s       r   itemsNhentaiExtractor.itemsW   s[     56**,JYYKs:,a0C!%
!;D--** -s   A A"c              #   r  #    U R                   U R                  -   n[        R                  " U R                  5      n[        R
                  " UR                  S5      S5      US'    U R                  XS9R                  n[        R                  " USS5       S h  vN   SU;  a  g US==   S-  ss'   MO   N7f)Nr<   r   )paramsz	href="/g/ro   zclass="next")	r   rj   r   parse_queryrk   r:   r4   requestextract_iter)r   r   ru   r<   s       r   rp   NhentaiExtractor._pagination^   s     ii$))#!!$**-

6(:A>v<<<388D(({C@@@T)6NaN @s   BB7B5B7)rj   rk   N)r\   r]   r^   r_   r`   r+   r   r   rr   rp   rc   rd   r   r   rf   rf   N   s    +H D/+
 r   rf   c                   $    \ rS rSrSrSrSrSrSrg)NhentaiTagExtractork   z"Extractor for nhentai tag searchesr*   z(?:https?://)?nhentai\.net(/(?:artist|category|character|group|language|parody|tag)/[^/?#]+(?:/popular[^/?#]*)?/?)(?:\?([^#]+))?zhttps://nhentai.net/tag/TAG/rd   N	r\   r]   r^   r_   r`   subcategoryra   rb   rc   rd   r   r   r{   r{   k   s    ,K@G -Gr   r{   c                   $    \ rS rSrSrSrSrSrSrg)NhentaiSearchExtractort   z$Extractor for nhentai search resultssearchz.(?:https?://)?nhentai\.net(/search/?)\?([^#]+)z#https://nhentai.net/search/?q=QUERYrd   Nr}   rd   r   r   r   r   t   s    .K?G3Gr   r   c                   $    \ rS rSrSrSrSrSrSrg)NhentaiFavoriteExtractor{   zExtractor for nhentai favoritesfavoritez6(?:https?://)?nhentai\.net(/favorites/?)(?:\?([^#]+))?zhttps://nhentai.net/favorites/rd   Nr}   rd   r   r   r   r   {   s    )KGG.Gr   r   )r`   commonr   r   r   r   r   r   r5   rT   r   rf   r{   r   r   rd   r   r   <module>r      sZ    * 8 8   :
. :
z y  :-* -4- 4// /r   