
    i#                         S r SSKJrJr  SSKJr  SSKJ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g)z#Extractors for https://redgifs.com/   )	ExtractorMessage   )text)memcachec                   L    \ 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)RedgifsExtractor   z!Base class for redgifs extractorsredgifsz;{category}_{gallery:?//[:11]}{num:?_/_/>02}{id}.{extension}z{id}zhttps://www.redgifs.comc                 D    [         R                  " X5        US   U l        g )Nr   )r   __init__keyselfmatchs     I/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/redgifs.pyr   RedgifsExtractor.__init__   s    4'8    c                     [        U 5      U l        U R                  S5      nUc  SnO[        U[        5      (       a  USSS4nXl        g )Nformat)hdsdgifr   r   r   )
RedgifsAPIapiconfig
isinstancestrformats)r   r   s     r   _initRedgifsExtractor._init   sF    d#++h'?)G%%dE2Gr   c              #     #    U R                  5       nU R                  5        GH  nUR                  S5      =n(       a,  U R                  R	                  U5      S   nSn[        U5      nOU4nSnSnUR                  U5        XbS'   U R                  UR                  S5      5      US'   [        R                  SU4v   [        XE5       Hk  u  prU R                  U5      =US	'   n[        US 5      n	U	(       d!  U R                  R                  S
US   5        MO  XrS'   XbS'   [        R                  X4v   Mm     GM     g 7f)Ngallerygifsr       count
createDatedate 	_fallbackz$Skipping '%s' (format not available)idnum)metadatar$   getr   r#   lenupdateparse_timestampr   	Directory	enumerate_formatsnextlogwarningUrl)
r   r-   r   r#   r$   enumcntr,   r   urls
             r   itemsRedgifsExtractor.items&   s#    ==?99;C''),,w,xx''08$ivJJx L..sww|/DECK##R,,%d1-1]]3-??K 77D)HH$$>D	K E
"Gkk3++ 2! s   D=D?c              #      #    US   nU R                    HJ  nUR                  U5      =n(       d  M  UR                  SSS5      n[        R                  " XA5        Uv   ML     g 7f)Nurlsz
//thumbs2.z
//thumbs3.r   )r   r.   replacer   nameext_from_url)r   r   r?   fmtr;   s        r   r4   RedgifsExtractor._formatsF   sT     6{<<Chhsm#s#kk,a@%%c/		  s
   +A#2A#c                     0 $ N r   s    r   r-   RedgifsExtractor.metadataN   s    	r   c                     g)NrF   rF   rG   s    r   r$   RedgifsExtractor.gifsQ   s    r   )r   r   r   N)__name__
__module____qualname____firstlineno____doc__categoryfilename_fmtarchive_fmtrootr   r    r<   r4   r-   r$   __static_attributes__rF   r   r   r	   r	      s;    +HE K$D,@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g)RedgifsUserExtractorU   z#Extractor for redgifs user profilesuser)
{category}z
{userName}zE(?:https?://)?(?:\w+\.)?redgifs\.com/users/([^/?#]+)/?(?:\?([^#]+))?$z"https://www.redgifs.com/users/USERc                 B    [         R                  X5        US   U l        g Nr   r	   r   queryr   s     r   r   RedgifsUserExtractor.__init__]       !!$.1X
r   c                     SU R                   0$ )NuserNamer   rG   s    r   r-   RedgifsUserExtractor.metadataa   s    DHH%%r   c                     [         R                  " U R                  5      R                  S5      nU R                  R                  U R                  U=(       d    S5      $ Nordernew)r   parse_queryr]   r.   r   rX   r   r   rf   s     r   r$   RedgifsUserExtractor.gifsd   s>      ,009xx}}TXXu~66r   r]   N)rK   rL   rM   rN   rO   subcategorydirectory_fmtpatternexampler   r-   r$   rT   rF   r   r   rV   rV   U   s*    -K0M"G2G&7r   rV   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)RedgifsCollectionExtractori   z+Extractor for an individual user collection
collection)rY   z{collection[userName]}z{collection[folderName]}z{collection[folderId]}_{id}zJ(?:https?://)?(?:www\.)?redgifs\.com/users/([^/?#]+)/collections/([^/?#]+)z1https://www.redgifs.com/users/USER/collections/IDc                 B    [         R                  X5        US   U l        g r[   )r	   r   collection_idr   s     r   r   #RedgifsCollectionExtractor.__init__s   s    !!$."1Xr   c                     U R                   R                  U R                  U R                  5      nU R                  US'   SU0$ )Nra   rs   )r   collection_infor   ru   )r   rs   s     r   r-   #RedgifsCollectionExtractor.metadataw   s;    XX--dhh8J8JK
!%
:j))r   c                 b    U R                   R                  U R                  U R                  5      $ rE   )r   rs   r   ru   rG   s    r   r$   RedgifsCollectionExtractor.gifs|   s#    xx""488T-?-?@@r   )ru   N)rK   rL   rM   rN   rO   rl   rm   rR   rn   ro   r   r-   r$   rT   rF   r   r   rq   rq   i   s3    5KLM/K3GAG&*
Ar   rq   c                   *    \ rS rSrSrSrSrSrS rSr	g)	RedgifsCollectionsExtractor   z&Extractor for redgifs user collectionscollectionszC(?:https?://)?(?:www\.)?redgifs\.com/users/([^/?#]+)/collections/?$z.https://www.redgifs.com/users/USER/collectionsc              #      #    U R                    SU R                   S3nU R                  R                  U R                  5       H'  nXS   -   n[        US'   [
        R                  X24v   M)     g 7f)Nz/users//collections/folderId
_extractor)rS   r   r   r   rq   r   Queue)r   basers   r;   s       r   r<   !RedgifsCollectionsExtractor.items   sb     ))GDHH:];((..txx8JJ//C'AJ|$--00 9s   A.A0rF   N)
rK   rL   rM   rN   rO   rl   rn   ro   r<   rT   rF   r   r   r}   r}      s    0K,G>G1r   r}   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g	)
RedgifsNichesExtractor   zExtractor for redgifs nichesnicheszF(?:https?://)?(?:www\.)?redgifs\.com/niches/([^/?#]+)/?(?:\?([^#]+))?$z#https://www.redgifs.com/niches/NAMEc                 B    [         R                  X5        US   U l        g r[   r\   r   s     r   r   RedgifsNichesExtractor.__init__   r_   r   c                     [         R                  " U R                  5      R                  S5      nU R                  R                  U R                  U=(       d    S5      $ re   )r   rh   r]   r.   r   r   r   ri   s     r   r$   RedgifsNichesExtractor.gifs   s>      ,009xxtxx%88r   rk   N)rK   rL   rM   rN   rO   rl   rn   ro   r   r$   rT   rF   r   r   r   r      s     &K"G3G9r   r   c                   4    \ rS rSrSrSrSrSrSrS r	S r
S	rg
)RedgifsSearchExtractor   z$Extractor for redgifs search resultssearch)rY   Searchz{search}za(?:https?://)?(?:\w+\.)?redgifs\.com/(?:gifs/([^/?#]+)|search(?:/gifs)?()|browse)(?:/?\?([^#]+))?z https://www.redgifs.com/gifs/TAGc                 4   U R                   u  ol        n[        R                  " U5      =U l        nUb  [        R
                  " U5      US'   SUR                  S5      =(       d2    UR                  S5      =(       d    UR                  S5      =(       d    S0$ )Ntagsr   r]   rf   trending)groupsr   r   rh   paramsunquoter.   )r   tagr]   r   s       r   r-   RedgifsSearchExtractor.metadata   s    "&++[%#//66f?!\\#.F6N6::g. &!::f-&!::g.& &( 	(r   c                     U R                   c%  U R                  R                  U R                  5      $ U R                  R	                  U R                  5      $ rE   )r   r   gifs_searchr   search_gifsrG   s    r   r$   RedgifsSearchExtractor.gifs   s>    ;;88''4488''44r   )r   r   N)rK   rL   rM   rN   rO   rl   rm   rn   ro   r-   r$   rT   rF   r   r   r   r      s'    .K8M#G 1G
(5r   r   c                   *    \ rS rSrSrSrSrSrS rSr	g)	RedgifsImageExtractor   z.Extractor for individual gifs from redgifs.comimagez(?:https?://)?(?:(?:\w+\.)?redgifs\.com/(?:watch|ifr)|(?:\w+\.)?gfycat\.com(?:/gifs/detail|/\w+)?|(?:www\.)?gifdeliverynetwork\.com|i\.redgifs\.com/i)/([A-Za-z0-9]+)zhttps://redgifs.com/watch/IDc                 N    U R                   R                  U R                  5      4$ rE   )r   r   r   rG   s    r   r$   RedgifsImageExtractor.gifs   s    TXX&((r   rF   N)
rK   rL   rM   rN   rO   rl   rn   ro   r$   rT   rF   r   r   r   r      s    8K4G
 -G)r   r   c                       \ rS rSrSrSrS rS rS rSS jr	S r
S	 rS
 rS rS rS rSS jrSS jr\" SS9S 5       rSrg)r      z'https://api.redgifs.com/docs/index.htmlzhttps://api.redgifs.comc                 V    Xl         SUR                  S-   S UR                  S.U l        g )Nz!application/json, text/plain, */*/)AcceptRefererAuthorizationOrigin)	extractorrS   headers)r   r   s     r   r   RedgifsAPI.__init__   s)    "A'nns2"'nn	
r   c                 P    SUR                  5       -   nU R                  U5      S   $ )Nz	/v2/gifs/r   )lower_call)r   gif_idendpoints      r   r   RedgifsAPI.gif   s&    /zz(#E**r   c                 .    SU-   nU R                  U5      $ )Nz/v2/gallery/r   )r   
gallery_idr   s      r   r#   RedgifsAPI.gallery   s    !J.zz(##r   c                 T    SUR                  5        S3nSU0nU R                  X45      $ )N
/v2/users/z/searchrf   )r   _pagination)r   rX   rf   r   r   s        r   rX   RedgifsAPI.user   s1    

~W55!11r   c                 6    SU SU S3nU R                  U5      $ )Nr   r   /gifsr   r   rX   ru   r   s       r   rs   RedgifsAPI.collection   s'    v]=/G))r   c                 4    SU SU 3nU R                  U5      $ )Nr   r   r   r   s       r   rx   RedgifsAPI.collection_info   s#    v]=/Bzz(##r   c                 .    SU S3nU R                  USS9$ )Nr   z/collectionsr   rb   r   )r   rX   r   s      r   r   RedgifsAPI.collections   s&    v\2m<<r   c                 :    SU S3nSUS.nU R                  X45      $ )Nz/v2/niches/r      )r&   rf   r   )r   nicherf   r   r   s        r   r   RedgifsAPI.niches   s+     u-.11r   c                 R    SnUR                  SS 5      US'   U R                  X!5      $ )Nz/v2/gifs/searchr   search_text)popr   r   r   r   s      r   r   RedgifsAPI.gifs_search   s-    $ &

64 8}11r   c                 (    SnU R                  X!5      $ )Nz/v2/search/gifsr   r   s      r   r   RedgifsAPI.search_gifs   s    $11r   Nc                     U R                   U-   nU R                  5       U R                  S'   U R                  R	                  X2U R                  S9$ )Nr   )r   r   )API_ROOT_authr   r   request_json)r   r   r   r;   s       r   r   RedgifsAPI._call   sI    mmh&(,

_%~~** + 6 	6r   c              #      #    Uc  0 nSUS'    U R                  X5      nXC    S h  vN   US   US   :  a  g US==   S-  ss'   M9   N 7f)Nr   pagepagesr   )r   r   r   r   datas        r   r   RedgifsAPI._pagination  s]     >Fv::h/Dy  f~g.6NaN  s   $A	A!A	iX  )maxagec                     U R                   S-   nS U R                  S'   SU R                  R                  XR                  S9S   -   $ )Nz/v2/auth/temporaryr   zBearer )r   token)r   r   r   r   )r   r;   s     r   r   RedgifsAPI._auth  sS     mm22(,_%4>>66 7 ''.0 0 	0r   )r   r   )rg   rE   )Nr$   )rK   rL   rM   rN   rO   r   r   r   r#   rX   rs   rx   r   r   r   r   r   r   r   r   rT   rF   r   r   r   r      s_    1(H
+$2
*$=2
2
26  S0 0r   r   N)rO   commonr   r   r)   r   cacher   r	   rV   rq   r}   r   r   r   r   rF   r   r   <module>r      s~    * &  By BJ7+ 7(A!1 A.1"2 19- 9 5- 58), )N0 N0r   