Пример #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.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
Пример #2
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.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
Пример #3
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.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
Пример #4
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.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
Пример #5
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.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
Пример #6
0
def _get_action_dict():
    """ Map actions to 'category name'->'action id'->'action name' dict"""
    d = OrderedDict()
    for elem in _actions:
        category = elem[0]
        actions = elem[1][0::2]
        names = elem[1][1::2]
        d[category] = OrderedDict(zip(actions, names))

    d["Windows"] = _get_activate_window_actions()
    d["Add-ons"] = _get_run_addon_actions()
    return d
Пример #7
0
 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()]
Пример #8
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']
        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
Пример #9
0
 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()]
Пример #10
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}".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
Пример #11
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}".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
Пример #12
0
def action_dict(actions, action_names):
    """Create dict of action->name sorted by name"""
    return OrderedDict(sorted(zip(actions, action_names), key=lambda t: t[1]))
Пример #13
0
        if 'addons' in res:
            addons.extend([a for a in res['addons'] if a['enabled']])
    actions = ['runaddon(%s)' % a['addonid'] for a in addons]
    names = ['Launch %s' % a['name'] for a in addons]
    return action_dict(actions, names)


def _get_activate_window_actions():
    all_windows = _activate_window + _windows[2:] #don't include "global"
    actions = ["activatewindow(%s)" % w_id for w_id in all_windows[0::2]]
    names = ["Open %s" % w for w in all_windows[1::2]]
    return action_dict(actions, names)


def _get_action_dict():
    """ Map actions to 'category name'->'action id'->'action name' dict"""
    d = OrderedDict()
    for elem in _actions:
        category = elem[0]
        actions = elem[1][0::2]
        names = elem[1][1::2]
        d[category] = OrderedDict(zip(actions, names))

    d["Windows"] = _get_activate_window_actions()
    d["Add-ons"] = _get_run_addon_actions()
    return d


ACTIONS = _get_action_dict()
WINDOWS = OrderedDict(zip(_windows[0::2], _windows[1::2]))
Пример #14
0
def showmovie(url):
    """
    show movie list
    """
    #filter key, e.g. 'http://www.youku.com/v_showlist/c90'
    urlsps = re.findall(r'(.*?/[a-z]_*\d+)', url)
    key = urlsps[0]
    #filter movie by filters
    if 'change' in url:
        url = key
        for k, v in filters[key].iteritems():
            if '筛选' in k: continue
            fts = [m[1] for m in v]
            selitem = dialog.select(k, fts)
            if selitem is -1: return
            url = '{0}{1}'.format(url, v[selitem][0])
        url = '{0}.html'.format(url)
        print '*' * 80, url

    if url in epcache: return epcache[url]

    result = _http(url)

    #get catalog filter list, filter will be cache
    #filters item example:
    #   key:'http://www.youku.com/v_olist/c_97'
    #   value: '{'地区':('_a_大陆', '大陆', ...)}
    if key not in filters:
        filterstr = re.search(r'yk-filter-panel">(.*?)yk-filter-handle',
                              result, re.S)
        filtertypes = re.findall(r'<label>(.*?)<.*?<ul>(.*?)</ul>',
                                 filterstr.group(1), re.S)
        types = OrderedDict()
        for filtertype in filtertypes[1:]:
            typeitems = re.findall(r'(_*[a-z]+_*[^_]+?).html">(.*?)</a>',
                                   filtertype[1], re.S)
            typeitems.insert(0, ('', '全部'))
            types[filtertype[0]] = typeitems
        yksorts = re.findall(r'yk-sort-item(.*?)/ul>', result, re.S)
        for seq, yksort in enumerate(yksorts):
            if 'v_olist' in key:
                sorts = re.findall(r'(_s_\d+)(_d_\d+).*?>(.*?)</a>', yksort)
                types['排序{0}'.format(seq)] = [(s[seq], s[2]) for s in sorts]
            else:
                sorts = re.findall(r'(d\d+)(s\d+).*?>(.*?)</a>', yksort)
                types['排序{0}'.format(seq)] = [(s[not seq], s[2])
                                              for s in sorts]
        filters[key] = types

    #get movie list
    mstr = r'{0}{1}{2}'.format('[vp]-thumb">\s+<img src="(.*?)" alt="([^>]+)"',
                               '.*?"[pv]-thumb-tag[lr]b"><.*?">([^<]+?)',
                               '<.*?"[pv]-link">\s+<a href="(.*?)"')
    movies = re.findall(mstr, result, re.S)
    #deduplication movie item
    #movies = [(k,v) for k,v in OrderedDict(movies).iteritems()]

    #add pre/next item
    pagestr = re.search(r'class="yk-pages">(.*?)</ul>', result, re.S)
    if pagestr:
        pre = re.findall(r'class="prev" title="(.*?)">\s*<a href="(.*?)"',
                         pagestr.group(1))
        if pre:
            movies.append(('', pre[0][0], '',
                           'http://www.youku.com{0}'.format(pre[0][1])))
        nex = re.findall(r'class="next" title="(.*?)">\s*<a href="(.*?)"',
                         pagestr.group(1))
        if nex:
            movies.append(('', nex[0][0], '',
                           'http://www.youku.com{0}'.format(nex[0][1])))
        cpg = re.findall(r'class="current">.*?>(\d+)<', pagestr.group(1))
        tpg = re.findall(r'class="pass".*?>(\d+)<', pagestr.group(1), re.S)

        #add fliter item
        pagetitle = '【第{0}页/共{1}页】【[COLOR FFFF0000]过滤条件选择)[/COLOR]】'
        movies.insert(0, ('', pagetitle.format(
            cpg[0], tpg[0] if tpg else '1'), '', '{0}change'.format(url)))
    maptuple = (('olist', 'showmovie'), ('showlist', 'showmovie'),
                ('show_page', 'showepisode'), ('v_show/', 'playmovie'))
    menus = []
    #0 is thunmnailimg, 1 is title, 2 is status, 3 is url
    for seq, m in enumerate(movies):
        routeaddr = filter(lambda x: x[0] in m[3], maptuple)
        menus.append({
            'label':
            '{0}. {1}【{2}】'.format(seq, m[1], m[2]).decode('utf-8')
            if m[0] else m[1].decode('utf-8'),
            'path':
            plugin.url_for(routeaddr[0][1], url=m[3]),
            'thumbnail':
            m[0],
        })
    epcache[url] = menus
    return menus
Пример #15
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}'
                     '/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
Пример #16
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}'
                     '/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