def prepare(self): handlers = [HTTPCookieProcessor()] if default_proxy_handler: handlers += default_proxy_handler install_opener(build_opener(*handlers)) info = VideoInfo(self.name, True) html = get_content(self.url) self.vid = match1(html, '"userNum":(\d+)') live_id = match1(html, '"liveId":\s*(\d+)') assert live_id, u"主播正在休息" info.stream_types.append('current') info.streams['current'] = { 'container': 'mp4', 'src': [ 'http://extapi.live.netease.com/redirect/video/{}'.format( self.vid) ], 'size': float('inf') } info.artist = match1(html, '"nick":"([^"]+)') info.title = match1(html, '<title>([^<]+)').split('-')[0] return info
def main(): arg_parser() if not args.debug: logging.root.setLevel(logging.WARNING) else: logging.root.setLevel(logging.DEBUG) if args.timeout: socket.setdefaulttimeout(args.timeout) if args.proxy == 'system': proxy_handler = ProxyHandler() args.proxy = os.environ.get('HTTP_PROXY', 'none') else: proxy_handler = ProxyHandler({'http': args.proxy, 'https': args.proxy}) if not args.proxy == 'none': opener = build_opener(proxy_handler) install_opener(opener) #mkdir and cd to output dir if not args.output_dir == '.': try: if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) except: logger.warning("No permission or Not found " + args.output_dir) logger.warning("use current folder") args.output_dir = '.' if os.path.exists(args.output_dir): os.chdir(args.output_dir) try: exit = 0 for url in args.video_urls: try: m, u = url_to_module(url) if args.playlist: parser = m.parser_list else: parser = m.parser info = parser(u) if type(info) is types.GeneratorType or type(info) is list: ind = 0 for i in info: if ind < args.start: ind += 1 continue handle_videoinfo(i, index=ind) ind += 1 else: handle_videoinfo(info) except AssertionError as e: logger.critical(compact_str(e)) exit = 1 except (RuntimeError, NotImplementedError, SyntaxError) as e: logger.error(compact_str(e)) exit = 1 sys.exit(exit) except KeyboardInterrupt: logger.info('Interrupted by Ctrl-C')
def __init__(self): SimpleExtractor.__init__(self) self.live = True self.title_pattern = '<title>([^-]+)' self.url_pattern = 'CDNUrl: "([^"]+)' cookie_handler = HTTPCookieProcessor() opener = build_opener(cookie_handler) install_opener(opener)
def __init__(self): SimpleExtractor.__init__(self) self.live = True self.title_pattern = '<title>([^<]+)' self.url_pattern = 'CDNUrl: "([^"]+)' cookie_handler = HTTPCookieProcessor() opener = build_opener(cookie_handler) install_opener(opener)
def prepare(self): add_header("referer", "http://v.youku.com") ssl_context = HTTPSHandler( context=ssl.SSLContext(ssl.PROTOCOL_TLSv1)) cookie_handler = HTTPCookieProcessor() opener = build_opener(ssl_context, cookie_handler) opener.addheaders = [('Cookie','__ysuid=%d' % time.time())] install_opener(opener) info = VideoInfo(self.name) if self.url and not self.vid: self.vid = match1(self.url.split('//', 1)[1], '^v\.[^/]+/v_show/id_([a-zA-Z0-9=]+)', '^player[^/]+/(?:player\.php/sid|embed)/([a-zA-Z0-9=]+)', '^static.+loader\.swf\?VideoIDS=([a-zA-Z0-9=]+)', '^video\.tudou\.com/v/([a-zA-Z0-9=]+)') self.logger.debug("VID: " + self.vid) api_url = 'https://ups.youku.com/ups/get.json?vid={}&ccode={}&client_ip=192.168.1.1&utid={}&client_ts={}'.format(self.vid, self.ccode, quote(fetch_cna()), int(time.time())) data = json.loads(get_content(api_url)) assert data['e']['code'] == 0, data['e']['desc'] data = data['data'] assert 'stream' in data, data['error']['note'] info.title = data['video']['title'] streams = data['stream'] for s in streams: self.logger.debug("stream> " + str(s)) t = stream_code_to_id[s['stream_type']] urls = [] for u in s['segs']: self.logger.debug("seg> " + str(u)) if u['key'] != -1: if 'cdn_url' in u: urls.append(u['cdn_url']) else: self.logger.warning("VIP video, ignore unavailable seg: {}".format(s['segs'].index(u))) if len(urls) == 0: urls = [s['m3u8_url']] c = 'm3u8' else: c = id_to_container[t] size = s['size'] info.stream_types.append(t) info.streams[t] = { 'container': c, 'video_profile': stream_code_to_profiles[t], 'size': size, 'src' : urls } info.stream_types = sorted(info.stream_types, key = ids.index) tmp = [] for t in info.stream_types: if not t in tmp: tmp.append(t) info.stream_types = tmp return info
def prepare(self): handlers = [HTTPCookieProcessor()] if default_proxy_handler: handlers += default_proxy_handler install_opener(build_opener(*handlers)) add_header("Referer", self.url) info = VideoInfo(self.name) if self.url and not self.vid: self.vid = match1(self.url, 'https?://www.mgtv.com/b/\d+/(\d+).html') if self.vid is None: html = get_content(self.url) self.vid = match1(html, 'vid=(\d+)', 'vid=\"(\d+)', 'vid: (\d+)') did = str(uuid.uuid4()) tk2 = generate_tk2(did) api_info_url = 'https://pcweb.api.mgtv.com/player/video?tk2={}&video_id={}&type=pch5'.format( tk2, self.vid) meta = json.loads(get_content(api_info_url)) assert meta['code'] == 200, '[failed] code: {}, msg: {}'.format( meta['code'], meta['msg']) assert meta['data'], '[Failed] Video info not found.' pm2 = meta['data']['atc']['pm2'] info.title = meta['data']['info']['title'] api_source_url = 'https://pcweb.api.mgtv.com/player/getSource?pm2={}&tk2={}&video_id={}&type=pch5'.format( pm2, tk2, self.vid) meta = json.loads(get_content(api_source_url)) assert meta['code'] == 200, '[failed] code: {}, msg: {}'.format( meta['code'], meta['msg']) assert meta['data'], '[Failed] Video source not found.' data = meta['data'] domain = data['stream_domain'][0] tk2 = generate_tk2(did) for lstream in data['stream']: lurl = lstream['url'] if lurl: lurl = '{}{}&did={}'.format(domain, lurl, did) url = json.loads(get_content(lurl))['info'] info.streams[self.profile_2_types[lstream['name']]] = { 'container': 'm3u8', 'video_profile': lstream['name'], 'src': [url] } info.stream_types.append(self.profile_2_types[lstream['name']]) info.stream_types = sorted(info.stream_types, key=self.supported_stream_types.index) return info
def main(): arg_parser() if args.timeout: socket.setdefaulttimeout(args.timeout) if args.proxy == 'system': proxy_handler = ProxyHandler() else: proxy_handler = ProxyHandler({ 'http': args.proxy, 'https': args.proxy }) opener = build_opener(proxy_handler) install_opener(opener) #mkdir and cd to output dir if not args.output_dir == '.': try: if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) except: log.w("No permission or Not found " + args.output_dir) log.w("use current folder") args.output_dir = '.' if os.path.exists(args.output_dir): os.chdir(args.output_dir) try: exit = 0 for url in args.video_urls: try: m,u = url_to_module(url) if args.playlist: parser = m.parser_list else: parser = m.parser info = parser(u) if type(info) is types.GeneratorType or type(info) is list: ind = 0 for i in info: if ind < args.start: ind+=1 continue handle_videoinfo(i, index=ind) ind+=1 else: handle_videoinfo(info) except AssertionError as e: log.wtf(compact_str(e)) exit = 1 except (RuntimeError, NotImplementedError, SyntaxError) as e: log.e(compact_str(e)) exit = 1 sys.exit(exit) except KeyboardInterrupt: print('\nInterrupted by Ctrl-C')
def setup(self, info): # Hot-plug cookie handler ssl_context = HTTPSHandler( context=ssl.SSLContext(ssl.PROTOCOL_TLSv1)) cookie_handler = HTTPCookieProcessor() opener = build_opener(ssl_context, cookie_handler) opener.addheaders = [('Cookie','__ysuid=%d' % time.time())] install_opener(opener) add_header('Referer', 'v.youku.com') install_acode('4', '1', 'b4et', 'boa4', 'o0b', 'poz') if self.url and not self.vid: self.vid = match1(self.url, 'youku\.com/v_show/id_([a-zA-Z0-9=]+)' ,\ 'player\.youku\.com/player\.php/sid/([a-zA-Z0-9=]+)/v\.swf',\ 'loader\.swf\?VideoIDS=([a-zA-Z0-9=]+)',\ 'loader\.swf\?VideoIDS=([a-zA-Z0-9=]+)',\ 'player\.youku\.com/embed/([a-zA-Z0-9=]+)') api_url = 'http://play.youku.com/play/get.json?vid=%s&ct=12' % self.vid api_url1 = 'http://play.youku.com/play/get.json?vid=%s&ct=10' % self.vid try: meta = json.loads(get_content(api_url)) meta1 = json.loads(get_content(api_url1)) data = meta['data'] data1 = meta1['data'] assert 'stream' in data1 except: if 'error' in data1: if data1['error']['code'] == -202: # Password protected self.password_protected = True self.password = input(log.sprint('Password: '******'&pwd={}'.format(self.password) api_url1 += '&pwd={}'.format(self.password) meta1 = json.loads(get_content(api_url1)) meta = json.loads(get_content(api_url)) data1 = meta1['data'] data = meta['data'] else: raise AssertionError('[Failed] ' + data1['error']['note']) else: raise AssertionError('[Failed] Video not found.') info.title = data['video']['title'] self.ep = data['security']['encrypt_string'] self.ip = data['security']['ip'] try: self.stream_data = data1['stream'] except: if self.password_protected: raise AssertionError('incorrect password!!') else: raise AssertionError('No Stream found!!')
def main(): arg_parser() if args.timeout: socket.setdefaulttimeout(args.timeout) if args.proxy == 'system': proxy_handler = ProxyHandler() else: proxy_handler = ProxyHandler({ 'http': args.proxy, 'https': args.proxy }) opener = build_opener(proxy_handler) install_opener(opener) #mkdir and cd to output dir if not args.output_dir == '.': try: if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) except: log.w("No permission or Not found " + args.output_dir) log.w("use current folder") args.output_dir = '.' if os.path.exists(args.output_dir): os.chdir(args.output_dir) try: exit = 0 for url in args.video_urls: try: m,u = url_to_module(url) if args.playlist: parser = m.parser_list else: parser = m.parser info = parser(u) if type(info) is list: if args.start >= len(info): log.w('invalid argument -s/--start') log.w('start from beginning') args.start = 0 for i in info[args.start:]: handle_videoinfo(i) else: handle_videoinfo(info) except AssertionError as e: log.wtf(compact_str(e)) exit = 1 except (RuntimeError, NotImplementedError, SyntaxError) as e: log.e(compact_str(e)) exit = 1 sys.exit(exit) except KeyboardInterrupt: print('\nInterrupted by Ctrl-C')
def setup(self, info): # Hot-plug cookie handler ssl_context = HTTPSHandler(context=ssl.SSLContext(ssl.PROTOCOL_TLSv1)) cookie_handler = HTTPCookieProcessor() opener = build_opener(ssl_context, cookie_handler) opener.addheaders = [('Cookie', '__ysuid=%d' % time.time())] install_opener(opener) add_header('Referer', 'v.youku.com') install_acode('4', '1', 'b4et', 'boa4', 'o0b', 'poz') if self.url and not self.vid: self.vid = match1(self.url, 'youku\.com/v_show/id_([a-zA-Z0-9=]+)' ,\ 'player\.youku\.com/player\.php/sid/([a-zA-Z0-9=]+)/v\.swf',\ 'loader\.swf\?VideoIDS=([a-zA-Z0-9=]+)',\ 'loader\.swf\?VideoIDS=([a-zA-Z0-9=]+)',\ 'player\.youku\.com/embed/([a-zA-Z0-9=]+)') api_url = 'http://play.youku.com/play/get.json?vid=%s&ct=12' % self.vid api_url1 = 'http://play.youku.com/play/get.json?vid=%s&ct=10' % self.vid try: meta = json.loads(get_content(api_url)) meta1 = json.loads(get_content(api_url1)) data = meta['data'] data1 = meta1['data'] assert 'stream' in data1 except: if 'error' in data1: if data1['error']['code'] == -202: # Password protected self.password_protected = True self.password = input(log.sprint('Password: '******'&pwd={}'.format(self.password) api_url1 += '&pwd={}'.format(self.password) meta1 = json.loads(get_content(api_url1)) meta = json.loads(get_content(api_url)) data1 = meta1['data'] data = meta['data'] else: raise AssertionError('[Failed] ' + data1['error']['note']) else: raise AssertionError('[Failed] Video not found.') info.title = data['video']['title'] self.ep = data['security']['encrypt_string'] self.ip = data['security']['ip'] try: self.stream_data = data1['stream'] except: if self.password_protected: raise AssertionError('incorrect password!!') else: raise AssertionError('No Stream found!!')
def prepare(self): ssl_context = HTTPSHandler(context=ssl.SSLContext(ssl.PROTOCOL_TLSv1)) cookie_handler = HTTPCookieProcessor() opener = build_opener(ssl_context, cookie_handler) opener.addheaders = [('Cookie', '__ysuid=%d' % time.time())] install_opener(opener) info = VideoInfo(self.name) if self.url and not self.vid: self.vid = match1(self.url, 'youku\.com/v_show/id_([a-zA-Z0-9=]+)' ,\ 'player\.youku\.com/player\.php/sid/([a-zA-Z0-9=]+)/v\.swf',\ 'loader\.swf\?VideoIDS=([a-zA-Z0-9=]+)',\ 'loader\.swf\?VideoIDS=([a-zA-Z0-9=]+)',\ 'player\.youku\.com/embed/([a-zA-Z0-9=]+)',\ 'video.tudou.com/v/([a-zA-Z0-9=]+)') self.logger.debug("VID: " + self.vid) api_url = 'https://ups.youku.com/ups/get.json?vid={}&ccode={}&client_ip=192.168.1.1&utid={}&client_ts={}'.format( self.vid, self.ccode, quote(fetch_cna()), int(time.time())) data = json.loads(get_content(api_url)) assert data['e']['code'] == 0, data['e']['desc'] data = data['data'] assert 'stream' in data, data['error']['note'] info.title = data['video']['title'] streams = data['stream'] for s in streams: t = stream_code_to_id[s['stream_type']] urls = [] for u in s['segs']: self.logger.debug("seg> " + str(u)) if u['key'] != -1: urls.append( json.loads( get_content(u['cdn_url'] + '&yxon=1&special=true'))[0]['server']) else: self.logger.warning( "VIP video, ignore unavailable seg: {}".format( s['segs'].index(u))) size = s['size'] info.stream_types.append(t) info.streams[t] = { 'container': id_to_container[t], 'video_profile': stream_code_to_profiles[t], 'size': size, 'src': urls } info.stream_types = sorted(info.stream_types, key=ids.index) return info
def prepare(self): handlers = [HTTPCookieProcessor()] if default_proxy_handler: handlers += default_proxy_handler install_opener(build_opener(*handlers)) info = VideoInfo(self.name, True) html = get_content(self.url) self.vid = match1(html, '"userNum":(\d+)') live_id = match1(html, '"liveId":\s*(\d+)') assert live_id, u"主播正在休息" info.stream_types.append('current') info.streams['current'] = {'container': 'mp4', 'src': ['http://extapi.live.netease.com/redirect/video/{}'.format(self.vid)], 'size' : float('inf')} info.artist = match1(html, '"nick":"([^"]+)') info.title = match1(html, '<title>([^<]+)').split('-')[0] return info
def prepare(self): handlers = [HTTPCookieProcessor()] if default_proxy_handler: handlers += default_proxy_handler install_opener(build_opener(*handlers)) add_header("Referer", self.url) info = VideoInfo(self.name) if self.url and not self.vid: self.vid = match1(self.url, 'https?://www.mgtv.com/b/\d+/(\d+).html') if self.vid is None: html = get_content(self.url) self.vid = match1(html, 'vid=(\d+)', 'vid=\"(\d+)', 'vid: (\d+)') did = str(uuid.uuid4()) tk2 = generate_tk2(did) api_info_url = 'https://pcweb.api.mgtv.com/player/video?tk2={}&video_id={}&type=pch5'.format(tk2, self.vid) meta = json.loads(get_content(api_info_url)) assert meta['code'] == 200, '[failed] code: {}, msg: {}'.format(meta['code'], meta['msg']) assert meta['data'], '[Failed] Video info not found.' pm2 = meta['data']['atc']['pm2'] info.title = meta['data']['info']['title'] api_source_url = 'https://pcweb.api.mgtv.com/player/getSource?pm2={}&tk2={}&video_id={}&type=pch5'.format(pm2, tk2, self.vid) meta = json.loads(get_content(api_source_url)) assert meta['code'] == 200, '[failed] code: {}, msg: {}'.format(meta['code'], meta['msg']) assert meta['data'], '[Failed] Video source not found.' data = meta['data'] domain = data['stream_domain'][0] tk2 = generate_tk2(did) for lstream in data['stream']: lurl = lstream['url'] if lurl: lurl = '{}{}&did={}'.format(domain, lurl, did) url = json.loads(get_content(lurl))['info'] info.streams[self.profile_2_types[lstream['name']]] = {'container': 'm3u8', 'video_profile': lstream['name'], 'src' : [url]} info.stream_types.append(self.profile_2_types[lstream['name']]) info.stream_types= sorted(info.stream_types, key = self.supported_stream_types.index) return info
def main(): args = arg_parser() logging.root.setLevel(logging.WARNING) # if not args.debug: # logging.root.setLevel(logging.WARNING) # else: # logging.root.setLevel(logging.DEBUG) if args.timeout: socket.setdefaulttimeout(args.timeout) if args.proxy == 'system': proxy_handler = ProxyHandler() args.proxy = os.environ.get('HTTP_PROXY', 'none') else: proxy_handler = ProxyHandler({'http': args.proxy, 'https': args.proxy}) if not args.proxy == 'none': opener = build_opener(proxy_handler) install_opener(opener) default_proxy_handler[:] = [proxy_handler] import ssl ssl._create_default_https_context = ssl._create_unverified_context try: url = args.video_url try: m, u = url_to_module(url) parser = m.parser info = parser(u) print( json.dumps(info.jsonlize(), indent=4, sort_keys=True, ensure_ascii=False)) except AssertionError as e: logger.critical(e) except (RuntimeError, NotImplementedError, SyntaxError) as e: logger.error(e) except KeyboardInterrupt: logger.info('Interrupted by Ctrl-C')
def main(): args = arg_parser() logging.root.setLevel(logging.WARNING) # if not args.debug: # logging.root.setLevel(logging.WARNING) # else: # logging.root.setLevel(logging.DEBUG) if args.timeout: socket.setdefaulttimeout(args.timeout) if args.proxy == 'system': proxy_handler = ProxyHandler() args.proxy = os.environ.get('HTTP_PROXY', 'none') else: proxy_handler = ProxyHandler({ 'http': args.proxy, 'https': args.proxy }) if not args.proxy == 'none': opener = build_opener(proxy_handler) install_opener(opener) default_proxy_handler[:] = [proxy_handler] import ssl ssl._create_default_https_context = ssl._create_unverified_context try: url = args.video_url try: m, u = url_to_module(url) parser = m.parser info = parser(u) print(json.dumps(info.jsonlize(), indent=4, sort_keys=True, ensure_ascii=False)) except AssertionError as e: logger.critical(e) except (RuntimeError, NotImplementedError, SyntaxError) as e: logger.error(e) except KeyboardInterrupt: logger.info('Interrupted by Ctrl-C')
def main(): args = arg_parser() if args.timeout: socket.setdefaulttimeout(args.timeout) if args.proxy: proxy_handler = ProxyHandler({'http': args.proxy, 'https': args.proxy}) opener = build_opener(proxy_handler) install_opener(opener) #mkdir and cd to output dir if not args.output_dir == '.': try: if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) except: log.w("No permission or Not found " + args.output_dir) log.w("use current folder") args.output_dir = '.' if os.path.exists(args.output_dir): os.chdir(args.output_dir) try: exit = 0 for url in args.video_urls: try: m, u = url_to_module(url) if not u == url: args.video_urls[args.video_urls.index(url)] = u if args.playlist: m.download_playlist(u, args) else: m.download(u, args) except AssertionError as e: log.wtf(str(e)) exit = 1 except (RuntimeError, NotImplementedError, SyntaxError) as e: log.e(str(e)) exit = 1 sys.exit(exit) except KeyboardInterrupt: print('\nInterrupted by Ctrl-C')
def main(): args = arg_parser() handlers = [] if args.timeout: socket.setdefaulttimeout(args.timeout) if args.user_agent: fake_headers['User-Agent'] = args.user_agent if args.http_proxy: proxy_handler = ProxyHandler({ 'http': args.http_proxy, 'https': args.http_proxy }) handlers.append(proxy_handler) elif args.socks_proxy: try: import socks addr, port = args.socks_proxy.split(':') socks.set_default_proxy(socks.SOCKS5, addr, int(port)) socket.socket = socks.socksocket except: print('Failed to set socks5 proxy. Please install PySocks.', file=sys.stderr) opener = build_opener(*handlers) install_opener(opener) default_proxy_handler[:] = handlers m, u = url_to_module(args.video_url) info = m.parser(u) # Is a playlist? if m.list_only(): video_list = m.prepare_list() result = [ {'title': match1(get_content(url), r'<title>(.+?)</title>'), 'url': url} for url in video_list ] else: result = info.jsonlize() print(json.dumps(result, indent=4, sort_keys=True, ensure_ascii=False))
def main(): arg_parser() if not args.debug: logging.root.setLevel(logging.WARNING) else: logging.root.setLevel(logging.DEBUG) if args.timeout: socket.setdefaulttimeout(args.timeout) if args.proxy == 'system': proxy_handler = ProxyHandler() args.proxy = os.environ.get('HTTP_PROXY', 'none') elif args.proxy.upper().startswith('SOCKS'): try: import socks from sockshandler import SocksiPyHandler except ImportError: logger.error('To use SOCKS proxy, please install PySocks first!') raise parsed_socks_proxy = urlparse(args.proxy) sockstype = socks.PROXY_TYPES[parsed_socks_proxy.scheme.upper()] rdns = True proxy_handler = SocksiPyHandler(sockstype, parsed_socks_proxy.hostname, parsed_socks_proxy.port, rdns, parsed_socks_proxy.username, parsed_socks_proxy.password) else: proxy_handler = ProxyHandler({'http': args.proxy, 'https': args.proxy}) if not args.proxy == 'none': opener = build_opener(proxy_handler) install_opener(opener) default_proxy_handler[:] = [proxy_handler] #mkdir and cd to output dir if not args.output_dir == '.': try: if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) except: logger.warning("No permission or Not found " + args.output_dir) logger.warning("use current folder") args.output_dir = '.' if os.path.exists(args.output_dir): os.chdir(args.output_dir) try: exit = 0 for url in args.video_urls: try: m, u = url_to_module(url) if args.playlist: parser = m.parser_list else: parser = m.parser info = parser(u) if type(info) is types.GeneratorType or type(info) is list: ind = 0 for i in info: if ind < args.start: ind += 1 continue handle_videoinfo(i, index=ind) ind += 1 else: handle_videoinfo(info) except AssertionError as e: logger.critical(compact_str(e)) exit = 1 except (RuntimeError, NotImplementedError, SyntaxError) as e: logger.error(compact_str(e)) exit = 1 sys.exit(exit) except KeyboardInterrupt: logger.info('Interrupted by Ctrl-C')
def main(): arg_parser() if not args.debug: logging.root.setLevel(logging.WARNING) else: logging.root.setLevel(logging.DEBUG) if args.timeout: socket.setdefaulttimeout(args.timeout) if args.proxy == 'system': proxy_handler = ProxyHandler() args.proxy = os.environ.get('HTTP_PROXY', 'none') else: proxy_handler = ProxyHandler({ 'http': args.proxy, 'https': args.proxy }) if not args.proxy == 'none': opener = build_opener(proxy_handler) install_opener(opener) default_proxy_handler[:] = [proxy_handler] #mkdir and cd to output dir if not args.output_dir == '.': try: if not os.path.exists(args.output_dir): os.makedirs(args.output_dir) except: logger.warning("No permission or Not found " + args.output_dir) logger.warning("use current folder") args.output_dir = '.' if os.path.exists(args.output_dir): os.chdir(args.output_dir) try: exit = 0 for url in args.video_urls: try: m,u = url_to_module(url) if args.playlist: parser = m.parser_list else: parser = m.parser info = parser(u) if type(info) is types.GeneratorType or type(info) is list: ind = 0 for i in info: if ind < args.start: ind+=1 continue handle_videoinfo(i, index=ind) ind+=1 else: handle_videoinfo(info) except AssertionError as e: logger.critical(compact_str(e)) exit = 1 except (RuntimeError, NotImplementedError, SyntaxError) as e: logger.error(compact_str(e)) exit = 1 sys.exit(exit) except KeyboardInterrupt: logger.info('Interrupted by Ctrl-C')
def install_default_handlers(): install_opener(build_opener(*default_handlers))