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 __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 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