U
    y^.                     @   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                   @   sr   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gZdd Zdd Zdd Z	dS )FunimationIEzKhttps?://(?:www\.)?funimation(?:\.com|now\.uk)/shows/[^/]+/(?P<id>[^/?#&]+)
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	thumbnailskip_downloadT)url	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   only_matchingc              
   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)_get_login_info_download_jsonr   _TOKENr
   
isinstancecauser   code_parse_jsonreaddecode)selfr   r   r   er    r,   RC:\Users\TaGoRe\Desktop\beinconnect-dl\binaries\youtube_dl\extractor\funimation.py_login8   s&      zFunimationIE._loginc                 C   s   |    d S )N)r.   )r*   r,   r,   r-   _real_initializeJ   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*   webpager,   r-   _search_kaneQ   s      z0FunimationIE._real_extract.<locals>._search_kanezTITLE_DATA\s*=\s*({[^}]+})z
title data r0   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   
videoTitle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>t   s     z.FunimationIE._real_extract.<locals>.<listcomp>   )headersqueryitemsi  errorsr   z%s said: %sdetailr   srcZ	videoTypem3u8r   hls)m3u8_idr8   )	format_idr   Z	seasonNumseasonZ
episodeNumZseriesId)r   r   r   r   r   seriesseason_numberepisode_numberepisode	season_idformats)	_match_id_download_webpager'   r2   r	   get_html_search_meta_og_search_titler#   r"   joinranger
   r$   r%   r   r&   r(   IE_NAMEr   extend_extract_m3u8_formatsappend_sort_formats_og_search_thumbnailr   )r*   r   r   r6   Z
title_datar9   
player_urlr   rT   rQ   r   rF   sourcesr+   r   rV   source
source_urlsource_typer,   r4   r-   _real_extractM   s    
           

   

zFunimationIE._real_extract)
__name__
__module____qualname__
_VALID_URL_NETRC_MACHINEr#   _TESTSr.   r/   ri   r,   r,   r,   r-   r      sB   
 	  r   )
__future__r   r=   r?   commonr   compatr   utilsr   r   r	   r
   r   r   r,   r,   r,   r-   <module>   s   	