X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2F__init__.py;h=efa8b813f8ea0b96b65b971c83e2a8b376e78607;hb=0dcfb234ed209e90fde20cf299483457caf49b36;hp=bf0ce14ecb2781d40936830fa25067a5c1af691b;hpb=9e8056d5a7b6b366874088cd30d23ba4a52d3861;p=youtube-dl diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index bf0ce14ec..efa8b813f 100644 --- a/youtube_dl/__init__.py +++ b/youtube_dl/__init__.py @@ -20,15 +20,10 @@ __authors__ = ( 'shizeeg', 'Filippo Valsorda', 'Christian Albrecht', + 'Dave Vasilevsky', ) __license__ = 'Public Domain' -__version__ = '2012.11.29' - -UPDATE_URL = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl' -UPDATE_URL_VERSION = 'https://raw.github.com/rg3/youtube-dl/master/LATEST_VERSION' -UPDATE_URL_EXE = 'https://raw.github.com/rg3/youtube-dl/master/youtube-dl.exe' - import getpass import optparse @@ -41,34 +36,46 @@ import sys import warnings from .utils import * +from .version import __version__ from .FileDownloader import * from .InfoExtractors import * from .PostProcessor import * def updateSelf(downloader, filename): - ''' Update the program file with the latest version from the repository ''' - # Note: downloader only used for options + """Update the program file with the latest version from the repository""" - if not os.access(filename, os.W_OK): - sys.exit('ERROR: no write permissions on %s' % filename) + # TODO: at least, check https certificates - downloader.to_screen(u'Updating to latest version...') + from zipimport import zipimporter - urlv = compat_urllib_request.urlopen(UPDATE_URL_VERSION) - newversion = urlv.read().strip() - if newversion == __version__: - downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')') - return - urlv.close() + API_URL = "https://api.github.com/repos/rg3/youtube-dl/downloads" + BIN_URL = "https://github.com/downloads/rg3/youtube-dl/youtube-dl" + EXE_URL = "https://github.com/downloads/rg3/youtube-dl/youtube-dl.exe" + + if hasattr(sys, "frozen"): # PY2EXE + if not os.access(filename, os.W_OK): + sys.exit('ERROR: no write permissions on %s' % filename) + + downloader.to_screen(u'Updating to latest version...') + + urla = compat_urllib_request.urlopen(API_URL) + download = filter(lambda x: x["name"] == "youtube-dl.exe", json.loads(urla.read())) + if not download: + downloader.to_screen(u'ERROR: can\'t find the current version. Please try again later.') + return + newversion = download[0]["description"].strip() + if newversion == __version__: + downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')') + return + urla.close() - if hasattr(sys, "frozen"): #py2exe exe = os.path.abspath(filename) directory = os.path.dirname(exe) if not os.access(directory, os.W_OK): sys.exit('ERROR: no write permissions on %s' % directory) try: - urlh = compat_urllib_request.urlopen(UPDATE_URL_EXE) + urlh = compat_urllib_request.urlopen(EXE_URL) newcontent = urlh.read() urlh.close() with open(exe + '.new', 'wb') as outf: @@ -91,9 +98,25 @@ del "%s" except (IOError, OSError) as err: sys.exit('ERROR: unable to overwrite current version') - else: + elif isinstance(globals().get('__loader__'), zipimporter): # UNIX ZIP + if not os.access(filename, os.W_OK): + sys.exit('ERROR: no write permissions on %s' % filename) + + downloader.to_screen(u'Updating to latest version...') + + urla = compat_urllib_request.urlopen(API_URL) + download = [x for x in json.loads(urla.read().decode('utf8')) if x["name"] == "youtube-dl"] + if not download: + downloader.to_screen(u'ERROR: can\'t find the current version. Please try again later.') + return + newversion = download[0]["description"].strip() + if newversion == __version__: + downloader.to_screen(u'youtube-dl is up-to-date (' + __version__ + ')') + return + urla.close() + try: - urlh = compat_urllib_request.urlopen(UPDATE_URL) + urlh = compat_urllib_request.urlopen(BIN_URL) newcontent = urlh.read() urlh.close() except (IOError, OSError) as err: @@ -105,6 +128,10 @@ del "%s" except (IOError, OSError) as err: sys.exit('ERROR: unable to overwrite current version') + else: + downloader.to_screen(u'It looks like you installed youtube-dl with pip or setup.py. Please use that to update.') + return + downloader.to_screen(u'Updated youtube-dl. Restart youtube-dl to use the new version.') def parseOpts(): @@ -203,6 +230,7 @@ def parseOpts(): general.add_option('--list-extractors', action='store_true', dest='list_extractors', help='List all supported extractors and the URLs they would handle', default=False) + general.add_option('--test', action='store_true', dest='test', default=False, help=optparse.SUPPRESS_HELP) selection.add_option('--playlist-start', dest='playliststart', metavar='NUMBER', help='playlist video to start at (default is %default)', default=1) @@ -279,7 +307,7 @@ def parseOpts(): action='store_true', dest='autonumber', help='number downloaded files starting from 00000', default=False) filesystem.add_option('-o', '--output', - dest='outtmpl', metavar='TEMPLATE', help='output filename template. Use %(title)s to get the title, %(uploader)s for the uploader name, %(autonumber)s to get an automatically incremented number, %(ext)s for the filename extension, %(upload_date)s for the upload date (YYYYMMDD), %(extractor)s for the provider (youtube, metacafe, etc), %(id)s for the video id and %% for a literal percent. Use - to output to stdout.') + dest='outtmpl', metavar='TEMPLATE', help='output filename template. Use %(title)s to get the title, %(uploader)s for the uploader name, %(autonumber)s to get an automatically incremented number, %(ext)s for the filename extension, %(upload_date)s for the upload date (YYYYMMDD), %(extractor)s for the provider (youtube, metacafe, etc), %(id)s for the video id and %% for a literal percent. Use - to output to stdout. Can also be used to download to a different directory, for example with -o \'/my/downloads/%(uploader)s/%(title)s-%(id)s.%(ext)s\' .') filesystem.add_option('--restrict-filenames', action='store_true', dest='restrictfilenames', help='Restrict filenames to only ASCII characters, and avoid "&" and spaces in filenames', default=False) @@ -347,7 +375,6 @@ def gen_extractors(): YoutubeIE(), MetacafeIE(), DailymotionIE(), - GoogleIE(), GoogleSearchIE(), PhotobucketIE(), YahooIE(), @@ -371,6 +398,8 @@ def gen_extractors(): XNXXIE(), GooglePlusIE(), ArteTvIE(), + NBAIE(), + JustinTVIE(), GenericIE() ] @@ -423,7 +452,7 @@ def _real_main(): if opts.list_extractors: for ie in extractors: - print(ie.IE_NAME) + print(ie.IE_NAME + (' (CURRENTLY BROKEN)' if not ie._WORKING else '')) matchedUrls = filter(lambda url: ie.suitable(url), all_urls) all_urls = filter(lambda url: url not in matchedUrls, all_urls) for mu in matchedUrls: @@ -476,6 +505,18 @@ def _real_main(): if not opts.audioquality.isdigit(): parser.error(u'invalid audio quality specified') + if sys.version_info < (3,): + # In Python 2, sys.argv is a bytestring (also note http://bugs.python.org/issue2128 for Windows systems) + if opts.outtmpl is not None: + opts.outtmpl = opts.outtmpl.decode(preferredencoding()) + outtmpl =((opts.outtmpl is not None and opts.outtmpl) + or (opts.format == '-1' and opts.usetitle and u'%(title)s-%(id)s-%(format)s.%(ext)s') + or (opts.format == '-1' and u'%(id)s-%(format)s.%(ext)s') + or (opts.usetitle and opts.autonumber and u'%(autonumber)s-%(title)s-%(id)s.%(ext)s') + or (opts.usetitle and u'%(title)s-%(id)s.%(ext)s') + or (opts.useid and u'%(id)s.%(ext)s') + or (opts.autonumber and u'%(autonumber)s-%(id)s.%(ext)s') + or u'%(id)s.%(ext)s') # File downloader fd = FileDownloader({ 'usenetrc': opts.usenetrc, @@ -493,14 +534,7 @@ def _real_main(): 'format': opts.format, 'format_limit': opts.format_limit, 'listformats': opts.listformats, - 'outtmpl': ((opts.outtmpl is not None and opts.outtmpl.decode(preferredencoding())) - or (opts.format == '-1' and opts.usetitle and u'%(title)s-%(id)s-%(format)s.%(ext)s') - or (opts.format == '-1' and u'%(id)s-%(format)s.%(ext)s') - or (opts.usetitle and opts.autonumber and u'%(autonumber)s-%(title)s-%(id)s.%(ext)s') - or (opts.usetitle and u'%(title)s-%(id)s.%(ext)s') - or (opts.useid and u'%(id)s.%(ext)s') - or (opts.autonumber and u'%(autonumber)s-%(id)s.%(ext)s') - or u'%(id)s.%(ext)s'), + 'outtmpl': outtmpl, 'restrictfilenames': opts.restrictfilenames, 'ignoreerrors': opts.ignoreerrors, 'ratelimit': opts.ratelimit, @@ -525,6 +559,7 @@ def _real_main(): 'max_downloads': opts.max_downloads, 'prefer_free_formats': opts.prefer_free_formats, 'verbose': opts.verbose, + 'test': opts.test, }) if opts.verbose: