Ë
    š„j�(  ã                   ó    — d dl Z d dlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZmZ  G d„ de«      Z G d	„ d
e«      Z G d„ de«      Z G d„ de«      Zy)é    Né   )ÚInfoExtractoré   )Ú	HTTPError)ÚExtractorErrorÚOnDemandPagedListÚint_or_noneÚ	qualitiesÚtry_getc                   óH   — e Zd ZddddœZddddœZd	„ Zd
„ Zd„ Zd„ Zd„ Z	d„ Z
y)ÚRedGifsBaseIEéú   ià  N)ÚgifÚsdÚhdzhttps://www.redgifs.com/zhttps://www.redgifs.comzapplication/json)ÚrefererÚoriginzcontent-typec                 óz  ‡	— |j                  d«      }t        t        | j                  j	                  «       «      «      }t        |j                  d«      «      Š	t        |ˆ	fd„«      }g }| j                  j                  «       D ]Y  \  }}|d   j                  |«      }|sŒt        ‰	|xs ‰	«      }|j                  |||rt        ||z  «      nd | ||«      dœ«       Œ[ |d|› �t        j                  «       ddj                  |j                  d	«      xs g «      xs dt        |j                  d
«      «      |j                  d«      t        |j                  d«      «      t        |j                  d«      «      t        |j                  d«      «      |j                  d	«      xs g |j                  d	«      d|dœS )NÚidÚheightc                 ó   •— | d   ‰z  S )NÚwidth© )ÚxÚorig_heights    €úO/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/redgifs.pyú<lambda>z/RedGifsBaseIE._parse_gif_data.<locals>.<lambda>!   s   ø€ °1°W±:ÀÑ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_ratior6   r!   r   Ú	video_urlr   s
            @r   Ú_parse_gif_datazRedGifsBaseIE._parse_gif_data   s�  ø€ Ø—<‘< Ó%ˆÜœE $§-¡-×"4Ñ"4Ó"6Ó7Ó8ˆä! (§,¡,¨xÓ"8Ó9ˆÜ˜xÓ)KÓLˆàˆØ!%§¡×!4Ñ!4Ó!6ò 	ÑˆI�vØ  Ñ(×,Ñ,¨YÓ7ˆIÙØÜ˜ fÒ&;°Ó<ˆFØ�N‰NØ Ø&Ù?Kœ V¨lÑ%:Ô;ÐQUØ Ù" 9Ó-ñõ ð	ð Ø7¸°zÐBÜ&×-Ñ-Ó/Ø"Ø—X‘X˜hŸl™l¨6Ó2Ò8°bÓ9ÒF¸YÜ$ X§\¡\°,Ó%?Ó@Ø Ÿ™ ZÓ0Ü# H§L¡L°Ó$<Ó=Ü% h§l¡l°7Ó&;Ó<Ü% h§l¡l°7Ó&;Ó<Ø"Ÿ,™, vÓ.Ò4°"Ø—L‘L Ó(ØØñ
ð 	
r   c                 óŽ   — | j                  d|d¬«      }|j                  d«      st        d«      ‚d|d   › �| j                  d<   y )Nz)https://api.redgifs.com/v2/auth/temporaryzFetching temporary token©ÚnoteÚtokenzUnable to get temporary tokenzBearer Úauthorization)Ú_download_jsonr7   r   Ú_API_HEADERS)rA   rC   Úauths      r   Ú_fetch_oauth_tokenz RedGifsBaseIE._fetch_oauth_tokenB   sT   € à×"Ñ"Ð#NØ#+Ð2Lð #ó Nˆà�x‰x˜Ô Ü Ð!@ÓAÐAØ/6°t¸G±}°oÐ-Fˆ×Ñ˜/Ò*r   c                 ó¤  — dD ]Y  }d| j                   vr| j                  |«       	 t        | j                   «      }d|› �|d<    | j                  d|› �|fd|i|¤Ž} n dv rt	        d	|d   › �d
|¬«      ‚|S # t        $ rM}|rEt        |j                  t        «      r+|j                  j                  dk(  r| j                   d= Y d }~ŒÆ‚ d }~ww xY w)N)TFrK   zhttps://www.redgifs.com/watch/zx-customheaderzhttps://api.redgifs.com/v2/Úheadersi‘  ÚerrorzRedGifs said: T)ÚexpectedrC   )	rM   rO   ÚdictrL   r   Ú
isinstanceÚcauser   Ústatus)rA   ÚeprC   ÚkwargsÚfirst_attemptrQ   ÚdataÚes           r   Ú	_call_apizRedGifsBaseIE._call_apiJ   s÷   € Ø(ò 	ˆMØ d×&7Ñ&7Ñ7Ø×'Ñ'¨Ô1ð
Ü˜t×0Ñ0Ó1�Ø.LÈXÈJÐ,W�Ð(Ñ)Ø*�t×*Ñ*Ø1°"°Ð6¸ñ]ØJQð]ØU[ñ]�áð	ð �d‰?Ü  >°$°w±-°Ð!AÈDÐ[cÔdÐdØˆøô "ò Ù ¤Z°·±¼Ô%CÈÏÉÏÉÐZ]ÒH]Ø×)Ñ)¨/Ð:ÜØûð	ús   ¦6A9Á9	CÂAC
Ã	C
Ã
Cc              #   óŒ   K  — |dz   |d<   | j                  |||d|dz   › �¬«      }|d   D ]  }| j                  |«      –— Œ y ­w)Nr   ÚpagezDownloading JSON metadata page )ÚqueryrI   Úgifs)r]   rF   )rA   rX   rC   r`   r_   r[   Úentrys          r   Ú_fetch_pagezRedGifsBaseIE._fetch_page^   sc   è ø€ Ø˜q™ˆˆf‰Ø�~‰~Ø� Ð.MÈdÐUVÉhÈZÐ,Xð ó Zˆð ˜&‘\ò 	.ˆEØ×&Ñ& uÓ-Ó-ñ	.ùs   ‚AAc           	      ó¼   — |j                  «       D ��cg c]  \  }}||j                  ||f«      d   f‘Œ }}}|D ��ci c]  \  }}|€Œ	||“Œ c}}S c c}}w c c}}w )Nr   )r;   r7   )rA   r`   ÚfieldsÚ
field_nameÚdefaultÚ	api_queryÚkeyÚvals           r   Ú_prepare_api_queryz RedGifsBaseIE._prepare_api_queryf   sl   € ð (.§|¡|£~÷7á#�
˜Gð ˜Ÿ™ :°¨zÓ:¸1Ñ=Ò>ð7ˆ	ñ 7ð *3×F™X˜S #°c±o��S‘ÓFÐFùó	7ùó Gs   ”"A¾
AÁ	Ac           	      óâ   — t        |j                  dd«      d   «      }t        j                  | j                  ||| j                  ||«      «      }|r ||«      S t        || j                  «      S )Nr_   )Nr   )r	   r7   Ú	functoolsÚpartialrc   rk   r   Ú
_PAGE_SIZE)rA   rX   Úitem_idr`   re   r_   Úpage_fetchers          r   Ú_paged_entrieszRedGifsBaseIE._paged_entriesm   sg   € Ü˜5Ÿ9™9 V¨WÓ5°aÑ8Ó9ˆÜ ×(Ñ(Ø×Ñ˜b '¨4×+BÑ+BÀ5È&Ó+QóSˆá%)‰|˜DÓ!Ð_Ô/@ÀÈtÏÉÓ/_Ð_r   )Ú__name__Ú
__module__Ú__qualname__r9   rM   rF   rO   r]   rc   rk   rr   r   r   r   r   r      sF   „ àØØñ€Hð .Ø+Ø*ñ€Lò$
òLGòò(.òGó`r   r   c                   ó€   — e Zd ZdZdddddddd	eeed
edœdœdddddddd	eeed
edœdœdddddddd	eeed
edœdœgZd„ Zy)r>   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   Úextr/   r0   Úupload_dater1   r(   r2   r3   r4   r5   r%   )r    Ú	info_dictz@https://thumbs2.redgifs.com/SqueakyHelplessWisent-mobile.mp4#t=0z1https://www.redgifs.com/ifr/squeakyhelplesswisentc                 ó˜   — | j                  |«      j                  «       }| j                  d|› d�|d¬«      }| j                  |d   «      S )Nzgifs/z
?views=yeszDownloading video inforH   r   )Ú	_match_idÚlowerr]   rF   )rA   r    rC   Ú
video_infos       r   Ú_real_extractzRedGifsIE._real_extract¨   sT   € Ø—>‘> #Ó&×,Ñ,Ó.ˆØ—^‘^Ø�H�:˜ZÐ(¨(Ð9Qð $ó Sˆ
à×#Ñ# J¨uÑ$5Ó6Ð6r   N)rs   rt   ru   Ú
_VALID_URLÚintÚlistÚ_TESTSrƒ   r   r   r   r>   r>   t   s®   „ Øo€JàDà)ØØ)Ø#Ø%Ø#ØØØØØØñ
ñð" Rà)ØØ)Ø#Ø%Ø#ØØØØØØñ
ñð" Cà)ØØ)Ø#Ø%Ø#ØØØØØØñ
ñðA0€Fód7r   r>   c                   óX   — e Zd ZdZdZdZdddddœd	d
œdddddœd	d
œdddddœddœgZd„ Zy)ÚRedGifsSearchIEz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   r/   Údescriptionéd   ©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           	      ó~  — | j                  |«      j                  d«      }t        j                  j	                  |«      }|j                  d«      st        dd¬«      ‚|j                  d«      d   }|j                  dd«      d   }|g|d	<   | j                  d
||d dd dœ«      }| j                  |||d|› d|› �«      S )Nr`   r%   zInvalid query tagsT)rS   r   Úorder)ÚtrendingÚsearch_textzgifs/searchr•   )r–   r”   ÚtypezRedGifs search for ú, ordered by )	Ú_match_valid_urlÚgroupÚurllibÚparseÚparse_qsr7   r   rr   Úplaylist_result)rA   r    Ú	query_strr`   r%   r”   Úentriess          r   rƒ   zRedGifsSearchIE._real_extractÑ   sÒ   € Ø×)Ñ)¨#Ó.×4Ñ4°WÓ=ˆ	Ü—‘×%Ñ% iÓ0ˆØ�y‰y˜Ô Ü Ð!5ÀÔEÐEà�y‰y˜Ó  Ñ#ˆØ—	‘	˜' =Ó1°!Ñ4ˆà $˜vˆˆmÑØ×%Ñ% m°YÀØØØñH
ó ˆð ×#Ñ#Ø�Y Ð(;¸D¸6ÀÈuÈgÐ&VóXð 	Xr   N©rs   rt   ru   ÚIE_DESCr„   ro   r‡   rƒ   r   r   r   r‰   r‰   ¯   sx   „ Ø€GØL€JØ€Jð Aà$Ø"ØPñð
 "%ñ	
ð Uà8Ø"ØNñð
 "%ñ	
ð \à?Ø"ØNñð
 !ñ	
ð'€Fó<Xr   r‰   c            	       ól   — e Zd ZdZdZdZdddddœdd	œd
ddddœddœdddddœdd	œddddddœddœgZd„ Zy)ÚRedGifsUserIEz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/7382rz   z)RedGifs user ignored52, ordered by recentéy   )r    rI   r~   r�   c           	      ó2  — | j                  |«      j                  dd«      \  }}|r|› d|› �n|}t        j                  j	                  |«      }|j                  dd«      d   }| j                  d|› d�||d	d d
œ«      }| j                  |||d|› d|› �«      S )NÚusernamer`   ú?r”   )Úrecentr   zusers/z/searchrª   )r”   r—   zRedGifs user r˜   )r™   rš   r›   rœ   r�   r7   rr   rž   )rA   r    r¨   rŸ   Úplaylist_idr`   r”   r    s           r   rƒ   zRedGifsUserIE._real_extract  s»   € Ø"×3Ñ3°CÓ8×>Ñ>¸zÈ7ÓSÑˆ�)Ù3<˜˜
 ! I ;Ñ/À(ˆä—‘×%Ñ% iÓ0ˆØ—	‘	˜' ;Ó/°Ñ2ˆà×%Ñ%¨¨x¨j¸Ð&@À+ÈuØØñW
ó ˆð
 ×#Ñ#Ø�[ (¨m¸H¸:À]ÐSXÐRYÐ,Zó\ð 	\r   Nr¡   r   r   r   r¤   r¤   å   s˜   „ Ø€GØf€JØ€Jð >à"Ø%ØKñð
 "%ñ	
ð Eà)Ø%ØKñð
 !ñ	
ð Pà4Ø%ØIñð
 "%ñ	
ð =ØBà!Ø$ØJñð
 "%ñ		
ð9&€FóP\r   r¤   )rm   Ú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7ôv3X�mô 3Xôl9\�Mõ 9\r   