def play(): if request.method == 'POST': url = request.form['url'] try: islist = request.form['list'] islist = islist == "True" except: islist = False m,u = url_to_module(url) if not islist: parser = m.parser else: parser = m.parser_list try: info = parser(u) except AssertionError as e: return str(e) if type(info) is types.GeneratorType or type(info) is list: for i in info: player_args = i.extra player_args['title'] = i.title urls = i.streams[i.stream_types[0]]['src'] video = json.dumps({"urls": urls, "args": player_args}) player.play(video) else: player_args = info.extra player_args['title'] = info.title urls = info.streams[info.stream_types[0]]['src'] video = json.dumps({"urls": urls, "args": player_args}) player.play(video) return "OK" else: return "curl --data-urlencode \"url=<URL>\" http://IP:5000/play"
def play(): if request.method == 'POST': url = request.form['url'] try: islist = request.form['list'] islist = islist == 'True' except: islist = False m,u = url_to_module(url) if not islist: parser = m.parser else: parser = m.parser_list try: info = parser(u) except AssertionError as e: return str(e) if type(info) is types.GeneratorType or type(info) is list: for i in info: handle_videoinfo(i) else: handle_videoinfo(info) return 'OK' else: return 'curl --data-urlencode "url=<URL>" http://IP:5000/play'
def check_stream(self): logger.debug(self.fname) if platform.system() == 'Linux': if not chakra_available and not quickjs_available and external_interpreter is None: logger.error(''' Please install at least one of the following Javascript interpreter.' python packages: PyChakra, quickjs applications: Gjs, CJS, QuickJS, JavaScriptCore, Node.js, etc.''') site, url = url_to_module(self.url) try: info = site.parser(url) except AssertionError: return stream_id = info.stream_types[0] urls = info.streams[stream_id]['src'] self.raw_stream_url = urls[0] # print(info.title) douyuurl = self.url roomnum = douyuurl.split("douyu.com/")[1] roomloop = json.loads( get_content( 'https://www.douyu.com/wgapi/live/liveweb/getRoomLoopInfo?rid=' + roomnum)) roomvid = roomloop['data']['vid'] if roomvid != "": return False else: return True
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 check_stream(self): site, url = url_to_module(self.url) try: info = site.parser(url) except AssertionError: return False stream_id = info.stream_types[0] urls = info.streams[stream_id]['src'] self.raw_stream_url = urls[0] return True
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 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 check_stream(self): logger.debug(self.fname) site, url = url_to_module(self.url) try: info = site.parser(url) except AssertionError: return stream_id = info.stream_types[0] urls = info.streams[stream_id]['src'] self.ydl_opts['absurl'] = urls[0] # print(info.title) return True
def play(): if request.method == 'PUT': url = request.form['url'] m,u = url_to_module(url) try: info = m.parser(u) except AssertionError as e: return str(e) player_args = info.extra player_args['title'] = info.title urls = info.streams[info.stream_types[0]]['src'] launch_player("mpv", urls, **player_args) return "OK" else: return "curl -X put --data-urlencode \"url=<URL>\" http://IP:5000/play"
def check_stream(self): logger.debug(self.fname) try: site, url = url_to_module(self.url) info = site.parser(url) stream_id = info.stream_types[0] urls = info.streams[stream_id]['src'] self.raw_stream_url = urls[0] # print(info.title) except: handlers = [YDownload(self.fname, self.url, 'mp4'), SDownload(self.fname, self.url, 'flv')] for handler in handlers: if handler.check_stream(): self.handler = handler self.suffix = handler.suffix return True return False return True
def check_stream(self): logger.debug(self.fname) if platform.system() == 'Linux': if not chakra_available and not quickjs_available and external_interpreter is None: logger.error(''' Please install at least one of the following Javascript interpreter.' python packages: PyChakra, quickjs applications: Gjs, CJS, QuickJS, JavaScriptCore, Node.js, etc.''') site, url = url_to_module(self.url) try: info = site.parser(url) except AssertionError: return stream_id = info.stream_types[0] urls = info.streams[stream_id]['src'] self.raw_stream_url = urls[0] # print(info.title) return True
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 check_stream(self): logger.debug(self.fname) streamlink = StreamLink(self.fname, self.url, FallbackHandler()) youtube_dl = YoutubeDl(self.fname, self.url, streamlink) try: site, url = url_to_module(self.url) info = site.parser(url) # except AssertionError: # self.handler = youtube_dl.handle() # return self.handler != FallbackHandler() stream_id = info.stream_types[0] urls = info.streams[stream_id]['src'] self.raw_stream_url = urls[0] # print(info.title) except: self.handler = youtube_dl.handle() self.suffix = self.handler.suffix return self.handler != FallbackHandler() return True
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 handle_video(video): http.reset_headers() http.uninstall_cookie() try: m, u = url_to_module(video) if args.playlist: parser = m.parser_list m.start = args.start else: parser = m.parser info = parser(u) if isinstance(info, (GeneratorType, list)): for i in info: handle_videoinfo(i) else: handle_videoinfo(info) except AssertionError as e: logger.critical(str(e)) return 1 except (RuntimeError, NotImplementedError, SyntaxError) as e: logger.error(repr(e)) return 1 return 0
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.insecure: ssl._create_default_https_context = ssl._create_unverified_context proxies = None if args.proxy == 'system': proxies = getproxies() args.proxy = proxies.get('http') or proxies.get('https', 'none') args.proxy = args.proxy.lower() if not args.proxy.startswith(('http', 'socks', 'none')): args.proxy = 'http://' + args.proxy if args.proxy == 'none': proxies = {} elif args.proxy.startswith(('http', 'socks')): if args.proxy.startswith(('https', 'socks')): try: import extproxy except ImportError: logger.error('Please install ExtProxy to use proxy: ' + args.proxy) raise proxies = { 'http': args.proxy, 'https': args.proxy } proxy_handler = ProxyHandler(proxies) add_default_handler(proxy_handler) install_default_handlers() #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.INFO) else: logging.root.setLevel(logging.DEBUG) if args.timeout: socket.setdefaulttimeout(args.timeout) if args.insecure: ssl._create_default_https_context = ssl._create_unverified_context args.certs = ssl.CERT_NONE else: certs = args.append_certs or [] try: import certifi except ImportError: pass else: certs.append(certifi.where()) if certs: context = ssl._create_default_https_context() for cert in certs: if os.path.isfile(cert): context.load_verify_locations(cert) elif os.path.isdir(cert): context.load_verify_locations(capath=cert) https_handler = HTTPSHandler(context=context) http.add_default_handler(https_handler) args.certs = certs else: args.certs = None proxies = None if args.proxy == 'system': proxies = getproxies() args.proxy = proxies.get('http') or proxies.get('https', 'none') args.proxy = args.proxy.lower() if not args.proxy.startswith(('http', 'socks', 'none')): args.proxy = 'http://' + args.proxy if args.proxy == 'none': proxies = {} elif args.proxy.startswith(('http', 'socks')): if args.proxy.startswith(('https', 'socks')): try: import extproxy except ImportError: logger.error('Please install ExtProxy to use proxy: ' + args.proxy) raise proxies = { 'http': args.proxy, 'https': args.proxy } proxy_handler = ProxyHandler(proxies) http.add_default_handler(proxy_handler) if args.no_http_cache: http.CACHED.set(0) #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) exit = 0 try: for url in args.video_urls: http.reset_headers() http.uninstall_cookie() try: m, u = url_to_module(url) if args.playlist: parser = m.parser_list m.start = args.start else: parser = m.parser info = parser(u) if isinstance(info, (GeneratorType, list)): for i in info: handle_videoinfo(i) else: handle_videoinfo(info) except AssertionError as e: logger.critical(str(e)) exit = 1 except (RuntimeError, NotImplementedError, SyntaxError) as e: logger.error(repr(e)) exit = 1 except KeyboardInterrupt: logger.info('Interrupted by Ctrl-C') except Exception as e: errmsg = str(e) logger.debug(errmsg, exc_info=True) if 'local issuer' in errmsg: logger.warning('Please install or update Certifi, and try again:\n' 'pip3 install certifi --upgrade') exit = 255 sys.exit(exit)
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')