X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2F__init__.py;h=efa8b813f8ea0b96b65b971c83e2a8b376e78607;hb=0dcfb234ed209e90fde20cf299483457caf49b36;hp=e6cd7f5d4ec2bdbcfe6ab8462faed51c1128c2f3;hpb=8d5d3a5d00ac8a5d39321f301308abfb473981a8;p=youtube-dl diff --git a/youtube_dl/__init__.py b/youtube_dl/__init__.py index e6cd7f5d4..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(): @@ -348,7 +375,6 @@ def gen_extractors(): YoutubeIE(), MetacafeIE(), DailymotionIE(), - GoogleIE(), GoogleSearchIE(), PhotobucketIE(), YahooIE(), @@ -372,6 +398,8 @@ def gen_extractors(): XNXXIE(), GooglePlusIE(), ArteTvIE(), + NBAIE(), + JustinTVIE(), GenericIE() ] @@ -477,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, @@ -494,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,