U
    $Pf                     @   sT   d dl mZ ddlmZ ddlmZmZ ddlmZm	Z	m
Z
mZ G dd deZd	S )
    )unicode_literals   )InfoExtractor   )compat_HTTPError
compat_str)ExtractorErrorint_or_nonestr_or_noneurlencode_postdatac                   @   s   e 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dgZdZdd Zdd Zdd Z	dS )RoosterTeethIEzGhttps?://(?:.+?\.)?roosterteeth\.com/(?:episode|watch)/(?P<id>[^/?#&]+)Zroosterteethzfhttp://roosterteeth.com/episode/million-dollars-but-season-2-million-dollars-but-the-game-announcementZ e2bd7764732d785ef797700a2489f212Z9156zFmillion-dollars-but-season-2-million-dollars-but-the-game-announcementmp4z-Million Dollars, But... The Game Announcementz$md5:168a54b40e228e79f4ddb141e89fe4f5zre:^https?://.*\.png$zMillion Dollars, But...)id
display_idexttitledescriptionZ	thumbnailseriesepisode)urlmd5Z	info_dictzhttp://achievementhunter.roosterteeth.com/episode/off-topic-the-achievement-hunter-podcast-2016-i-didn-t-think-it-would-pass-31T)r   Zonly_matchingzWhttp://funhaus.roosterteeth.com/episode/funhaus-shorts-2016-austin-sucks-funhaus-shortszRhttp://screwattack.roosterteeth.com/episode/death-battle-season-3-mewtwo-vs-shadowzahttp://theknow.roosterteeth.com/episode/the-know-game-news-season-1-boring-steam-sales-are-betterzhttp://roosterteeth.com/episode/rt-docs-the-world-s-greatest-head-massage-the-world-s-greatest-head-massage-an-asmr-journey-part-onezehttps://roosterteeth.com/watch/million-dollars-but-season-2-million-dollars-but-the-game-announcementz1https://svod-be.roosterteeth.com/api/v1/episodes/c              
   C   s   |   \}}|d krd S z$| jdd dtdd||dd W n tk
r } zvd}t|jtr|jjdkr| j|j	 
 d d	d
}|r|dp|dp|d}|r|d| 7 }| | W 5 d }~X Y nX d S )Nz)https://auth.roosterteeth.com/oauth/tokenz
Logging inZ@4338d2b4bdc8db1239360f28e72f0d9ddb1fd01e7a38fbb07b4b1f4ba4564cc5password)Z	client_idZ
grant_typeusernamer   )datazUnable to logini  F)fatalZ
extra_infoZerror_descriptionerrorz: )Z_get_login_info_download_jsonr   r   
isinstancecauser   code_parse_jsonreaddecodegetZreport_warning)selfr   r   emsgrespr    r(   E/tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/extractor/roosterteeth.py_login7   s0      
zRoosterTeethIE._loginc                 C   s"   |  | jdrd S |   d S )NZrt_access_token)Z_get_cookies_EPISODE_BASE_URLr#   r*   )r$   r(   r(   r)   _real_initializeO   s    zRoosterTeethIE._real_initializec                 C   s  |  |}| j| }z&| |d |dd d d d }W nj tk
r } zLt|jtr|jjdkr| |j	 
 |dd	kr| d
|   W 5 d }~X Y nX | j||dddd}| | | ||dd d }|d }|dp|d }	t|d }
g }|di dg D ]R}|ddkr|dp:i }dD ]&}||}|r@|||d q@q|
||	|dp|d||dt|d|d|	t|dt|d||d t|d!d"S )#Nz/videoszDownloading video JSON metadatar   r   
attributesr   i  accessFz&%s is only available for FIRST membersr   Zm3u8_nativeZhls)Zm3u8_idz!Downloading episode JSON metadatar   Zdisplay_titler   ZincludedZimagestypeZepisode_image)ZthumbsmallZmediumZlarge)r   r   r   captionZ
show_titleseason_number	season_idnumberuuid
channel_idlength)r   r   r   r   
thumbnailsr   r2   r3   r   Zepisode_numberZ
episode_idformatsr6   duration)Z	_match_idr+   r   r   r   r   r   r   r    r!   r"   r#   Zraise_login_requiredZ_extract_m3u8_formatsZ_sort_formatsr   appendr	   r
   )r$   r   r   Zapi_episode_urlZm3u8_urlr%   r9   r   r-   r   Zvideo_idr8   imageZimg_attributeskZimg_urlr(   r(   r)   _real_extractT   s    

      
 
zRoosterTeethIE._real_extractN)
__name__
__module____qualname__Z
_VALID_URLZ_NETRC_MACHINEZ_TESTSr+   r*   r,   r>   r(   r(   r(   r)   r      sJ   !r   N)
__future__r   commonr   compatr   r   utilsr   r	   r
   r   r   r(   r(   r(   r)   <module>   s   