
    Ği(                         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dS )    N   )InfoExtractor   )	HTTPError)ExtractorErrorOnDemandPagedListint_or_none	qualitiestry_getc                   J    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
dS )RedGifsBaseIE   i  N)gifsdhdzhttps://www.redgifs.com/zhttps://www.redgifs.comzapplication/json)refereroriginzcontent-typec                   	 |                     d          }t          t          | j                                                            }t          |                     d                    	t          |	fd          }g }| j                                        D ]`\  }}|d                              |          }|s#t          	|p	          }|	                    |||r||z  nd | ||          d           a|d| t                                          dd                    |                     d	          pg           pdt          |                     d
                    |                     d          t          |                     d                    t          |                     d                    t          |                     d                    |                     d	          pg |                     d	          d|dS )Nidheightc                     | d         z  S )Nwidth )xorig_heights    ]C:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/redgifs.py<lambda>z/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_ratior6   r!   r   	video_urlr   s
            @r   _parse_gif_datazRedGifsBaseIE._parse_gif_data   s   <<%%E$-"4"4"6"67788!(,,x"8"899x)K)K)K)KLL!%!4!4!6!6 	 	Iv (,,Y77I f&;<<FNN &2>H,..D "79--      BBB&--//"XXhll6228b99FY$X\\,%?%?@@ Z00#HLL$<$<==%hll7&;&;<<%hll7&;&;<<",,v..4"LL((
 
 	
r   c                     |                      d|d          }|                    d          st          d          d|d          | j        d<   d S )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   sj    ""#N#+2L # N Nxx   	B !@AAA-FtG}-F-F/***r   c                    dD ]}d| j         vr|                     |           	 t          | j                   }d| |d<    | j        d| |fd|i|} nL# t          $ r?}|r7t          |j        t                    r|j        j        dk    r| j         d= Y d }~ d }~ww xY wd|v rt	          d	|d          d
|          |S )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   s0   ( 	 	Md&777''111
t011,WX,W,W()*t*6"66] ]JQ]U[] ]!     Z%C%C Z]H]H])/:HHHH	 d?? !A$w-!A!AD[cdddds   0A
B 4BBBc              #      K   |dz   |d<   |                      |||d|dz              }|d         D ]}|                     |          V  d S )Nr   pagezDownloading JSON metadata page )queryrI   gifs)r]   rF   )rA   rX   rC   r`   r_   r[   entrys          r   _fetch_pagezRedGifsBaseIE._fetch_page^   s      qf~~,XdUVh,X,X  Z Z &\ 	. 	.E&&u------	. 	.r   c                 \    fd|                                 D             }d |D             S )Nc                 T    g | ]$\  }}|                     ||f          d          f%S )r   )r7   ).0
field_namedefaultr`   s      r   
<listcomp>z4RedGifsBaseIE._prepare_api_query.<locals>.<listcomp>g   sG     7 7 7#
G :z::1=>7 7 7r   c                     i | ]
\  }}|||S Nr   )rf   keyvals      r   
<dictcomp>z4RedGifsBaseIE._prepare_api_query.<locals>.<dictcomp>k   s    FFFXS#coSooor   )r;   )rA   r`   fields	api_querys    `  r   _prepare_api_queryz RedGifsBaseIE._prepare_api_queryf   sJ    7 7 7 7'-||~~7 7 7	 GFFFFFr   c           	          t          |                    dd          d                   }t          j        | j        |||                     ||                    }|r ||          nt          || j                  S )Nr_   rk   r   )r	   r7   	functoolspartialrc   rq   r   
_PAGE_SIZE)rA   rX   item_idr`   ro   r_   page_fetchers          r   _paged_entrieszRedGifsBaseIE._paged_entriesm   sy    599VW55a899 (b'4+B+B5&+Q+QS S%)_||D!!!/@t/_/__r   )__name__
__module____qualname__r9   rM   rF   rO   r]   rc   rq   rx   r   r   r   r   r      s         H .+* L$
 $
 $
LG G G  (. . .G 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dS )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                     |                      |                                          }|                     d| d|d          }|                     |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   se    >>#&&,,..^^(H((((9Q $ S S
##Ju$5666r   N)ry   rz   r{   
_VALID_URLintlist_TESTSr   r   r   r   r>   r>   t   s        oJD))#%#
 
 " R))#%#
 
 " C))#%#
 
 A0Fd7 7 7 7 7r   r>   c                   Z    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dS )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/   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           	         |                      |                              d          }t          j                            |          }|                    d          st          dd          |                    d          d         }|                    dd          d         }|g|d	<   |                     d
||d dd d          }|                     |||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   rx   playlist_result)rA   r    	query_strr`   r%   r   entriess          r   r   zRedGifsSearchIE._real_extract   s   ))#..44W==	%%i00yy   	F !5EEEEyy  #		'=11!4 $vm%%mYH
 H
   ##Y&VD&V&Vu&V&VX X 	Xr   Nry   rz   r{   IE_DESCr   ru   r   r   r   r   r   r   r      s        GLJJ A$"P 
 "%	
 	
 U8"N 
 "%	
 	
 \?"N 
 !	
 	
'F<X X X X Xr   r   c            	       n    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dS )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/7382r   z)RedGifs user ignored52, ordered by recenty   )r    rI   r   r   c           	      `   |                      |                              dd          \  }}|r| d| n|}t          j                            |          }|                    dd          d         }|                     d| d||d	d d
          }|                     |||d| d|           S )Nusernamer`   ?r   )recentr   zusers/z/searchr   )r   r   zRedGifs user r   )r   r   r   r   r   r7   rx   r   )rA   r    r   r   playlist_idr`   r   r   s           r   r   zRedGifsUserIE._real_extract  s    "33C88>>z7SS)3<J//I///(%%i00		';//2%%&@x&@&@&@+uW
 W
  
 ##[(,ZH,Z,ZSX,Z,Z\ \ 	\r   Nr   r   r   r   r   r      s        GfJJ >"%K 
 "%	
 	
 E)%K 
 !	
 	
 P4%I 
 "%	
 	
 =B!$J 
 "%		
 		
9&FP\ \ \ \ \r   r   )rs   urllib.parser   commonr   networking.exceptionsr   utilsr   r   r	   r
   r   r   r>   r   r   r   r   r   <module>r      s^           ! ! ! ! ! ! - - - - - -             b` b` b` b` b`M b` b` b`J87 87 87 87 87 87 87 87v3X 3X 3X 3X 3Xm 3X 3X 3Xl9\ 9\ 9\ 9\ 9\M 9\ 9\ 9\ 9\ 9\r   