Beispiel #1
0
 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
Beispiel #2
0
    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