U
    $Pf                     @   sd   d dl mZ 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	 d	eZdS )
    )unicode_literalsN   )InfoExtractor   )compat_HTTPError)determine_extint_or_none
js_to_jsonExtractorErrorurlencode_postdatac                   @   sz   e Zd ZdZdZdZdddddd	d
dddiddddddddddidddddddgZdd Zdd Zdd Z	dS )FunimationIEzVhttps?://(?:www\.)?funimation(?:\.com|now\.uk)/(?:[^/]+/)?shows/[^/]+/(?P<id>[^/?#&]+)Z
funimationNz4https://www.funimation.com/shows/hacksign/role-play/Z91144z	role-playmp4z.hack//SIGN - Role Playz$md5:b602bdc15eef4c9bbb201bb6e6a4a2ddzre:https?://.*\.jpg)id
display_idexttitledescription	thumbnailZskip_downloadT)urlZ	info_dictparamszShttps://www.funimation.com/shows/attack-on-titan-junior-high/broadcast-dub-preview/Z210051zbroadcast-dub-previewz4Attack on Titan: Junior High - Broadcast Dub Previewzre:https?://.*\.(?:jpg|png))r   r   r   r   r   zJhttps://www.funimationnow.uk/shows/puzzle-dragons-x/drop-impact/simulcast/)r   Zonly_matchingz7https://www.funimation.com/en/shows/hacksign/role-play/c              
   C   s   |   \}}|d krd S z*| jdd dt||dd}|d | _W nb tk
r } zDt|jtr|jjdkr| 	|j
  d d }t|dd	 W 5 d }~X Y nX d S )
Nz>https://prod-api-funimationnow.dadcdigital.com/api/auth/login/z
Logging in)usernamepassword)datatokeni  errorTexpected)Z_get_login_info_download_jsonr   _TOKENr
   
isinstancecauser   code_parse_jsonreaddecode)selfr   r   r   er    r'   C/tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/extractor/funimation.py_login<   s&      zFunimationIE._loginc                 C   s   |    d S )N)r)   )r%   r'   r'   r(   _real_initializeN   s    zFunimationIE._real_initializec                    sn    |} || fdd} j jdddd|tddpFi }|d	pf jd
dgdd d}|s jdddgdd} d|d}|dp|dp  }}|d}	|	rd|	|f } jddgdd}
zNi } jrd j |d<  j	d| ||dd
dd tdD id d! }W n tk
r } zdt|jtr|jjd"kr |j |d# d$ }td% j|d&p|df dd' W 5 d }~X Y nX g }|D ]d}|d(}|sАq|d)pt|}|d*kr
| j||d+d,dd- n|||d. q | ||||
 |	t|d/pN|d0t|d1||d2|d3S )4Nc                    s    j d|  | d dS )Nz*KANE_customdimensions\.%s\s*=\s*'([^']+)';default)_search_regex)namer%   Zwebpager'   r(   _search_kaneU   s      z0FunimationIE._real_extract.<locals>._search_kanezTITLE_DATA\s*=\s*({[^}]+})z
title data r+   F)fatalr   z,KANE_customdimensions.videoID\s*=\s*'(\d+)';z<iframe[^>]+src="/player/(\d+)video_idz
al:web:urlzog:video:urlzog:video:secure_urlTz/player/(\d+)zvideo idr   Z
videoTitleZshowNamez%s - %sr   zog:descriptionzToken %sAuthorizationz1https://www.funimation.com/api/showexperience/%s/Zpinst_idc                 S   s   g | ]}t tjtj qS r'   )randomchoicestringdigitsascii_letters).0_r'   r'   r(   
<listcomp>x   s     z.FunimationIE._real_extract.<locals>.<listcomp>   )headersqueryitemsi  errorsr   z%s said: %sZdetailr   srcZ	videoTypeZm3u8r   Zhls)Zm3u8_idr2   )Z	format_idr   Z	seasonNumZseasonZ
episodeNumZseriesId)r   r   r   r   r   seriesZseason_numberZepisode_numberepisodeZ	season_idformats)Z	_match_idZ_download_webpager"   r-   r	   getZ_html_search_metaZ_og_search_titler   r   joinranger
   r   r    r   r!   r#   ZIE_NAMEr   extendZ_extract_m3u8_formatsappendZ_sort_formatsZ_og_search_thumbnailr   )r%   r   r   r0   Z
title_datar3   Z
player_urlr   rD   rC   r   r>   sourcesr&   r   rE   source
source_urlZsource_typer'   r/   r(   _real_extractQ   s    
           

   

zFunimationIE._real_extract)
__name__
__module____qualname__Z
_VALID_URLZ_NETRC_MACHINEr   Z_TESTSr)   r*   rN   r'   r'   r'   r(   r      sH   
 	 $r   )
__future__r   r5   r7   commonr   compatr   utilsr   r   r	   r
   r   r   r'   r'   r'   r(   <module>   s   	