
    yf3%                         d dl Z ddlm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   )compat_parse_qs)	HTTPError)ExtractorErrorint_or_none	qualitiestry_getOnDemandPagedListc                   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)RedGifsBaseInfoExtractor   i  N)gifsdhdzhttps://www.redgifs.com/zhttps://www.redgifs.comzapplication/json)refereroriginzcontent-typec                 h  	 |j                  d      }t        t        | j                  j	                                     }t        |j                  d            	t        |	fd      }g }| j                  j                         D ]P  \  }}|d   j                  |      }|st        	|xs 	      }|j                  |||r||z  nd | ||      d       R |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    :/usr/lib/python3/dist-packages/yt_dlp/extractor/redgifs.py<lambda>z:RedGifsBaseInfoExtractor._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_ratior7   r"   r   	video_urlr   s
            @r   _parse_gif_dataz(RedGifsBaseInfoExtractor._parse_gif_data   s   <<%E$--"4"4"678!(,,x"89x)KL!%!4!4!6 	Iv (,,Y7If&;<FNN &2>,.D "9- 	 7zB&--/"XXhll628b9FY$X\\,%?@ Z0#HLL$<=%hll7&;<%hll7&;<",,v.4"LL(
 	
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_jsonr8   r   _API_HEADERS)rB   rD   auths      r   _fetch_oauth_tokenz+RedGifsBaseInfoExtractor._fetch_oauth_tokenB   sT    ""#N#+2L # Nxx  !@AA/6tG}o-F/*r   c                    dD ]\  }d| j                   vr| j                  |       	 t        | j                         }d| |d<    | j                  d| |g|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)TFrL   zhttps://www.redgifs.com/watch/zx-customheaderzhttps://api.redgifs.com/v2/headersi  errorzRedGifs said: T)expectedrD   )	rN   rP   dictrM   r   
isinstancecauser   status)	rB   eprD   argskwargsfirst_attemptrR   dataes	            r   	_call_apiz"RedGifsBaseInfoExtractor._call_apiJ   s    ( 	Md&7&77''1
t001.LXJ,W()*t**1"6dTXdJQd\bd	 d? >$w-!AD[cdd "  Z%CZ]H]))/:	s   9A<<	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 )queryrJ   gifs)r_   rG   )rB   rY   rD   rb   ra   r]   entrys          r   _fetch_pagez$RedGifsBaseInfoExtractor._fetch_page^   sc     qf~~.MdUVhZ,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<   r8   )rB   rb   fields
field_namedefault	api_querykeyvals           r   _prepare_api_queryz+RedGifsBaseInfoExtractor._prepare_api_queryf   sl     (.||~7#
G :z:1=>7	 7 *3FXS#coSFF	7 Gs   "A
A	Ac           	          t        |j                  dd      d         }t        j                  | j                  ||| j                  ||            }|r ||      S t        || j                        S )Nra   )Nr   )r	   r8   	functoolspartialre   rm   r   
_PAGE_SIZE)rB   rY   item_idrb   rg   ra   page_fetchers          r   _paged_entriesz'RedGifsBaseInfoExtractor._paged_entriesm   sg    599VW5a89 ((b'4+B+B5&+QS%)|D!_/@t/__r   )__name__
__module____qualname__r:   rN   rG   rP   r_   re   rm   rt   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gZd Zy)r?   zShttps?://(?:(?:www\.)?redgifs\.com/watch/|thumbs2\.redgifs\.com/)(?P<id>[^-/?#\.]+)z3https://www.redgifs.com/watch/squeakyhelplesswisentsqueakyhelplesswisentmp4zHotwife Legs ThickiŇa20211107	ignored52   r,   )r   extr0   r1   upload_dater2   r)   r3   r4   r5   r6   r&   )r!   	info_dictz@https://thumbs2.redgifs.com/SqueakyHelplessWisent-mobile.mp4#t=0c                     | j                  |      j                         }| j                  d| d|d      }| j                  |d         S )Nzgifs/z
?views=yeszDownloading video inforI   r   )	_match_idlowerr_   rG   )rB   r!   rD   
video_infos       r   _real_extractzRedGifsIE._real_extract   sT    >>#&,,.^^H:Z((9Q $ S
##Ju$566r   N)ru   rv   rw   
_VALID_URLintlist_TESTSr   r   r   r   r?   r?   t   sy    gJD))#%#
" R))#%#
! FD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   r0   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           	      V   | j                  |      j                  d      }t        |      }|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 )Nrb   r&   zInvalid query tagsT)rT   r   order)trendingsearch_textzgifs/searchr   )r   r   typezRedGifs search for , ordered by )_match_valid_urlgroupr   r8   r   rt   playlist_result)rB   r!   	query_strrb   r&   r   entriess          r   r   zRedGifsSearchIE._real_extract   s    ))#.44W=		*yy  !5EEyy #		'=1!4 $vm%%mYH
  ##Y(;D6ug&VX 	Xr   Nru   rv   rw   IE_DESCr   rq   r   r   r   r   r   r   r      sx    GLJJ A$"P
 "%	
 U8"N
 "%	
 \?"N
 !	
'F<Xr   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)RedGifsUserIEzRedgifs userzRhttps?://(?:www\.)?redgifs\.com/users/(?P<username>[^/?#]+)(?:\?(?P<query>[^#]+))?   z(https://www.redgifs.com/users/lamsinka89
lamsinka89z*RedGifs user lamsinka89, ordered by recentr   r   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 bestc           	      
   | j                  |      j                  dd      \  }}|r| d| n|}t        |      }|j                  dd      d   }| j	                  d| d||d	d d
      }| j                  |||d| d|       S )Nusernamerb   ?r   )recentr   zusers/z/searchr   )r   r   zRedGifs user r   )r   r   r   r8   rt   r   )rB   r!   r   r   playlist_idrb   r   r   s           r   r   zRedGifsUserIE._real_extract   s    "33C8>>z7S)3<
!I;/(	*		';/2%%xj&@+uW
 
 ##[(mH:]SXRY,Z\ 	\r   Nr   r   r   r   r   r      sw    GfJJ >"%K
 "%	
 E)%K
 !	
 P4%I
 "%	
'F<\r   r   )ro   commonr   compatr   networking.exceptionsr   utilsr   r	   r
   r   r   r   r?   r   r   r   r   r   <module>r      sY     ! $ - b`} b`J(7( (7V3X. 3Xl/\, /\r   