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.items() 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 = urllib.request.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.items() 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.parse.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