U
    $P‘fiP  ã                   @   sü   d dl mZ dZd dlZd dl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mZ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ dd	lm Z  dd
l!m"Z"m#Z# ddl$m%Z% ddl&m&Z& ddd„Z'ddd„Z(ddddgZ)dS )é    )Úunicode_literalszPublic DomainNé   )Ú	parseOpts)Úcompat_getpassÚcompat_shlex_splitÚworkaround_optparse_bug9161)Ú	DateRangeÚdecodeOptionÚDEFAULT_OUTTMPLÚDownloadErrorÚexpand_pathÚmatch_filter_funcÚMaxDownloadsReachedÚpreferredencodingÚread_batch_urlsÚSameFileErrorÚsetproctitleÚstd_headersÚwrite_stringÚrender_table)Úupdate_self)ÚFileDownloader)Úgen_extractorsÚlist_extractors)ÚMSO_INFO)Ú	YoutubeDLc               z      sž  t jdkrt dd„ ¡ tƒ  tdƒ t| ƒ\‰}}|jd k	rH|jtd< |j	d k	r\|j	td< |j
d k	r¶|j
D ]H}d|kr†ˆ d| ¡ | dd	¡\}}|jr¬td
||f ƒ |t|< ql|jrÜttd d t jd t  d¡ g }|jd k	rhzT|jdkrt j}ntjt|jƒdddd}t|ƒ}|jr>tdt|ƒ d ƒ W n& tk
rf   t  d|j ¡ Y nX |dd„ |D ƒ }tƒ ‰ ‡ fdd„|D ƒ}|jrt|jƒD ]^‰tˆjˆjsºdnd d t jd ‡fdd„|D ƒ}	|	D ]}
td|
 d t jd qâq¤t  d¡ |jr t|jƒD ]t‰ˆjs0q t ˆdˆjƒ}|dkrLq t!ˆdƒr€d}d }|d!ˆj"t# $|¡t# $|¡f 7 }t|d t jd q t  d¡ |j%räd"d„ t& '¡ D ƒ}td#t(d$d%g|ƒ d t jd t  d¡ |j)r|j*d k	s|j+d k	rˆ d&¡ |j+d k	r0|j*d kr0ˆ d'¡ |j,d k	rR|j-d krRˆ d(¡ |j.d k	r€|j/sv|j0sv|j1r€ˆ d)¡ |j2d k	r¢|j2dkr¢ˆ d*¡ |j3d k	rÄ|j3dk rÄˆ d+¡ |j/rÞ|j1rÞˆ d,¡ |j*d k	r |j+d kr t4d-ƒ|_+|j-d k	r"|j,d kr"t4d.ƒ|_,|j5d k	rTt6 7|j5¡}|d krNˆ d/¡ ||_5|j8d k	r†t6 7|j8¡}|d kr€ˆ d0¡ ||_8|j9d k	r¸t6 7|j9¡}|d kr²ˆ d1¡ ||_9|j:d k	rÚ|j:dk rÚˆ d2¡ |j;d k	r,|j;dk rüˆ d3¡ |j:d krˆ d4¡ |j;|j:k r4ˆ d5¡ n|j:|_;|j<rR|j<t&krRˆ d6¡ ‡fd7d8„}|j=d k	rv||j=ƒ|_=|j>d k	rŽ||j>ƒ|_>|j?d k	rÀt6 7|j?¡}|d krºˆ d9¡ ||_?|j@d k	rît6 7|j@¡}|sèˆ d:¡ ||_@|jAdkrtBd;ƒ‚|jCd<kr$|jC|jAk r$tBd=ƒ‚|jDrB|jEd>krBˆ d?¡ |jFrt|jF Gd@¡ GdA¡|_F|jF H¡ stˆ dB¡ |jId k	r–|jIdCkr–ˆ dD¡ |jJd k	r¸|jJdEkr¸ˆ dF¡ |jKd k	rÒtL M|jK¡}ntL|jN|jOƒ}|jDr|jPs|jQd krdG|_Q|jRr|jSsdH|_T|j.d k	r,|j.pš|jQdIkrF|j/rFdJpš|jQdIkrXdKpš|j/rn|j0rndLpš|j/r|dMpš|j1rŠdNpš|j0r˜dOpštU}tVjW X|¡d	 sÆ|jDrÆˆ dP Q|¡¡ |jYp|jZp|j[p|j\p|j]p|j^p|j_p|j`p|jap|jb}|jc}|jdd k	r0t|jdƒn|jd}g }|jerT| fdQ|jedRœ¡ |jDrv| fdS|jE|jF|jgdTœ¡ |jIr| fdU|jIdVœ¡ |jhr¦| fdWdXi¡ |jJrÀ| fdY|jJdZœ¡ |jirÖ| fdWd[i¡ |jj	r|jkpê|jl}| fd\|d]œ¡ |	sdH|_k|jm	r| fdWd^i¡ |jn	r8| fd_|jnd`œ¡ d }|jo	rNtp|joƒ}d }|jq	rdtp|jqƒ}|jrd k	rtd nts|jrƒ}|j)|j*|j+|jt|ju|j<|j-|j,|jv	p®|	p®||jw|jY|jZ|j[|j\|j]|j`|j^|j_|ja	pÞ|jc|jb|jx	pì||jy|jQ|jz||j{|j2|j3|j||j}|j~|j5|j|j=|j>|j€|j|j?|j‚|j@|jƒ|j„|j…|jA|jC|j†|j‡|jˆ|j.dk|j‰|jŠ|j‹|jŒ|j|jŽ|jk|jl|jT|jS|jR|j|j|j‘t’|j“ƒt’|j”ƒ|j•|j–|j|j—|j˜|j™|jP|j8|j9|jš|j›||jœ|j|j||jž|jŸ|j |j¡|j¢|j£|j¤|j¥|j¦|j§|j¨|j©|jª|j«|j¬||j­|j®|j¯|j:|j;|j°|j±|j²|j³||j´|jµ|j¶|j·|||j¸|j¹|jº|j»|j¼|j½|j0dHkr„|j0nd |j/dHkr˜|j/nd daœy}t¾|ƒâ}|j¿rÄt¿|jÀ|j|jÁƒ |jÂrÖ|jÃ Ä¡  tÅ|ƒd	k r4|jÆd kr4|j¿s |jÂrt  ¡  | Ç| d kr$t jÈd	d … n| ¡ ˆ db¡ z,|jÆd k	rT| Ét|jÆƒ¡}n
| Ê|¡}W n$ tËk
r„   | Àdc¡ dd}Y nX W 5 Q R X t  |¡ d S )eNÚwin32c                 S   s   | dkrt  d¡S d S )NÚcp65001úutf-8)ÚcodecsÚlookup©Úname© r#   ú7/tmp/pip-unpacked-wheel-7zdooeg3/youtube_dl/__init__.pyÚ<lambda>4   ó    z_real_main.<locals>.<lambda>z
youtube-dlz
User-AgentZRefererú:z9wrong header formatting, it should be key:value, not "%s"r   z5[debug] Adding header from command line option %s:%s
Ú
)Úoutr   ú-Úrr   Úignore)ÚencodingÚerrorsz[debug] Batch file urls: z&ERROR: batch file %s could not be readc                 S   s   g | ]}|  ¡ ‘qS r#   )Ústrip©Ú.0Úurlr#   r#   r$   Ú
<listcomp>b   s     z_real_main.<locals>.<listcomp>c                    s&   g | ]}t |tƒr| ˆ d ¡n|‘qS )r,   )Ú
isinstanceÚbytesÚdecoder0   )Ú_encr#   r$   r3   d   s     z (CURRENTLY BROKEN)Ú c                    s   g | ]}ˆ   |¡r|‘qS r#   )Zsuitabler0   )Úier#   r$   r3   i   s     
 z  ZIE_DESCFÚ
SEARCH_KEY)zcute kittenszslithering pythonszfalling catzangry poodlezpurple fishzrunning tortoisezsleeping bunnyzburping cow)r8   Ú5Ú10Úallz (Example: "%s%s:%s" )c                 S   s   g | ]\}}||d  g‘qS r!   r#   )r1   Zmso_idZmso_infor#   r#   r$   r3   {   s     zSupported TV Providers:
Zmsozmso namez4using .netrc conflicts with giving username/passwordzaccount username missing
z%TV Provider account username missing
zIusing output template conflicts with using title, video ID or auto numberz!auto number size must be positivez'auto number start must be positive or 0z)using title conflicts with using video IDz*Type account password and press [Return]: z6Type TV provider account password and press [Return]: zinvalid rate limit specifiedzinvalid min_filesize specifiedzinvalid max_filesize specifiedz$sleep interval must be positive or 0z(max sleep interval must be positive or 0z>min sleep interval must be specified, use --min-sleep-intervalzFmax sleep interval must be greater than or equal to min sleep intervalzRUnsupported TV Provider, use --ap-list-mso to get a list of supported TV Providersc              	      sF   | dkrt dƒ}n0zt| ƒ}W n" ttfk
r@   ˆ  d¡ Y nX |S )N)ÚinfZinfiniter>   zinvalid retry count specified)ÚfloatÚintÚ	TypeErrorÚ
ValueErrorÚerror)ÚretriesZparsed_retries)Úparserr#   r$   Úparse_retries²   s    
z!_real_main.<locals>.parse_retrieszinvalid buffer size specifiedz!invalid http chunk size specifiedzPlaylist start must be positive)éÿÿÿÿNz0Playlist end must be greater than playlist start)ÚbestZaacZflacZmp3Zm4aZopusZvorbisZwavzinvalid audio format specifiedÚkÚKzinvalid audio quality specified)Zmp4ZflvZwebmZoggZmkvZaviz%invalid video recode format specified)ZsrtZvttZassZlrcz!invalid subtitle format specifiedzbestaudio/bestTz-1z#%(title)s-%(id)s-%(format)s.%(ext)sz%(id)s-%(format)s.%(ext)sz'%(autonumber)s-%(title)s-%(id)s.%(ext)sz%(title)s-%(id)s.%(ext)sz%(id)s.%(ext)sz%(autonumber)s-%(id)s.%(ext)szwCannot download a video and extract audio into the same file! Use "{0}.%(ext)s" instead of "{0}" as the output templateZMetadataFromTitle)ÚkeyZtitleformatZFFmpegExtractAudio)rK   ZpreferredcodecZpreferredqualityÚnopostoverwritesZFFmpegVideoConvertor)rK   ZpreferedformatrK   ZFFmpegMetadataZFFmpegSubtitlesConvertor)rK   ÚformatZFFmpegEmbedSubtitleZEmbedThumbnail)rK   Úalready_have_thumbnailZXAttrMetadataZExecAfterDownload)rK   Úexec_cmd)yÚusenetrcÚusernameÚpasswordÚ	twofactorÚvideopasswordÚap_msoÚap_usernameÚap_passwordÚquietÚno_warningsZforceurlZ
forcetitleZforceidZforcethumbnailZforcedescriptionZforcedurationZforcefilenameZforceformatZ	forcejsonÚdump_single_jsonÚsimulateÚskip_downloadrM   ÚlistformatsÚouttmplÚouttmpl_na_placeholderÚautonumber_sizeÚautonumber_startÚrestrictfilenamesÚignoreerrorsÚforce_generic_extractorÚ	ratelimitÚnooverwritesrD   Úfragment_retriesÚskip_unavailable_fragmentsÚkeep_fragmentsÚ
buffersizeÚnoresizebufferÚhttp_chunk_sizeZ
continuedlÚ
noprogressÚprogress_with_newlineÚplayliststartÚplaylistendZplaylistreverseZplaylistrandomÚ
noplaylistZlogtostderrÚconsoletitleÚnopartÚ
updatetimeÚwritedescriptionÚwriteannotationsÚwriteinfojsonÚwritethumbnailÚwrite_all_thumbnailsÚwritesubtitlesÚwriteautomaticsubÚallsubtitlesÚlistsubtitlesÚsubtitlesformatÚsubtitleslangsÚ
matchtitleÚrejecttitleÚmax_downloadsÚprefer_free_formatsÚverboseÚdump_intermediate_pagesÚwrite_pagesÚtestÚ	keepvideoÚmin_filesizeÚmax_filesizeÚ	min_viewsÚ	max_viewsZ	daterangeÚcachedirÚyoutube_print_sig_codeÚ	age_limitÚdownload_archiveÚ
cookiefileZnocheckcertificateÚprefer_insecureÚproxyÚsocket_timeoutÚbidi_workaroundÚdebug_printtrafficÚprefer_ffmpegÚinclude_adsÚdefault_searchÚyoutube_include_dash_manifestr-   Úextract_flatÚmark_watchedÚmerge_output_formatÚpostprocessorsÚfixupÚsource_addressÚ	call_homeÚsleep_intervalÚmax_sleep_intervalÚexternal_downloaderÚlist_thumbnailsÚplaylist_itemsÚxattr_set_filesizeÚmatch_filterÚno_colorÚffmpeg_locationÚhls_prefer_nativeÚhls_use_mpegtsÚexternal_downloader_argsÚpostprocessor_argsÚcn_verification_proxyÚgeo_verification_proxyÚconfig_locationÚ
geo_bypassÚgeo_bypass_countryÚgeo_bypass_ip_blockÚ
autonumberÚusetitlezWYou must provide at least one URL.
Type youtube-dl --help to see a list of all options.z'--max-download limit reached, aborting.ée   )ÌÚsysÚplatformr   Úregisterr   r   r   Ú
user_agentr   ZrefererÚheadersrC   Úsplitr„   r   Zdump_user_agentÚstdoutÚexitZ	batchfileÚstdinÚioÚopenr   r   ÚreprÚIOErrorr   r   r   ZIE_NAMEZ_WORKINGZlist_extractor_descriptionsÚgetattrÚhasattrr:   ÚrandomÚchoiceZap_list_msor   Úitemsr   rP   rQ   rR   rW   rV   r^   r¶   rµ   Zuseidr`   ra   r   re   r   Zparse_bytesr‰   rŠ   r¢   r£   rU   rD   rg   rj   rl   ro   rB   rp   ZextractaudioZaudioformatZaudioqualityr/   ÚisdigitZrecodevideoZconvertsubtitlesÚdater   ÚdayZ	dateafterZ
datebeforerˆ   rM   r|   r{   rz   r
   ÚosÚpathÚsplitextÚgeturlZgettitleZgetidZgetthumbnailZgetdescriptionZgetfilenameZ	getformatZgetdurationZdumpjsonrZ   Z
print_jsonr   ZmetafromtitleÚappendrL   ZaddmetadataZembedsubtitlesZembedthumbnailrx   ry   ZxattrsrO   r­   r   r®   r¨   r   rS   rT   rX   rY   r[   r\   r]   r_   rb   rc   rd   rf   rh   ri   rk   Zcontinue_dlrm   rn   Zplaylist_reverseZplaylist_randomrq   rr   rs   rt   ru   rv   rw   r}   r~   r   r	   r€   r   r‚   rƒ   r…   r†   r‡   r‹   rŒ   r   rŽ   r‘   Zno_check_certificater’   r“   r”   r•   r–   r—   r˜   r™   rš   r-   r›   rœ   r   rŸ   r    r¡   r¤   r¥   r¦   r§   r©   rª   r«   r¬   r¯   r°   r±   r²   r³   r´   r   r   Z	to_screenÚ_openerZrm_cachedirÚcacheÚremoveÚlenZload_info_filenameZwarn_if_short_idÚargvZdownload_with_info_fileÚdownloadr   ) rÖ   ÚoptsÚargsÚhrK   ÚvalueZ
batch_urlsZbatchfdZall_urlsZmatchedUrlsÚmuÚdescZ	_SEARCHESZ_COUNTSÚtableZnumeric_limitrF   Znumeric_buffersizeZnumeric_chunksizerË   r^   Zany_gettingZany_printingZdownload_archive_fnrž   rN   r­   r®   r¨   Zydl_optsZydlÚretcoder#   )r7   r9   rE   r$   Ú
_real_main0   sà   








  þ$

 
 
 


$















	






ÿþý
ü
û
úùþNþüþþ ÿþþ

þ
†}

"ÿ
rà   c                 C   sh   zt | ƒ W nV tk
r*   t d¡ Y n: tk
rF   t d¡ Y n tk
rb   t d¡ Y nX d S )Nr   z;ERROR: fixed output name but more than one file to downloadz
ERROR: Interrupted by user)rà   r   r¸   r¿   r   ÚKeyboardInterrupt)rÖ   r#   r#   r$   ÚmainÙ  s    râ   r   r   r   )N)N)*Ú
__future__r   Ú__license__r   rÁ   rÍ   rÇ   r¸   Úoptionsr   Úcompatr   r   r   Úutilsr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   Úupdater   Ú
downloaderr   Z	extractorr   r   Zextractor.adobepassr   r   rà   râ   Ú__all__r#   r#   r#   r$   Ú<module>   s(   @
   ,
