3
b`                  @   sx   d dl mZ d dlZd dlZd dlZddlmZ ddlmZm	Z	 ddl
mZmZmZmZmZmZmZ G dd	 d	eZdS )
    )unicode_literalsN   )InfoExtractor   )
compat_strcompat_urlparse)
clean_htmlExtractorErrorint_or_nonefloat_or_noneparse_iso8601sanitized_Requesturlencode_postdatac               @   s   e Zd Zd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gZdd Z	dd  Z
ed!d" Zd*d$d%Zd&d' Zd(d) Zd#S )+NocoIEzPhttps?://(?:(?:www\.)?noco\.tv/emission/|player\.noco\.tv/\?idvideo=)(?P<id>\d+)zhttps://noco.tv/do.phpz&https://api.noco.tv/1.1/%s?ts=%s&tk=%sz&sub_lang=%snocoz?http://noco.tv/emission/11538/nolife/ami-ami-idol-hello-france/Z 0a993f0058ddbcd902630b2047ef710eZ11538mp4zAmi Ami Idol - Hello! Francez$md5:4eaab46ab68fa4197a317a88a53d3b86Z20140412ZNolifeZNOLgfffffF@)idexttitledescriptionupload_dateuploaderuploader_iddurationzRequires noco account)urlmd5	info_dictskipzAhttp://noco.tv/emission/12610/lbl42/the-guild/s01e01-wake-up-callZ c190f1f48e313c55838f1f412225934dZ12610zThe Guild #1 - Wake-Up Calli@SZ20140627ZLBL42ZLBLg~j m@)r   r   r   	timestampr   r   r   r   c             C   s   | j   d S )N)_login)self r!   EC:\Users\Broad\Desktop\All-Down\binaries\youtube_dl\extractor\noco.py_real_initialize@   s    zNocoIE._real_initializec          
   C   sd   | j  \}}|d krd S | j| jd dtdd||dddid}d|kr`td	t|d  d
dd S )Nz
Logging inlogin1)acookieusernamepasswordzContent-Typez0application/x-www-form-urlencoded; charset=UTF-8)dataheadersZerreurzUnable to login: %sT)expected)_get_login_info_download_json
_LOGIN_URLr   r	   r   )r    r(   r)   r$   r!   r!   r"   r   C   s    zNocoIE._loginc               C   s   t tj d S )Ni  )inttimer!   r!   r!   r"   _tsW   s    z
NocoIE._tsNc       
      C   s   t | j | j }tjtj|jdj d jdj }| j|||f }|r\|| j| 7 }t	|}|j
d| j | j|||}	t|	tr|	jdr| j|	d |	d  |	S )Nasciiz#8S?uCraTedap6aReferererrorr   )r   r2   
_ts_offsethashlibr   encode	hexdigest_API_URL_TEMPLATE_SUB_LANG_TEMPLATEr   
add_header_refererr.   
isinstancedictget_raise_error)
r    pathvideo_idnotesub_langtstkr   requestrespr!   r!   r"   	_call_api[   s    (zNocoIE._call_apic             C   s   t d| j||f ddd S )Nz%s returned error: %s - %sT)r,   )r	   IE_NAME)r    r5   r   r!   r!   r"   rA   l   s    zNocoIE._raise_errorc       %      C   s  | j |}| j||}| jd|dddd}tjtj|j}t|jdd gd }|rb|| j	  nd| _
|| _| jd| |d	}| jd
| |dd }| jd|dd }	|	jdp|	jdd}
|
dkr|d }
t|dkrt|j d }
n|
|krd}
| jd|d}g }xH|j D ]:\}}||
kr.dnd}x|d j D ]\}} x|d j D ]\}}d|||f }| jd||j |f |d| |dkr|nd }|d }|sq\|d@kr|d  }| j|d! |d"  |j||t|jd#t|jd$t|jd%d&t|jd'd&t|jd(|| jd)|| jd*|d+
 q\W qBW qW | j| t|jd,d-}|d k	r|dk rd }|jd.}|jd/}t|jd0d&}g }xR|j D ]F\}}tjd1|}|sؐq|j|t|jd2t|jd3d4 qW |jd5p|jd6} |jd7p.|jd8}!|jd9}"d:}#|!rL|#|!7 }#|"rb|#d;t|" 7 }#| rx|#d<t|  7 }#|jd=p|jd>}$||#|$||||||d?	S )ANzG(["\'])(?P<player>https?://noco\.tv/(?:[^/]+/)+NocoPlayer.+?\.swf.*?)\1znoco playerplayerz5http://noco.tv/cdata/js/player/NocoPlayer-v1.2.40.swf)groupdefaultrF   r   zshows/%s/mediaszDownloading video JSONzshows/by_id/%szDownloading show JSONz
users/initzDownloading user options JSONoptionsZaudio_languagelanguagefroriginaloriginal_langr   	qualitieszDownloading qualities JSONZ
video_listZquality_listzaudio-%s_sub-%s_%szshows/%s/video/%s/%szDownloading %s video JSONnonefile	forbidden	not found
popmessager   messageZ	res_widthZ	res_linesZaudiobitratei  ZvideobitratefilesizeZquality_namepriority)
r   	format_idwidthheightabrvbrr[   format_notequality
preferenceZonline_date_start_utc Zpartner_nameZpartner_keyduration_msz+^screenshot_(?P<width>\d+)x(?P<height>\d+)$r^   r_   )r   r^   r_   Zshow_TTZshow_OTZ	family_TTZ	family_OTepisode_number z #z - Zshow_resumeZfamily_resume)	r   r   r   
thumbnailsr   r   r   r   formats)rW   rX   )	_match_id_download_webpage_search_regexr   parse_qsurlparsequeryr
   r@   r2   r6   r=   rJ   lenlistkeysitemslowerrA   append_sort_formatsr   r   researchr0   rM   r   )%r    r   rC   webpage
player_urlqsrF   mediasshowrO   Zaudio_lang_prefrT   rj   
audio_langZaudio_lang_dictrd   rE   Z	lang_dictr]   fmtZformat_id_extendedvideofile_urlrY   r   r   r   r   ri   thumbnail_keythumbnail_urlmepisodefamilyrg   r   r   r!   r!   r"   _real_extractq   s    






zNocoIE._real_extract)N)__name__
__module____qualname__
_VALID_URLr/   r:   r;   _NETRC_MACHINE_TESTSr#   r   staticmethodr2   rJ   rA   r   r!   r!   r!   r"   r      sB   

r   )
__future__r   rx   r1   r7   commonr   compatr   r   utilsr   r	   r
   r   r   r   r   r   r!   r!   r!   r"   <module>   s   $