Exemplo n.º 1
0
    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
Exemplo n.º 2
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.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')
Exemplo n.º 3
0
 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)
Exemplo n.º 4
0
Arquivo: bobo.py Projeto: Yu1984/ykdl
 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)
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
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')
Exemplo n.º 8
0
Arquivo: youku.py Projeto: PureTV/ykdl
    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!!')
Exemplo n.º 9
0
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')
Exemplo n.º 10
0
    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!!')
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
Arquivo: bobo.py Projeto: wwqgtxx/ykdl
    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
Exemplo n.º 13
0
Arquivo: mgtv.py Projeto: wwqgtxx/ykdl
    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
Exemplo n.º 14
0
Arquivo: ykdl.py Projeto: wwqgtxx/ykdl
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')
Exemplo n.º 15
0
Arquivo: ykdl.py Projeto: wwqgtxx/ykdl
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')
Exemplo n.º 16
0
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')
Exemplo n.º 17
0
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))
Exemplo n.º 18
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.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')
Exemplo n.º 19
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.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')
Exemplo n.º 20
0
def install_default_handlers():
    install_opener(build_opener(*default_handlers))