
    i                     n    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
g)z$Extractors for https://xhamster.com/   )	ExtractorMessage   )textutilzO(?:https?://)?((?:[\w-]+\.)?xhamster(?:\d?\.(?:com|one|desi)|\.porncache\.net))c                   "    \ rS rSrSrSrS rSrg)XhamsterExtractor   z"Base class for xhamster extractorsxhamsterc                 J    SUS   -   U l         [        R                  " X5        g )Nzhttps://r   )rootr   __init__)selfmatchs     J/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/xhamster.pyr   XhamsterExtractor.__init__   s     q)	4'    )r   N)__name__
__module____qualname____firstlineno____doc__categoryr   __static_attributes__ r   r   r	   r	      s    ,H(r   r	   c                   N    \ 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)XhamsterGalleryExtractor   z-Extractor for image galleries on xhamster.comgallery)z
{category}z{user[name]}z{gallery[id]} {gallery[title]}z{num:>03}_{id}.{extension}z{id}z(/photos/gallery/[^/?#]+)z)https://xhamster.com/photos/gallery/12345c              #   4  #    U R                  5       n[        R                  SU4v   [        U R	                  5       S5       HQ  u  p#US   nUR                  U5        [        R                  " XC5        X#S'   SUS'   US	 [        R                  XC4v   MS     g 7f)N r   imageURLnumwebp	extension	modelName)	metadatar   	Directory	enumerateimagesupdater   nameext_from_urlUrl)r   datar#   imageurls        r   itemsXhamsterGalleryExtractor.items%   s     }}T))#DKKM15JC
#CLL!!#-%L!'E+k"++s)) 6s   BBc                    U R                  U R                  U R                  S   -   5      =ol        US   nUS   nUS   nUS   n[        R
                  " US   5      US   US   UR                  S	5      (       a  S
OSUS   S   S.[        R
                  " US   5      US    Vs/ s H  ofS   PM	     snU R                  US   5      [        R
                  " US   5      [        R
                  " US   S   5      [        R
                  " US   S   5      US   US   US   S.	[        R
                  " US   5      S.$ s  snf )Nr   galleryPage	infoPropsgalleryModelauthorInfoPropsuserId
authorLink
authorNameverifiedTFsubscribeButtonPropssubscribers)idr0   namer;   r=   r>   categoriesTagslabelcreatedviewsratinglikesdislikestitledescriptionthumbURL)	r>   tagsdaterC   rE   rF   rG   rH   	thumbnailphotosCount)userr   count)_extract_datar   groupsr.   r   	parse_intgetparse_timestamp)r   r.   r   infomodelauthorts          r   r'   !XhamsterGalleryExtractor.metadata1   sS   --dii$++a..HIIy}%{#''(
  $~~eHo>%l3%l3'-zz*'='=t5#$:;MJ  $~~gdm<489I4JK4Jq'
4JK#33E)4DE#~~eGn=#~~eHog.FG#~~eHoj.IJ$W~$]3$Z0
 ^^GM$:;+
 	
  Ls   'Ec              #      #    U R                   nS U l          US   S    S h  vN   US   S   nUS   US   :  a  g US   S S [        US   S	-   5      -   nU R                  U5      nMR   NF7f)
NphotosGalleryModelphotosr4   paginationPropscurrentPageNumberlastPageNumberpageLinkTemplater   )r.   strrP   )r   r.   
paginationr0   s       r   r*   XhamsterGalleryExtractor.imagesQ   s     yy	01(;;;m,->?J-.*=M2NN01#26z"56:;<C %%c*D ;s    A+A)AA+c                     U R                  U5      R                  n[        R                  " [        R                  " USS5      R                  S5      5      $ )Nzwindow.initials=z	</script>z
;)requestr   r   
json_loadsextrrstrip)r   r0   pages      r   rP   &XhamsterGalleryExtractor._extract_data`   sE    ||C %%tyy$k 3396'?D 	Dr   )r.   N)r   r   r   r   r   subcategorydirectory_fmtfilename_fmtarchive_fmtBASE_PATTERNpatternexampler1   r'   r*   rP   r   r   r   r   r   r      sA    7K7M/LK99G9G
*
@+Dr   r   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	XhamsterUserExtractorf   z/Extractor for all galleries of an xhamster userrN   z(/users/([^/?#]+)(?:/photos)?/?(?:$|[?#])z&https://xhamster.com/users/USER/photosc              #   <  #    U R                    SU R                  S    S3nS[        0nU(       aj  [        R                  " U R                  U5      R                  5      n U" SS5      nU(       d  O[        R                  X4v   M'  U" SS5      nU(       a  Mi  g g 7f)Nz/users/r   z/photos
_extractorz role-pop" href=""zdata-page="next" href=")r   rQ   r   r   extract_fromrf   r   Queue)r   r0   r.   rh   s       r   r1   XhamsterUserExtractor.itemsl   s     74;;q>"2':67$$T\\#%6%;%;<D.4mmS..	 
 0#6C cs   BBBr   N)r   r   r   r   r   rl   rp   rq   rr   r1   r   r   r   r   rt   rt   f   s    9KHHG6G7r   rt   N)r   commonr   r   r!   r   r   rp   r	   r   rt   r   r   r   <module>r}      sB    + & ?(	 (HD0 HDV7- 7r   