def qq(self): html = _http(self.url) vid = re.compile(r'vid:"([^"]+)"').search(html).group(1) murl = 'http://vv.video.qq.com/' vinfo = _http('%sgetinfo?otype=json&vids=%s' % (murl, vid)) infoj = json.loads(vinfo.split('=')[1][:-1]) qtyps = OrderedDict( (('1080P', 'fhd'), ('超清', 'shd'), ('高清', 'hd'), ('标清', 'sd'))) #python 2.7 syntax #vtyps = {v['name']:v['id'] for v in infoj['fl']['fi']} vtyps = dict((v['name'], v['id']) for v in infoj['fl']['fi']) qtypid = vtyps['sd'] sels = [k for k, v in qtyps.iteritems() if v in vtyps] sel = dialog.select('清晰度', sels) surls = [] urlpre = infoj['vl']['vi'][0]['ul']['ui'][-1]['url'] if sel is -1: return 'cancel' qtypid = vtyps[qtyps[sels[sel]]] for i in range(1, int(infoj['vl']['vi'][0]['cl']['fc'])): fn = '%s.p%s.%s.mp4' % (vid, qtypid % 10000, str(i)) sinfo = _http( '{0}getkey?format={1}&filename={2}&vid={3}&otype=json'.format( murl, qtypid, fn, vid)) skey = json.loads(sinfo.split('=')[1][:-1])['key'] surl = urllib2.urlopen('%s%s?vkey=%s' % (urlpre, fn, skey), timeout=30).geturl() if not surl: break surls.append(surl) movurl = 'stack://{0}'.format(' , '.join(surls)) return movurl
def qq(self): html = _http(self.url) vid = re.compile(r'vid:"([^"]+)"').search(html).group(1) murl = 'http://vv.video.qq.com/' vinfo = _http('%sgetinfo?otype=json&vids=%s' % (murl, vid)) infoj = json.loads(vinfo.split('=')[1][:-1]) qtyps = OrderedDict(( ('1080P', 'fhd'), ('超清', 'shd'), ('高清', 'hd'), ('标清', 'sd'))) #python 2.7 syntax #vtyps = {v['name']:v['id'] for v in infoj['fl']['fi']} vtyps = dict((v['name'],v['id']) for v in infoj['fl']['fi']) qtypid = vtyps['sd'] sels = [k for k,v in qtyps.iteritems() if v in vtyps] sel = dialog.select('清晰度', sels) surls = [] urlpre = infoj['vl']['vi'][0]['ul']['ui'][-1]['url'] if sel is -1: return 'cancel' qtypid = vtyps[qtyps[sels[sel]]] for i in range(1, int(infoj['vl']['vi'][0]['cl']['fc'])+1): fn = '%s.p%s.%s.mp4' % (vid, qtypid%10000, str(i)) sinfo = _http( '{0}getkey?format={1}&filename={2}&vid={3}&otype=json'.format( murl, qtypid, fn, vid)) skey = json.loads(sinfo.split('=')[1][:-1])['key'] surl = urllib2.urlopen( '%s%s?vkey=%s' % (urlpre, fn, skey), timeout=30).geturl() if not surl: break surls.append(surl) movurl = 'stack://{0}'.format(' , '.join(surls)) return movurl
def qq(self): html = _http(self.url) vid = re.compile(r'vid:"([^"]+)"').search(html).group(1) murl = "http://vv.video.qq.com/" vinfo = _http("%sgetinfo?otype=json&vids=%s" % (murl, vid)) infoj = json.loads(vinfo.split("=")[1][:-1]) qtyps = OrderedDict((("1080P", "fhd"), ("超清", "shd"), ("高清", "hd"), ("标清", "sd"))) # python 2.7 syntax # vtyps = {v['name']:v['id'] for v in infoj['fl']['fi']} vtyps = dict((v["name"], v["id"]) for v in infoj["fl"]["fi"]) qtypid = vtyps["sd"] sels = [k for k, v in qtyps.iteritems() if v in vtyps] sel = dialog.select("清晰度", sels) surls = [] urlpre = infoj["vl"]["vi"][0]["ul"]["ui"][-1]["url"] if sel is -1: return "cancel" qtypid = vtyps[qtyps[sels[sel]]] for i in range(1, int(infoj["vl"]["vi"][0]["cl"]["fc"])): fn = "%s.p%s.%s.mp4" % (vid, qtypid % 10000, str(i)) sinfo = _http("{0}getkey?format={1}&filename={2}&vid={3}&otype=json".format(murl, qtypid, fn, vid)) skey = json.loads(sinfo.split("=")[1][:-1])["key"] surl = urllib2.urlopen("%s%s?vkey=%s" % (urlpre, fn, skey), timeout=30).geturl() if not surl: break surls.append(surl) movurl = "stack://{0}".format(" , ".join(surls)) return movurl
def youku(self): stypes = OrderedDict( (('1080P', 'hd3'), ('超清', 'hd2'), ('高清', 'mp4'), ('标清', 'flv'))) #get movie metadata (json format) vid = self.url[-18:-5] moviesurl = "http://v.youku.com/player/getPlayList/VideoIDS/{0}/ctype/12/ev/1".format( vid) result = _http(moviesurl) movinfo = json.loads(result.replace('\r\n', '')) movdat = movinfo['data'][0] streamfids = movdat['streamfileids'] stype = 'flv' # user select streamtype if len(streamfids) > 1: selstypes = [k for k, v in stypes.iteritems() if v in streamfids] selitem = dialog.select('清晰度', selstypes) if selitem is -1: return 'cancle' stype = stypes[selstypes[selitem]] #stream file format type is mp4 or flv ftype = 'mp4' if stype in 'mp4' else 'flv' video_id = movdat['videoid'] oip = movdat['ip'] ep = movdat['ep'] ep, token, sid = self._calc_ep2(video_id, ep) query = urllib.urlencode( dict( vid=video_id, ts=int(time.time()), keyframe=1, type=ftype, ep=ep, oip=oip, ctype=12, ev=1, token=token, sid=sid, )) movurl = 'http://pl.youku.com/playlist/m3u8?%s' % (query) #fileid = self._getfileid(streamfids[stype], int(movdat['seed'])) #movsegs = movdat['segs'][stype] #rooturl = 'http://f.youku.com/player/getFlvPath/sid/00_00/st' #segurls = [] #for movseg in movsegs: #youku split stream file to seg # segid = '{0}{1:02X}{2}'.format(fileid[0:8], # int(movseg['no']) ,fileid[10:]) # kstr = movseg['k'] # segurl = '{0}/{1}/fileid/{2}?K={3}'.format( # rooturl, ftype, segid, kstr) # segurls.append(segurl) #movurl = 'stack://{0}'.format(' , '.join(segurls)) return movurl
def youku(self): stypes = OrderedDict((("1080P", "hd3"), ("超清", "hd2"), ("高清", "mp4"), ("标清", "flv"))) # get movie metadata (json format) vid = self.url[-18:-5] moviesurl = "http://v.youku.com/player/getPlayList/VideoIDS/{0}/ctype/12/ev/1".format(vid) result = _http(moviesurl) movinfo = json.loads(result.replace("\r\n", "")) movdat = movinfo["data"][0] streamfids = movdat["streamfileids"] stype = "flv" # user select streamtype if len(streamfids) > 1: selstypes = [k for k, v in stypes.iteritems() if v in streamfids] selitem = dialog.select("清晰度", selstypes) if selitem is -1: return "cancle" stype = stypes[selstypes[selitem]] # stream file format type is mp4 or flv ftype = "mp4" if stype in "mp4" else "flv" video_id = movdat["videoid"] oip = movdat["ip"] ep = movdat["ep"] ep, token, sid = self._calc_ep2(video_id, ep) query = urllib.urlencode( dict( vid=video_id, ts=int(time.time()), keyframe=1, type=ftype, ep=ep, oip=oip, ctype=12, ev=1, token=token, sid=sid, ) ) movurl = "http://pl.youku.com/playlist/m3u8?%s" % (query) # fileid = self._getfileid(streamfids[stype], int(movdat['seed'])) # movsegs = movdat['segs'][stype] # rooturl = 'http://f.youku.com/player/getFlvPath/sid/00_00/st' # segurls = [] # for movseg in movsegs: # youku split stream file to seg # segid = '{0}{1:02X}{2}'.format(fileid[0:8], # int(movseg['no']) ,fileid[10:]) # kstr = movseg['k'] # segurl = '{0}/{1}/fileid/{2}?K={3}'.format( # rooturl, ftype, segid, kstr) # segurls.append(segurl) # movurl = 'stack://{0}'.format(' , '.join(segurls)) return movurl
def _current_keymap(self, window, category): actions = OrderedDict([(action, "") for action in ACTIONS[category].keys()]) for w, a, k in self.defaultkeymap: if w == window: if a in actions.keys(): actions[a] = k for w, a, k in self.userkeymap: if w == window: if a in actions.keys(): actions[a] = k names = ACTIONS[category] return [(action, key, names[action]) for action, key in actions.iteritems()]
def youku(self): stypes = OrderedDict((('1080P', 'hd3'), ('超清', 'hd2'), ('高清', 'mp4'), ('标清', 'flv'))) #get movie metadata (json format) vid = self.url[-18:-5] moviesurl="http://v.youku.com/player/getPlayList/VideoIDS/{0}/ctype/12/ev/1".format( vid) result = _http(moviesurl) movinfo = json.loads(result.replace('\r\n','')) movdat = movinfo['data'][0] streamfids = movdat['streamfileids'] video_id = movdat['videoid'] stype = 'flv' # user select streamtype if len(streamfids) > 1: selstypes = [k for k,v in stypes.iteritems() if v in streamfids] selitem = dialog.select('清晰度', selstypes) if selitem is -1: return 'cancle' stype = stypes[selstypes[selitem]] #stream file format type is mp4 or flv ftype = 'mp4' if stype in 'mp4' else 'flv' fileid = self._getfileid(streamfids[stype], int(movdat['seed'])) new_ep, token, sid = self._calc_ep2(video_id, movdat['ep']) query = urllib.urlencode(dict( vid=video_id, ts=int(time.time()), keyframe=1, type=stype, ep=new_ep, oip=movdat['ip'], ctype=12, ev=1, token=token, sid=sid, )) movurl = 'http://pl.youku.com/playlist/m3u8?' + query #movurl = _http(url) # movsegs = movdat['segs'][stype] # rooturl = 'http://k.youku.com/player/getFlvPath/sid/00_00/st' # segurls = [] # for movseg in movsegs: # #youku split stream file to seg # segid = '{0}{1:02X}{2}'.format(fileid[0:8], # int(movseg['no']) ,fileid[10:]) # kstr = movseg['k'] # segurl = '{0}/{1}/fileid/{2}?K={3}'.format( # rooturl, ftype, segid, kstr) # rsp = urllib2.urlopen(segurl) # rsegurl = rsp.geturl() # segurls.append(rsegurl) # movurl = 'stack://{0}'.format(' , '.join(segurls)) m3p8 = _http(movurl) segurls = re.findall('(http://.*)\?', m3p8) seen = set() segurls = [x for x in segurls if x not in seen and not seen.add(x)] movurl = 'stack://{0}'.format(' , '.join(segurls)) return movurl
def _current_keymap(self, window, category): actions = OrderedDict([(action, "") for action in ACTIONS[category].keys()]) for w, a, k in self.defaultkeymap: if w == window: if a in actions.keys(): actions[a] = k for w, a, k in self.userkeymap: if w == window: if a in actions.keys(): actions[a] = k names = ACTIONS[category] return [(action, key, names[action]) for action, key in actions.iteritems()]
def youku(self): stypes = OrderedDict((('1080P', 'hd3'), ('超清', 'hd2'), ('高清', 'mp4'), ('标清', 'flv'))) #get movie metadata (json format) vid = self.url[-18:-5] moviesurl="http://v.youku.com/player/getPlayList/VideoIDS/{0}".format( vid) result = _http(moviesurl) movinfo = json.loads(result.replace('\r\n','')) movdat = movinfo['data'][0] streamfids = movdat['streamfileids'] stype = 'flv' # user select streamtype if len(streamfids) > 1: selstypes = [k for k,v in stypes.iteritems() if v in streamfids] selitem = dialog.select('清晰度', selstypes) if selitem is -1: return 'cancle' stype = stypes[selstypes[selitem]] #stream file format type is mp4 or flv ftype = 'mp4' if stype in 'mp4' else 'flv' fileid = self._getfileid(streamfids[stype], int(movdat['seed'])) movsegs = movdat['segs'][stype] rooturl = 'http://f.youku.com/player/getFlvPath/sid/00_00/st' segurls = [] for movseg in movsegs: #youku split stream file to seg segid = '{0}{1:02X}{2}'.format(fileid[0:8], int(movseg['no']) ,fileid[10:]) kstr = movseg['k'] segurl = '{0}/{1}/fileid/{2}?K={3}'.format( rooturl, ftype, segid, kstr) rsp = urllib2.urlopen(segurl) rsegurl = rsp.geturl() segurls.append(rsegurl) movurl = 'stack://{0}'.format(' , '.join(segurls)) return movurl
def youku(self): stypes = OrderedDict( (('1080P', 'hd3'), ('超清', 'hd2'), ('高清', 'mp4'), ('标清', 'flv'))) #get movie metadata (json format) vid = self.url[-18:-5] moviesurl = "http://v.youku.com/player/getPlayList/VideoIDS/{0}".format( vid) result = _http(moviesurl) movinfo = json.loads(result.replace('\r\n', '')) movdat = movinfo['data'][0] streamfids = movdat['streamfileids'] stype = 'flv' # user select streamtype if len(streamfids) > 1: selstypes = [k for k, v in stypes.iteritems() if v in streamfids] selitem = dialog.select('清晰度', selstypes) if selitem is -1: return 'cancle' stype = stypes[selstypes[selitem]] #stream file format type is mp4 or flv ftype = 'mp4' if stype in 'mp4' else 'flv' fileid = self._getfileid(streamfids[stype], int(movdat['seed'])) movsegs = movdat['segs'][stype] rooturl = 'http://f.youku.com/player/getFlvPath/sid/00_00/st' segurls = [] for movseg in movsegs: #youku split stream file to seg segid = '{0}{1:02X}{2}'.format(fileid[0:8], int(movseg['no']), fileid[10:]) kstr = movseg['k'] segurl = '{0}/{1}/fileid/{2}?K={3}'.format(rooturl, ftype, segid, kstr) rsp = urllib2.urlopen(segurl) rsegurl = rsp.geturl() segurls.append(rsegurl) movurl = 'stack://{0}'.format(' , '.join(segurls)) return movurl
def youku(self): stypes = OrderedDict((('1080P', 'hd3'), ('超清', 'hd2'), ('高清', 'mp4'), ('标清', 'flv'))) # get movie metadata (json format) vid = self.url[-18:-5] moviesurl = ('http://v.youku.com/player/getPlayList/VideoIDS/{0}' '/Pf/4/ctype/12/ev/1').format(vid) result = _http(moviesurl) movinfo = json.loads(result.replace('\r\n', '')) movdat = movinfo['data'][0] streamfids = movdat['streamfileids'] video_id = movdat['videoid'] # print video_id stype = 'flv' # user select streamtype if len(streamfids) > 1: selstypes = [k for k, v in stypes.iteritems() if v in streamfids] selitem = dialog.select('清晰度', selstypes) if selitem is -1: return 'cancle' stype = stypes[selstypes[selitem]] # stream file format type is mp4 or flv ftype = 'mp4' if stype in 'mp4' else 'flv' fileid = self.get_fileid(streamfids[stype], int(movdat['seed'])) token, sid = self.get_sid_token(video_id, movdat['ep']) # query = urllib.urlencode(dict( # vid=video_id, ts=int(time.time()), keyframe=1, type=stype, # ep=new_ep, oip=movdat['ip'], ctype=12, ev=1, token=token, sid=sid, # )) # the length video just 40 min by m3u8 # movurl = 'http://pl.youku.com/playlist/m3u8?' + query # print movurl # movurl = _http(url) movsegs = movdat['segs'][stype] rooturl = 'http://k.youku.com/player/getFlvPath/sid' segurls = [] for movseg in movsegs: # youku split stream file to seg segid = '{0}{1:02X}{2}'.format( fileid[0:8], int(movseg['no']), fileid[10:]) kstr = movseg['k'] segurl = '{0}/{1}_00/st/{2}/fileid/{3}?'.format( rooturl, sid, ftype, segid) new_ep = base64.b64encode( self.trans_e(self.f_code_2, sid+'_'+segid+'_'+token)) query = urllib.urlencode(dict(K=kstr, ctype=12, ev=1, oip=movdat['ip'], token=token, ep=new_ep)) segurl = segurl + query # print segurl rsp = urllib2.urlopen(segurl) rsegurl = rsp.geturl() segurls.append(rsegurl) # m3u8 = _http(movurl) # print m3u8 # segurls = re.findall('(http://.*)\?', m3u8) # lens = re.findall('EXTINF:([\d\.]+),', m3u8) # b = 0 # for a in lens: # b = b + float(a) # print b # print segurls # seen = set() # segurls = [x for x in segurls if x not in seen and not seen.add(x)] # print segurls movurl = 'stack://{0}'.format(' , '.join(segurls)) return movurl
def youku(self): stypes = OrderedDict( (('1080P', 'hd3'), ('超清', 'hd2'), ('高清', 'mp4'), ('标清', 'flv'))) # get movie metadata (json format) vid = self.url[-18:-5] moviesurl = ('http://v.youku.com/player/getPlayList/VideoIDS/{0}' '/Pf/4/ctype/12/ev/1').format(vid) result = _http(moviesurl) movinfo = json.loads(result.replace('\r\n', '')) movdat = movinfo['data'][0] streamfids = movdat['streamfileids'] video_id = movdat['videoid'] # print video_id stype = 'flv' # user select streamtype if len(streamfids) > 1: selstypes = [k for k, v in stypes.iteritems() if v in streamfids] selitem = dialog.select('清晰度', selstypes) if selitem is -1: return 'cancle' stype = stypes[selstypes[selitem]] # stream file format type is mp4 or flv ftype = 'mp4' if stype in 'mp4' else 'flv' fileid = self.get_fileid(streamfids[stype], int(movdat['seed'])) token, sid = self.get_sid_token(video_id, movdat['ep']) # query = urllib.urlencode(dict( # vid=video_id, ts=int(time.time()), keyframe=1, type=stype, # ep=new_ep, oip=movdat['ip'], ctype=12, ev=1, token=token, sid=sid, # )) # the length video just 40 min by m3u8 # movurl = 'http://pl.youku.com/playlist/m3u8?' + query # print movurl # movurl = _http(url) movsegs = movdat['segs'][stype] rooturl = 'http://k.youku.com/player/getFlvPath/sid' segurls = [] for movseg in movsegs: # youku split stream file to seg segid = '{0}{1:02X}{2}'.format(fileid[0:8], int(movseg['no']), fileid[10:]) kstr = movseg['k'] segurl = '{0}/{1}_00/st/{2}/fileid/{3}?'.format( rooturl, sid, ftype, segid) new_ep = base64.b64encode( self.trans_e(self.f_code_2, sid + '_' + segid + '_' + token)) query = urllib.urlencode( dict(K=kstr, ctype=12, ev=1, oip=movdat['ip'], token=token, ep=new_ep)) segurl = segurl + query # print segurl rsp = urllib2.urlopen(segurl) rsegurl = rsp.geturl() segurls.append(rsegurl) # m3u8 = _http(movurl) # print m3u8 # segurls = re.findall('(http://.*)\?', m3u8) # lens = re.findall('EXTINF:([\d\.]+),', m3u8) # b = 0 # for a in lens: # b = b + float(a) # print b # print segurls # seen = set() # segurls = [x for x in segurls if x not in seen and not seen.add(x)] # print segurls movurl = 'stack://{0}'.format(' , '.join(segurls)) return movurl