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rìt|jƒ ƒd }
n|
|krød}
| 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 �rˆd }|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œƒ �qºW |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   $