
    V|h(                         S SK r S SKrSSKJr  SSKJr  SSKJrJ	r	J
r
JrJr   " S S\5      r " S	 S
\5      r " S S\5      r " S S\5      rg)    N   )InfoExtractor   )	HTTPError)ExtractorErrorOnDemandPagedListint_or_none	qualitiestry_getc                   P    \ rS rSrSSSS.rSSSS	.rS
 rS rS rS r	S r
S rSrg)RedGifsBaseIE      i  N)gifsdhdzhttps://www.redgifs.com/zhttps://www.redgifs.comzapplication/json)refereroriginzcontent-typec                   ^	 UR                  S5      n[        [        U R                  R	                  5       5      5      n[        UR                  S5      5      m	[        UU	4S j5      n/ nU R                  R                  5        H_  u  pgUS   R                  U5      nU(       d  M"  [        T	U=(       d    T	5      nUR                  UUU(       a  Xt-  OS UU" U5      S.5        Ma     USU 3[        R                  5       SSR                  UR                  S	5      =(       d    / 5      =(       d    S[        UR                  S
5      5      UR                  S5      [        UR                  S5      5      [        UR                  S5      5      [        UR                  S5      5      UR                  S	5      =(       d    / UR                  S	5      SUS.$ )Nidheightc                    > TU S   -  $ )Nwidth )xorig_heights    R/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/redgifs.py<lambda>/RedGifsBaseIE._parse_gif_data.<locals>.<lambda>!   s    ;73K    urls)url	format_idr   r   qualityzhttps://redgifs.com/watch/RedGifs tags
createDateuserNamedurationviewslikes   )r   webpage_urlextractor_key	extractortitle	timestampuploaderr*   
view_count
like_count
categoriesr'   	age_limitformats)getr
   tuple_FORMATSkeysr	   r   itemsminappend	RedGifsIEie_keyjoin)
selfgif_datavideo_idr$   aspect_ratior8   r#   r   	video_urlr   s
            @r   _parse_gif_dataRedGifsBaseIE._parse_gif_data   s~   <<%E$--"4"4"678!(,,x"89x)KL!%!4!4!6I (,,Y7If&;<FNN &2>.D "9-  "7 7zB&--/"XXhll628b9FY$X\\,%?@ Z0#HLL$<=%hll7&;<%hll7&;<",,v.4"LL(
 	
r    c                     U R                  SUSS9nUR                  S5      (       d  [        S5      eSUS    3U R                  S'   g )Nz)https://api.redgifs.com/v2/auth/temporaryzFetching temporary tokennotetokenzUnable to get temporary tokenzBearer authorization)_download_jsonr9   r   _API_HEADERS)rC   rE   auths      r   _fetch_oauth_token RedGifsBaseIE._fetch_oauth_tokenB   sW    ""#N#+2L # Nxx   !@AA/6tG}o-F/*r    c                    S H[  nSU R                   ;  a  U R                  U5         [        U R                   5      nSU 3US'   U R                  " SU 3U4SU0UD6n  O   SW;   a  [	        S	US    3S
US9eU$ ! [         aY  nU(       aL  [        UR                  [        5      (       a-  UR                  R                  S:X  a  U R                   S	  S nAM  e S nAff = f)N)TFrN   zhttps://www.redgifs.com/watch/zx-customheaderzhttps://api.redgifs.com/v2/headersi  errorzRedGifs said: T)expectedrE   )	rP   rR   dictrO   r   
isinstancecauser   status)rC   eprE   kwargsfirst_attemptrU   dataes           r   	_call_apiRedGifsBaseIE._call_apiJ   s    (Md&7&77''1
t001.LXJ,W()**1"6]JQ]U[] ) d? >$w-!AD[cdd "  Z%C%CZ]H]))/:	s   6A;;
CACCCc              #      #    US-   US'   U R                  XUSUS-    3S9nUS    H  nU R                  U5      v   M     g 7f)Nr   pagezDownloading JSON metadata page )queryrL   gifs)ra   rH   )rC   r\   rE   re   rd   r_   entrys          r   _fetch_pageRedGifsBaseIE._fetch_page^   s[     qf~~.MdUVhZ,X  Z &\E&&u-- "s   A Ac           	          UR                  5        VVs/ s H  u  p4X1R                  X445      S   4PM     nnnU VVs0 s H  u  pgUc  M
  Xg_M     snn$ s  snnf s  snnf )Nr   )r=   r9   )rC   re   fields
field_namedefault	api_querykeyvals           r   _prepare_api_query RedGifsBaseIE._prepare_api_queryf   sj     (.||~7'5#
 :z:1=>'5 	 7 *3FXScFF	7 Gs   "A	AAc           	          [        UR                  SS5      S   5      n[        R                  " U R                  XU R                  X45      5      nU(       a  U" U5      $ [        X`R                  5      $ )Nrd   )Nr   )r	   r9   	functoolspartialrh   rq   r   
_PAGE_SIZE)rC   r\   item_idre   rk   rd   page_fetchers          r   _paged_entriesRedGifsBaseIE._paged_entriesm   sa    599VW5a89 ((b4+B+B5+QS%)|D!_/@/__r    r   )__name__
__module____qualname____firstlineno__r;   rP   rH   rR   ra   rh   rq   ry   __static_attributes__r   r    r   r   r      sF    H .+*L$
LG(.G`r    r   c                       \ rS rSrSrSSSSSSS	S
\\\S\S.S.SSSSSSS	S
\\\S\S.S.SSSSSSS	S
\\\S\S.S./rS rSr	g)r@   t   z[https?://(?:(?:www\.)?redgifs\.com/(?:watch|ifr)/|thumbs2\.redgifs\.com/)(?P<id>[^-/?#\.]+)z3https://www.redgifs.com/watch/squeakyhelplesswisentsqueakyhelplesswisentmp4zHotwife Legs ThickiŇa20211107	ignored52   r-   )r   extr1   r2   upload_dater3   r*   r4   r5   r6   r7   r'   )r"   	info_dictz@https://thumbs2.redgifs.com/SqueakyHelplessWisent-mobile.mp4#t=0z1https://www.redgifs.com/ifr/squeakyhelplesswisentc                     U R                  U5      R                  5       nU R                  SU S3USS9nU R                  US   5      $ )Nzgifs/z
?views=yeszDownloading video inforK   r   )	_match_idlowerra   rH   )rC   r"   rE   
video_infos       r   _real_extractRedGifsIE._real_extract   sT    >>#&,,.^^H:Z((9Q $ S
##Ju$566r    r   N)
r{   r|   r}   r~   
_VALID_URLintlist_TESTSr   r   r   r    r   r@   r@   t   s    oJD))#%#
" R))#%#
" C))#%#
A0Fd7r    r@   c                   `    \ rS rSrSrSrSrSSSSS	.S
S.SSSSS	.S
S.SSSSS	.SS./rS rSr	g)RedGifsSearchIE   zRedgifs searchz8https?://(?:www\.)?redgifs\.com/browse\?(?P<query>[^#]+)P   z+https://www.redgifs.com/browse?tags=Lesbianztags=LesbianLesbianz/RedGifs search for Lesbian, ordered by trendingr   r1   descriptiond   r"   r   playlist_mincountz?https://www.redgifs.com/browse?type=g&order=latest&tags=Lesbianz type=g&order=latest&tags=Lesbianz-RedGifs search for Lesbian, ordered by latestzFhttps://www.redgifs.com/browse?type=g&order=latest&tags=Lesbian&page=2z'type=g&order=latest&tags=Lesbian&page=2r"   r   playlist_countc           	      ~   U R                  U5      R                  S5      n[        R                  R	                  U5      nUR                  S5      (       d
  [        SSS9eUR                  S5      S   nUR                  SS5      S   nU/US	'   U R                  S
X#S SS S.5      nU R                  XbUSU SU 35      $ )Nre   r'   zInvalid query tagsT)rW   r   order)trendingsearch_textzgifs/searchr   )r   r   typezRedGifs search for , ordered by )	_match_valid_urlgroupurllibparseparse_qsr9   r   ry   playlist_result)rC   r"   	query_strre   r'   r   entriess          r   r   RedGifsSearchIE._real_extract   s    ))#.44W=	%%i0yy   !5EEyy #		'=1!4 $vm%%mYH
  ##(;D6ug&VX 	Xr    r   N
r{   r|   r}   r~   IE_DESCr   rv   r   r   r   r   r    r   r   r      sx    GLJJ A$"P
 "%	
 U8"N
 "%	
 \?"N
 !	
'F<Xr    r   c            	       t    \ rS rSrSrSrSrSSSSS.S	S
.SSSSS.SS.SSSSS.S	S
.SSSSSS.SS./rS rSr	g)RedGifsUserIE   zRedgifs userzRhttps?://(?:www\.)?redgifs\.com/users/(?P<username>[^/?#]+)(?:\?(?P<query>[^#]+))?r   z(https://www.redgifs.com/users/lamsinka89
lamsinka89z*RedGifs user lamsinka89, ordered by recentr   i  r   z/https://www.redgifs.com/users/lamsinka89?page=3zlamsinka89?page=3r   z:https://www.redgifs.com/users/lamsinka89?order=best&type=gzlamsinka89?order=best&type=gz(RedGifs user lamsinka89, ordered by bestz'https://www.redgifs.com/users/ignored52z,https://github.com/yt-dlp/yt-dlp/issues/7382r   z)RedGifs user ignored52, ordered by recenty   )r"   rL   r   r   c           	      6   U R                  U5      R                  SS5      u  p#U(       a  U SU 3OUn[        R                  R	                  U5      nUR                  SS5      S   nU R                  SU S3XES	S S
.5      nU R                  XtUSU SU 35      $ )Nusernamere   ?r   )recentr   zusers/z/searchr   )r   r   zRedGifs user r   )r   r   r   r   r   r9   ry   r   )rC   r"   r   r   playlist_idre   r   r   s           r   r   RedGifsUserIE._real_extract  s    "33C8>>z7S3<
!I;/(%%i0		';/2%%xj&@+W
 
 ##(mH:]SXRY,Z\ 	\r    r   Nr   r   r    r   r   r      s    GfJJ >"%K
 "%	
 E)%K
 !	
 P4%I
 "%	
 =B!$J
 "%		
9&FP\r    r   )rt   urllib.parser   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r@   r   r   r   r    r   <module>r      sV      ! - b`M b`J87 87v3Xm 3Xl9\M 9\r    