Exemplo n.º 1
0
 def parse_cb(self, page, options):
     #page = content.decode('GBK').encode('UTF-8')
     page = convert_to_utf8(page)
     name_match = name_re.search(page)
     if not name_match:
         moonplayer.warn('Cannot get video name.')
         return
     self.name = name_match.group(1)
     
     if options & moonplayer.OPT_QL_SUPER:
         i = 5
     elif options & moonplayer.OPT_QL_HIGH:
         i = 3
     else:
         i = 2
     vlist = [None] * 6
     iid_match = iid_re.search(page)
     while iid_match:
         (pt, k) = iid_match.group(1, 2)
         pt = int(pt)
         if pt < 6:
             if vlist[pt] == None:
                 vlist[pt] = []
             vlist[pt].append(k)
         iid_match = iid_re.search(page, iid_match.end(0))
     while i >= 0:
         if vlist[i]:
             self.keys = vlist[i]
             self.result = []
             url = 'http://v2.tudou.com/f?id=' + self.keys[0]
             moonplayer.get_url(url, self.parse_keys, options)
             return
         i -= 1
     moonplayer.warn('Fail!')
Exemplo n.º 2
0
def search(keyword, page):
    keyword = keyword.replace(" ", "%20")
    url = "http://s.video.qq.com/search?comment=0&plat=2&otype=xml&query=%s&cur=%d&num=20&start=0&end=0" % (
        keyword,
        page - 1,
    )
    moonplayer.get_url(url, search_cb, None)
Exemplo n.º 3
0
def load_item_cb(page, url):
    result = {}
    match = name_re.search(page)
    if match:
        result["name"] = match.group(1)
    match = img_re.search(page)
    if match:
        result["image"] = match.group(1)
    match = date_re.search(page)
    if match:
        result["dates"] = [match.group(1)]
    match = alt_re.search(page)
    if match:
        result["alt_names"] = [match.group(1)]

    detail_div = page.split('<div class="detail">', 1)[-1].split("</div>")[0]
    match = summ_re.search(detail_div)
    if match:
        result["summary"] = match.group(1)
    else:
        match = summ2_re.search(detail_div)
        if match:
            result["summary"] = match.group(1)

    match = rating_re.search(page)
    if match:
        result["rating"] = float(match.group(1))

    result["source"] = list_links(page, "http://v.youku.com/v_show/id_")
    new_url = url.replace("/show_page/", "/show_episode/")
    moonplayer.get_url(new_url, load_item_cb2, result)
Exemplo n.º 4
0
def parse_cb(page, options):
    #page = content.decode('GBK').encode('UTF-8')
    page = convert_to_utf8(page)
    name_match = name_re.search(page)
    if not name_match:
        moonplayer.warn('Cannot get video name.')
        return
    name = name_match.group(1)

    if options & moonplayer.OPT_QL_SUPER:
        i = 5
    elif options & moonplayer.OPT_QL_HIGH:
        i = 3
    else:
        i = 2
    vlist = [None] * 6
    iid_match = iid_re.search(page)
    while iid_match:
        (pt, k) = iid_match.group(1, 2)
        pt = int(pt)
        if pt < 6:
            vlist[pt] = k
        iid_match = iid_re.search(page, iid_match.end(0))
    while i >= 0:
        if vlist[i]:
            url = 'http://v2.tudou.com/f?id=' + vlist[i]
            moonplayer.get_url(url, parse_cb2, (name, options))
            return
        i -= 1
    moonplayer.warn('Fail!')
Exemplo n.º 5
0
 def __init__(self, wid, aid):
     self.wid = wid
     self.aid = aid
     self.page = 1
     self.result = []
     url = album_url_fmt % (wid, aid, 1)
     moonplayer.get_url(url, self.parse_album_cb, None)
Exemplo n.º 6
0
def parse_cb(page, options):
    #page = content.decode('GBK').encode('UTF-8')
    page = convert_to_utf8(page)
    name_match = name_re.search(page)
    if not name_match:
        moonplayer.warn('Cannot get video name.')
        return
    name = name_match.group(1)
    
    if options & moonplayer.OPT_QL_SUPER:
        i = 5
    elif options & moonplayer.OPT_QL_HIGH:
        i = 3
    else:
        i = 2
    vlist = [None] * 6
    iid_match = iid_re.search(page)
    while iid_match:
        (pt, k) = iid_match.group(1, 2)
        pt = int(pt)
        if pt < 6:
            vlist[pt] = k
        iid_match = iid_re.search(page, iid_match.end(0))
    while i >= 0:
        if vlist[i]:
            url = 'http://v2.tudou.com/f?id=' + vlist[i]
            moonplayer.get_url(url, parse_cb2, (name, options))
            return
        i -= 1
    moonplayer.warn('Fail!')
Exemplo n.º 7
0
 def __init__(self, wid, aid):
     self.wid = wid
     self.aid = aid
     self.page = 1
     self.result = []
     url = album_url_fmt % (wid, aid, 1)
     moonplayer.get_url(url, self.parse_album_cb, None)
Exemplo n.º 8
0
 def parse_keys(self, options):
     self.current += 1
     self.fn = '%s.p%s.%s.mp4' % (self.vid, self.qid % 10000,
                                  str(self.current))
     url = 'http://vv.video.qq.com/getkey?format=%s&filename=%s&vid=%s&otype=json' % (
         self.qid, self.fn, self.vid)
     moonplayer.get_url(url, self.parse_keys_cb, options)
Exemplo n.º 9
0
 def parse_cb(self, page, options):
     #page = content.decode('GBK').encode('UTF-8')
     page = convert_to_utf8(page)
     name_match = name_re.search(page)
     if not name_match:
         moonplayer.warn('Cannot get video name.')
         return
     self.name = name_match.group(1)
     
     if options & moonplayer.OPT_QL_SUPER:
         i = 5
     elif options & moonplayer.OPT_QL_HIGH:
         i = 3
     else:
         i = 2
     vlist = [None] * 6
     iid_match = iid_re.search(page)
     while iid_match:
         (pt, k) = iid_match.group(1, 2)
         pt = int(pt)
         if pt < 6:
             if vlist[pt] == None:
                 vlist[pt] = []
             vlist[pt].append(k)
         iid_match = iid_re.search(page, iid_match.end(0))
     while i >= 0:
         if vlist[i]:
             self.keys = vlist[i]
             self.result = []
             url = 'http://v2.tudou.com/f?id=' + self.keys[0]
             moonplayer.get_url(url, self.parse_keys, options)
             return
         i -= 1
     moonplayer.warn('Fail!')
Exemplo n.º 10
0
def parse_cb2(page, msg):
    page = json_pre_process(page)
    page = json.loads(page)
    data = page[u'data']
    #try other quality
    try:
        if not data:
            moonplayer.warn('解析失败!换个清晰度试试?')
            return
        elif msg[2] & moonplayer.OPT_QL_SUPER and u'superVid' in data:
            newvid = str(data[u'superVid'])
        elif msg[2] & (moonplayer.OPT_QL_HIGH | moonplayer.OPT_QL_SUPER):
            newvid = str(data[u'highVid'])
        else:
            newvid = str(data[u'norVid'])
        if len(newvid) > 0 and newvid != msg[0] and newvid != '0':
            msg[0] = newvid
            url = 'http://hot.vrs.sohu.com/vrs_flash.action?out=0&g=8&r=1&vid=%s&plid=%s' % (msg[0],msg[1])
            moonplayer.get_url(url, parse_cb2, msg)
            return
    except KeyError:
        pass
    #parse
    vid = msg[0]
    su = data[u'su']
    ip = page[u'allot']
    name = data[u'tvName'].encode('UTF-8')
    result = []
    i = 0
    #make cdnlist
    cdnlist = ['http://%s/cdnList?new=%s&vid=%s' % (ip, new, vid) for new in su]
    data = {'result': [], 'cdnlist': cdnlist, 'name': name, 'options': msg[2]}
    moonplayer.get_url(cdnlist[0], parse_cdnlist, data)
Exemplo n.º 11
0
def parse_my_cb(page, msg):
    page = json_pre_process(page)
    page = json.loads(page)
    data = page[u'data']
    #try other quality
    try:
        if not data:
            moonplayer.warn('解析失败!换个清晰度试试?')
            return
        elif msg[1] & moonplayer.OPT_QL_SUPER and u'superVid' in data:
            newvid = str(data[u'superVid'])
        elif msg[1] & (moonplayer.OPT_QL_HIGH | moonplayer.OPT_QL_SUPER):
            newvid = str(data[u'highVid'])
        else:
            newvid = str(data[u'norVid'])
        if len(newvid) > 0 and newvid != msg[0] and newvid != '0':
            msg[0] = newvid
            url = 'http://my.tv.sohu.com/play/videonew.do?af=1&out=0&g=8&vid=' + newvid
            moonplayer.get_url(url, parse_my_cb, msg)
            return
    except KeyError:
        pass
    #parse
    vid = msg[0]
    su = data[u'su']
    ip = page[u'allot']
    name = data[u'tvName'].encode('UTF-8')
    result = []
    i = 0
    #make cdnlist
    cdnlist = [
        'http://%s/cdnList?new=%s&vid=%s' % (ip, new, vid) for new in su
    ]
    data = {'result': [], 'cdnlist': cdnlist, 'name': name, 'options': msg[1]}
    moonplayer.get_url(cdnlist[0], parse_cdnlist, data)
Exemplo n.º 12
0
 def parse_vurl(self, content, options):
     # Read urls of all qualities
     root = json.loads(content)
     vs = root[u'tkl'][0][u'vs']
     bids = [None] * 5
     for v in vs:
         bid = int(v[u'bid']) - 1
         if bid < 5:
             bids[bid] = ['http://data.video.qiyi.com/videos' + item[u'l'] for item in v[u'fs']]
     # Select quality
     if options & moonplayer.OPT_QL_SUPER:
         q = 3
     elif options & moonplayer.OPT_QL_HIGH:
         q = 1
     else:
         q = 0
     for i in xrange(q, -1, -1):
         if bids[i]:
             self.urls = bids[i]
             break
     if options & moonplayer.OPT_DOWNLOAD and bids[4]:
         if moonplayer.question('是否下载1080P版本?'):
             self.urls = bids[4]
     
     # Get video's key
     first_uid = self.urls[0].split('/')[-1].split('.')[0]
     self.suffix = str(self.urls[0].split('.')[-1])
     url = 'http://data.video.qiyi.com/' + first_uid + '.ts'
     moonplayer.get_url(url, self.parse_key, options)
Exemplo n.º 13
0
def parse(url, options):
    origin_url = url
    url = 'http://www.flvcd.com/parse.php?go=1&kw=' + origin_url
    if options & moonplayer.OPT_QL_SUPER:
        url += '&format=super'
    elif options & moonplayer.OPT_QL_HIGH:
        url += '&format=high'
    moonplayer.get_url(url, parse_cb, (options, origin_url))
Exemplo n.º 14
0
def library(is_movie, tp, page):
    if is_movie:
        url = 'http://www.youku.com/v_olist/c_96_g_' + tp + '_fe_1_o_6_p_' + str(
            page) + '.html'
    else:
        url = 'http://www.youku.com/v_olist/c_97_g_' + tp + '_o_6_p_' + str(
            page) + '.html'
    moonplayer.get_url(url, library_cb, None)
Exemplo n.º 15
0
def parse_cb(page, data):
    (options, url) = data
    result = parse_flvcd_page(page, None)
    if len(result) == 0:
        moonplayer.warn("Cannot parse bilibili's video!")
    elif options & moonplayer.OPT_DOWNLOAD and len(result) > 2:
        moonplayer.download(result, result[0])
    else:
        moonplayer.get_url(url, parse_danmaku_cb, (options, result))
Exemplo n.º 16
0
def search(args):
    start = (args['page'] - 1) * 20
    if 'key' in args:
        key = args['key']
        url = 'http://api.douban.com/v2/movie/search?q=%s&start=%i&count=20' % (key, start)
    else:
        tag = args['tag']
        url = 'http://api.douban.com/v2/movie/search?tag=%s&start=%i&count=20' % (tag, start)
    moonplayer.get_url(url, search_cb, None)
Exemplo n.º 17
0
def parse(url, options):
    if url.startswith('http://www.tudou.com/playlist/id/'):  #album
        url = 'http://www.tudou.com/plcover/coverPage/getIndexItems.html?page=1&pageSize=512&lid=' + url.split('/')[-2]
        moonplayer.get_url(url, parse_album_cb, None)
        
    elif url.startswith('http://www.tudou.com/listplay/') or url.startswith('http://www.tudou.com/programs/view/'):  #single video
        parser.feed(url, options)
        
    else:  #wrong url
        moonplayer.warn('Please input a valid tudou url.')
Exemplo n.º 18
0
def parse_album_cb(content, data):
    prefix = data[0]
    now_page = data[1]
    items = data[2]
    new_items = list_links(content, 'http://v.youku.com/v_show/id_')
    items += new_items
    if len(new_items) > 0:
        url = prefix + '_ascending_1_mode_pic_page_' + str(now_page+1) + '.html'
        moonplayer.get_url(url, parse_album_cb, (prefix, now_page+1, items))
    else:
        moonplayer.show_album(items)
Exemplo n.º 19
0
def search(args):
    start = (args['page'] - 1) * 20
    if 'key' in args:
        key = args['key']
        url = 'http://api.douban.com/v2/movie/search?q=%s&start=%i&count=20' % (
            key, start)
    else:
        tag = args['tag']
        url = 'http://api.douban.com/v2/movie/search?tag=%s&start=%i&count=20' % (
            tag, start)
    moonplayer.get_url(url, search_cb, None)
Exemplo n.º 20
0
def parse_cb(page, options):
    vid_match = vid_re.search(page)
    plid_match = plid_re.search(page)
    if vid_match and plid_match:
        vid = vid_match.group(1)
        plid = plid_match.group(1)
        msg = [vid, plid, options]
        url = 'http://hot.vrs.sohu.com/vrs_flash.action?out=0&g=8&r=1&vid=%s&plid=%s' % (msg[0], msg[1])
        moonplayer.get_url(url, parse_cb2, msg)
    else:
        moonplayer.warn('Fail')
Exemplo n.º 21
0
def parse_v_vid(page, options):
    data = json.loads(page)[u'data']
    name = data[u'name_cn'].encode('UTF-8') + '.mp4'
    hashid = str(data[u'hashid'])
    if options & moonplayer.OPT_QL_SUPER:
        p = 737280  # 720p
    elif options & moonplayer.OPT_QL_HIGH:
        p = 491520  # 480p
    else:
        p = 327680  # 320p
    url = 'http://jobsfe.funshion.com/query/v1/mp4/%s.json?bits=%i' % (hashid, p)
    moonplayer.get_url(url, parse_m_cb, (options, name))
Exemplo n.º 22
0
def search(args):
    if "key" in args:
        moonplayer.warn("Not supported.")
        return
    tag = args["tag"]
    country = args["country"]
    if tag == "全部":
        tag = ""
    if country == "全部":
        country = ""
    url = "http://www.youku.com/v_olist/c_97_g_%s_a_%s_s_1_d_2_pt_1_p_%i.html" % (tag, country, args["page"])
    moonplayer.get_url(url, search_cb, None)
Exemplo n.º 23
0
def parse_album_cb(content, data):
    prefix = data[0]
    now_page = data[1]
    items = data[2]
    new_items = list_links(content, 'http://v.youku.com/v_show/id_')
    items += new_items
    if len(new_items) > 0:
        url = prefix + '_ascending_1_mode_pic_page_' + str(now_page +
                                                           1) + '.html'
        moonplayer.get_url(url, parse_album_cb, (prefix, now_page + 1, items))
    else:
        moonplayer.show_album(items)
Exemplo n.º 24
0
def parse_series_cb(content, mov_url):
    links = []
    match = re2.search(content)
    if not match:
        moonplayer.get_url(mov_url, parse_movie_cb, None) #movie
        return
    while match:
        (name, url) = match.group(2, 1)
        links.append(name)
        links.append(url)
        match = re2.search(content, match.end(0))
    moonplayer.show_album(links)
Exemplo n.º 25
0
def parse_album2_cb(content, data):
    prefix = data[0]
    now_page = data[1]
    items = data[2]
    new_items = list_links(content, "http://v.youku.com/v_show/id_")
    items += new_items
    if len(new_items) > 0:
        url = prefix + "&cp=" + str(now_page + 1)
        print len(new_items), url
        moonplayer.get_url(url, parse_album2_cb, (prefix, now_page + 1, items))
    else:
        moonplayer.show_album(items)
Exemplo n.º 26
0
def parse_cb(page, options):
    vid_match = vid_re.search(page)
    plid_match = plid_re.search(page)
    if vid_match and plid_match:
        vid = vid_match.group(1)
        plid = plid_match.group(1)
        msg = [vid, plid, options]
        url = 'http://hot.vrs.sohu.com/vrs_flash.action?out=0&g=8&r=1&vid=%s&plid=%s' % (
            msg[0], msg[1])
        moonplayer.get_url(url, parse_cb2, msg)
    else:
        moonplayer.warn('Fail')
Exemplo n.º 27
0
def parse(url, options):
    if url.startswith('http://www.iqiyi.com/a_'):
        moonplayer.get_url(url, parse_a_cb, None)
    elif url.startswith('http://www.iqiyi.com/lib/m_'):
        moonplayer.get_url(url, parse_tv_cb, None)
    elif url.startswith('http://www.iqiyi.com/v_') or \
    url.startswith('http://www.iqiyi.com/w_') or \
    url.startswith('http://www.iqiyi.com/dianshiju/') or \
    url.startswith('http://www.iqiyi.com/dianying/'):
        parser.feed(url, options)
    else:
        moonplayer.warn('Wrong URL!')
Exemplo n.º 28
0
def parse(url, options):
    if url.startswith('http://www.tudou.com/playlist/id/'):  #album
        url = 'http://www.tudou.com/plcover/coverPage/getIndexItems.html?page=1&pageSize=512&lid=' + url.split(
            '/')[-2]
        moonplayer.get_url(url, parse_album_cb, None)

    elif url.startswith('http://www.tudou.com/listplay/') or url.startswith(
            'http://www.tudou.com/programs/view/'):  #single video
        moonplayer.get_url(url, parse_cb, options)

    else:  #wrong url
        moonplayer.warn('Please input a valid tudou url.')
Exemplo n.º 29
0
def parse_series_cb(content, mov_url):
    links = []
    match = re2.search(content)
    if not match:
        moonplayer.get_url(mov_url, parse_movie_cb, None)  #movie
        return
    while match:
        (name, url) = match.group(2, 1)
        links.append(name)
        links.append(url)
        match = re2.search(content, match.end(0))
    moonplayer.show_album(links)
Exemplo n.º 30
0
def search(args):
    if 'key' in args:
        url = 'http://www.soku.com/v?keyword=' + args['key']
        moonplayer.get_url(url, search_by_key_cb, None)
        return
    tag = args['tag']
    tag_id = tags_table[tag]
    country = args['country']
    country_id = countries_table[country]
    url = 'http://www.soku.com/channel/teleplaylist_0_%i_%i_1_%i.html' % \
           (tag_id, country_id, args['page'])
    moonplayer.get_url(url, search_cb, None)
Exemplo n.º 31
0
def search(args):
    if 'key' in args:
        url = 'http://www.soku.com/v?keyword=' + args['key']
        moonplayer.get_url(url, search_by_key_cb, None)
        return
    tag = args['tag']
    tag_id = tags_table[tag]
    country = args['country']
    country_id = countries_table[country]
    url = 'http://www.soku.com/channel/movielist_0_%i_%i_1_%i.html' % \
           (tag_id, country_id, args['page'])
    moonplayer.get_url(url, search_cb, None)
Exemplo n.º 32
0
 def parse_keys(self, content, options):
     root = ET.fromstring(content)
     i = len(self.result) / 2
     self.result.append('%s_%i.f4v' % (self.name, i))
     self.result.append(root.text)
     i += 1
     if i < len(self.keys):
         url = 'http://v2.tudou.com/f?id=' + self.keys[i]
         moonplayer.get_url(url, self.parse_keys, options)
     elif options & moonplayer.OPT_DOWNLOAD:
         moonplayer.download(self.result, self.name + '.f4v')
     else:
         moonplayer.play(self.result)
Exemplo n.º 33
0
def parse(url, options):
    match = album_re.search(url) # albums
    if match:
        (wid, aid) = match.group(1, 2)
        AlbumParser(wid, aid)
        return
    match = enid_re.search(url) # videos
    if match and '56.com' in url:
        enid = match.group(1)
        url = 'http://vxml.56.com/json/' + enid + '/?src=site'
        moonplayer.get_url(url, parse_cb, options)
        return
    moonplayer.warn('Wrong url.')
Exemplo n.º 34
0
 def parse_keys(self, content, options):
     root = ET.fromstring(content)
     i = len(self.result) / 2
     self.result.append('%s_%i.f4v' % (self.name, i))
     self.result.append(root.text)
     i += 1
     if i < len(self.keys):
         url = 'http://v2.tudou.com/f?id=' + self.keys[i]
         moonplayer.get_url(url, self.parse_keys, options)
     elif options & moonplayer.OPT_DOWNLOAD:
         moonplayer.download(self.result, self.name + '.f4v')
     else:
         moonplayer.play(self.result)
Exemplo n.º 35
0
def parse(url, options):
    match = album_re.search(url)  # albums
    if match:
        (wid, aid) = match.group(1, 2)
        AlbumParser(wid, aid)
        return
    match = enid_re.search(url)  # videos
    if match and '56.com' in url:
        enid = match.group(1)
        url = 'http://vxml.56.com/json/' + enid + '/?src=site'
        moonplayer.get_url(url, parse_cb, options)
        return
    moonplayer.warn('Wrong url.')
Exemplo n.º 36
0
def search(args):
    if 'key' in args:
        moonplayer.warn('Not supported.')
        return
    tag = args['tag']
    country = args['country']
    if tag == '全部':
        tag = ''
    if country == '全部':
        country = ''
    url = 'http://www.youku.com/v_olist/c_96_g_%s_a_%s_s_1_d_2_pt_1_p_%i.html' % \
           (tag, country, args['page'])
    moonplayer.get_url(url, search_cb, None)
Exemplo n.º 37
0
def parse_cdnlist(page, data):
    result = data['result']
    cdnlist = data['cdnlist']
    url = str(json.loads(page)[u'url'])
    i = len(result) / 2
    result.append(data['name'] + '_' + str(i) + '.mp4')
    result.append(url)
    if i < len(cdnlist):
        moonplayer.get_url(cdnlist[i], parse_cdnlist, data)
    elif data['options'] & moonplayer.OPT_DOWNLOAD:
        moonplayer.download(result, data['name'] + '.mp4')
    else:
        moonplayer.play(result)
Exemplo n.º 38
0
def parse_cdnlist(page, data):
    result = data['result']
    cdnlist = data['cdnlist']
    url = str(json.loads(page)[u'url'])
    i = len(result) / 2
    result.append(data['name'] + '_' + str(i) + '.mp4') 
    result.append(url)
    if i < len(cdnlist):
        moonplayer.get_url(cdnlist[i], parse_cdnlist, data)
    elif data['options'] & moonplayer.OPT_DOWNLOAD:
        moonplayer.download(result, data['name'] + '.mp4')
    else:
        moonplayer.play(result)
Exemplo n.º 39
0
 def parse_final_url(self, content, options):
     i = len(self.result) / 2
     self.result.append('%s_%i.mp4' % (self.name, i))
     self.result.append(str(json.loads(content)['l']))
     i += 1
     if i < len(self.urls):  # Parse next final url
         moonplayer.get_url(self.urls[i], self.parse_final_url, options)
     elif options & moonplayer.OPT_DOWNLOAD:
         moonplayer.download(self.result, self.name + '.mp4')
     else:
         if len(self.urls) > 2:
             moonplayer.warn('本视频较长,爱奇艺视频地址10分钟变化一次,建议下载后播放,避免播放到一半时下载地址失效!')
         moonplayer.play(self.result)
Exemplo n.º 40
0
def search(args):
    if 'key' in args:
        moonplayer.warn('Not supported.')
        return
    tag = args['tag']
    country = args['country']
    if tag == '全部':
        tag = ''
    if country == '全部':
        country = ''
    url = 'http://www.youku.com/v_olist/c_96_g_%s_a_%s_s_1_d_2_pt_1_p_%i.html' % \
           (tag, country, args['page'])
    moonplayer.get_url(url, search_cb, None)
Exemplo n.º 41
0
def parse_cb(page, options):
    # Check errors
    try:
        data = json.loads(page)['data'][0]
    except:
        moonplayer.warn('Video not found!')
        return
    if 'error' in data:
        moonplayer.warn('Error: ' + data['error'])
        return
    
    # Get title, ep, ip, vid
    title = data['title'].encode('utf-8')
    ep = data['ep']
    ip = data['ip']
    vid = data['vidEncoded']
    # Select video quality
    try:
        if options & moonplayer.OPT_QL_SUPER and 'hd2' in data['streamsizes']:
            streamtype = 'hd2'
            streamsize = data['streamsizes']['hd2']
        elif options & (moonplayer.OPT_QL_SUPER|moonplayer.OPT_QL_HIGH) and \
        'mp4' in data['streamsizes']:
            streamtype = 'mp4'
            streamsize = data['streamsizes']['mp4']
        else:
            streamtype = 'flv'
            streamsize = data['streamsizes']['flv']
    except:
        if options & moonplayer.OPT_QL_SUPER and 'hd2' in data['streamtypes_o']:
            streamtype = 'hd2'
        elif options & (moonplayer.OPT_QL_SUPER|moonplayer.OPT_QL_HIGH) and \
        'mp4' in data['streamtypes_o']:
            streamtype = 'mp4'
        else:
            streamtype = 'flv'
        streamsize = 0
    new_ep, sid, token = generate_ep(vid, ep)
    m3u8_url = 'http://pl.youku.com/playlist/m3u8?ctype=12\
    &ep=%s\
    &ev=1\
    &keyframe=1\
    &oip=%i\
    &sid=%s\
    &token=%s\
    &ts=%i\
    &type=%s\
    &vid=%s' % (new_ep, ip, sid, token, int(time.time()), streamtype, vid)
    m3u8_url = m3u8_url.replace(' ', '')
    moonplayer.get_url(m3u8_url, parse_m3u8_cb, (options, title))
Exemplo n.º 42
0
def parse(url, options):
    #albums
    if url.startswith('http://www.youku.com/playlist_show/'):
        prefix = url[0:-5]
        moonplayer.get_url(url, parse_album_cb, (prefix, 1, []))
        return
    #details
    elif url.startswith('/detail/show/'):
        url = 'http://www.soku.com' + url
        moonplayer.get_url(url, parse_details_cb, None)
        return
    #movies or tv series
    elif url.startswith('http://www.youku.com/show_page/id_'):
        url2 = url.replace('/show_page/', '/show_episode/')
        moonplayer.get_url(url2, parse_series_cb, url)
        return
    #single video
    match = id_re.match(url)
    if not match:
        moonplayer.warn('Please input a valid youku url.')
        return
    url = 'http://www.flvcd.com/parse.php?kw=' + url
    if options & moonplayer.OPT_QL_SUPER:
        url += '&format=super'
    elif options & moonplayer.OPT_QL_HIGH:
        url += '&format=high'
    moonplayer.get_url(url, parse_cb, options)
Exemplo n.º 43
0
 def parse_final_url(self, content, options):
     i = len(self.result) / 2
     self.result.append('%s_%i.mp4' % (self.name, i))
     self.result.append(str(json.loads(content)['l']))
     i += 1
     if i < len(self.urls):  # Parse next final url
         moonplayer.get_url(self.urls[i], self.parse_final_url, options)
     elif options & moonplayer.OPT_DOWNLOAD:
         moonplayer.download(self.result, self.name + '.mp4')
     else:
         if len(self.urls) > 2:
             moonplayer.warn(
                 '本视频较长,爱奇艺视频地址10分钟变化一次,建议下载后播放,避免播放到一半时下载地址失效!')
         moonplayer.play(self.result)
Exemplo n.º 44
0
def parse(url, options):
    # albums
    if url.startswith("http://www.youku.com/playlist_show/"):
        prefix = url.split(".html")[0]
        moonplayer.get_url(url, parse_album_cb, (prefix, 1, []))
        return
    elif url.startswith("/search_playlistdetail?"):
        prefix = url = "http://www.soku.com" + url
        moonplayer.get_url(url, parse_album2_cb, (prefix, 1, []))
        return
    # details
    elif url.startswith("/detail/show/"):
        url = "http://www.soku.com" + url
        moonplayer.get_url(url, parse_details_cb, None)
        return
    # movies or tv series
    elif url.startswith("http://www.youku.com/show_page/id_"):
        load_item(url)
        return
    # single video
    match = id_re.match(url)
    if not match:
        moonplayer.warn("Please input a valid youku url.")
        return
    url = "http://www.flvcd.com/parse.php?go=1&kw=" + url
    if options & moonplayer.OPT_QL_SUPER:
        url += "&format=super"
    elif options & moonplayer.OPT_QL_HIGH:
        url += "&format=high"
    print url
    moonplayer.get_url(url, parse_cb, options)
Exemplo n.º 45
0
def parse(url, options):
    #albums
    if url.startswith('http://www.youku.com/playlist_show/'):
        prefix = url[0:-5]
        moonplayer.get_url(url, parse_album_cb, (prefix, 1, []))
        return
    #details
    elif url.startswith('/detail/show/'):
        url = 'http://www.soku.com' + url
        moonplayer.get_url(url, parse_details_cb, None)
        return
    #movies or tv series
    elif url.startswith('http://www.youku.com/show_page/id_'):
        url2 = url.replace('/show_page/', '/show_episode/')
        moonplayer.get_url(url2, parse_series_cb, url)
        return
    #single video
    match = id_re.match(url)
    if not match:
        moonplayer.warn('Please input a valid youku url.')
        return
    url = 'http://www.flvcd.com/parse.php?kw=' + url
    if options & moonplayer.OPT_QL_SUPER:
        url += '&format=super'
    elif options & moonplayer.OPT_QL_HIGH:
        url += '&format=high'
    moonplayer.get_url(url, parse_cb, options)
Exemplo n.º 46
0
 def parse_vid(self, content, options):
     name_match = name_re.search(content)
     if name_match:
         self.name = name_match.group(1)
     else:
         self.name = '未知视频名称'
     tvid_match = tvid_re.search(content)
     vid_match = vid_re.search(content)
     if tvid_match and vid_match:
         tvid = tvid_match.group(1)
         vid = vid_match.group(1)
         url = 'http://cache.video.qiyi.com/vd/%s/%s/' % (tvid, vid)
         moonplayer.get_url(url, self.parse_vurl, options)
     else:
         moonplayer.warn('Fail!')
Exemplo n.º 47
0
def parse_cb(page, data):
    options = data[0]
    url = data[1]
    result = parse_flvcd_page(page, None)
    if len(result) == 0:
        moonplayer.warn('Cannot parse this video:\n' + url)
        
    elif options & moonplayer.OPT_DOWNLOAD:
        if len(result) == 2: # single clip
            moonplayer.download(result)
        else:
            moonplayer.download(result, result[0])
    
    else:
        moonplayer.get_url(url, parse_danmaku_cb, result)
Exemplo n.º 48
0
    def parse_vms(self, content, options):
        info = json.loads(content)
        if info['code'] != 'A000000':
            moonplayer.warn('Code Error')
            return
        if info["data"]['vp']["tkl"] == '':
            moonplayer.warn('Error: empty data.')
            return
        # Read urls of all qualities
        vs = info["data"]["vp"]["tkl"][0]["vs"]
        bids = [None] * 5
        for v in vs:
            bid = int(v[u'bid']) - 1
            if bid < 5 and bid >= 0:
                bids[bid] = v['fs']
                if not v["fs"][0]["l"].startswith("/"):
                    tmp = self.getVrsEncodeCode(v["fs"][0]["l"])
                    if tmp.endswith('mp4'):
                        bids[bid] = v["flvs"]
        # Select quality
        if options & moonplayer.OPT_QL_SUPER:
            q = 3
        elif options & moonplayer.OPT_QL_HIGH:
            q = 1
        else:
            q = 0
        for i in xrange(q, -1, -1):
            if bids[i]:
                self.video_links = bids[i]
                break
        if options & moonplayer.OPT_DOWNLOAD and bids[4]:
            if moonplayer.question('是否下载1080P版本?'):
                self.video_links = bids[4]

        # Get video's key
        self.urls = []
        self.vlinks = []
        self.key_roots = []
        self.info = info
        for i in self.video_links:
            vlink = i['l']
            if not vlink.startswith('/'):
                vlink = self.getVrsEncodeCode(vlink)
            self.vlinks.append(vlink)
            self.key_roots.append(vlink.split("/")[-1].split(".")[0])
        url = "http://data.video.qiyi.com/t?tn=" + str(random())
        moonplayer.get_url(url, self.parse_key, options)
Exemplo n.º 49
0
 def parse_vms(self, content, options):
     info = json.loads(content)
     if info['code'] != 'A000000':
         moonplayer.warn('Code Error')
         return
     if info["data"]['vp']["tkl"]=='':
         moonplayer.warn('Error: empty data.')
         return
     # Read urls of all qualities
     vs = info["data"]["vp"]["tkl"][0]["vs"]
     bids = [None] * 5
     for v in vs:
         bid = int(v[u'bid']) - 1
         if bid < 5 and bid >= 0:
             bids[bid] = v['fs']
             if not v["fs"][0]["l"].startswith("/"):
                 tmp = self.getVrsEncodeCode(v["fs"][0]["l"])
                 if tmp.endswith('mp4'):
                     bids[bid] = v["flvs"]
     # Select quality
     if options & moonplayer.OPT_QL_SUPER:
         q = 3
     elif options & moonplayer.OPT_QL_HIGH:
         q = 1
     else:
         q = 0
     for i in xrange(q, -1, -1):
         if bids[i]:
             self.video_links = bids[i]
             break
     if options & moonplayer.OPT_DOWNLOAD and bids[4]:
         if moonplayer.question('是否下载1080P版本?'):
             self.video_links = bids[4]
     
     # Get video's key
     self.urls = []
     self.vlinks = []
     self.key_roots = []
     self.info = info
     for i in self.video_links:
         vlink = i['l']
         if not vlink.startswith('/'):
             vlink = self.getVrsEncodeCode(vlink)
         self.vlinks.append(vlink)
         self.key_roots.append(vlink.split("/")[-1].split(".")[0])
     url = "http://data.video.qiyi.com/t?tn=" + str(random())
     moonplayer.get_url(url, self.parse_key, options)
Exemplo n.º 50
0
    def parse_key(self, content, options):
        time = json.loads(content)["t"]
        t = str(int(floor(int(time) / (10 * 60.0))))
        tp = ")(*&^flash@#$%a"  #magic from swf
        for i in xrange(len(self.key_roots)):
            key = hashlib.new("md5", t + tp + self.key_roots[i]).hexdigest()
            baseurl = self.info["data"]["vp"]["du"].split("/")
            baseurl.insert(-1, key)
            url = "/".join(baseurl) + self.vlinks[i] + \
                '?su=' + self.uid + \
                '&qyid=' + uuid4().hex + \
                '&client=&z=&bt=&ct=&tn=' + str(randint(10000,20000))
            self.urls.append(url)

        # Get final urls
        self.result = []
        moonplayer.get_url(self.urls[0], self.parse_final_url, options)
Exemplo n.º 51
0
    def parse_cb(self, page, options):
        #page = content.decode('GBK').encode('UTF-8')
        page = convert_to_utf8(page)
        name_match = name_re.search(page)
        if not name_match:
            moonplayer.warn('Cannot get video name.')
            return
        self.name = name_match.group(1)

        if options & moonplayer.OPT_QL_1080P:
            i = 6
        if options & moonplayer.OPT_QL_SUPER:
            i = 5
        elif options & moonplayer.OPT_QL_HIGH:
            i = 3
        else:
            i = 2
        vlist = [None] * 7
        iid_match = iid_re.search(page)
        vcode_match = vcode_re.search(page)

        # Link to youku
        if vcode_match and not iid_match:
            url = 'http://v.youku.com/v_show/id_%s.html' % vcode_match.group(1)
            flvcd_parser.parse(url, options)
            return

        while iid_match:
            (pt, k) = iid_match.group(1, 2)
            pt = int(pt)
            if pt == 99:  # Real quality
                pt = 6
            if pt <= 6:
                if vlist[pt] == None:
                    vlist[pt] = []
                vlist[pt].append(k)
            iid_match = iid_re.search(page, iid_match.end(0))
        while i >= 0:
            if vlist[i]:
                self.keys = vlist[i]
                self.result = []
                url = 'http://v2.tudou.com/f?id=' + self.keys[0]
                moonplayer.get_url(url, self.parse_keys, options)
                return
            i -= 1
        moonplayer.warn('Fail!')
Exemplo n.º 52
0
    def parse_cb(self, page, options):
        match = name_re.search(page)
        if not match:
            moonplayer.warn('Cannot get the video name!')
            return
        self.name = match.group(1)
        if self.name.isdigit():
            match = cover_re.search(page)
            if match:
                self.name = match.group(1) + '-' + self.name

        match = vid_re.search(page)
        if match:
            self.vid = match.group(1)
            url = 'http://vv.video.qq.com/getinfo?otype=json&vids=' + self.vid
            moonplayer.get_url(url, self.parse_cb2, options)
        else:
            moonplayer.warn('Cannot find the vid of this video.')
Exemplo n.º 53
0
def parse_subject(page, vid):
    result = []
    try:
        mults = json.loads(page)[u'data'][u'fsps'][u'mult']
    except KeyError:
        url = 'http://www.fun.tv/vplay/g-' + vid
        moonplayer.get_url(url, parse_subject2, vid)
        return
    for mult in mults:
        name = 'unknown'
        try:
            name = mult[u'name'].encode('UTF-8')
            name = mult[u'full'].encode('UTF-8')
        except KeyError:
            pass
        url = 'http://www.fun.tv' + str(mult[u'url'])
        result.append(name)
        result.append(url)
    moonplayer.show_album(result)
Exemplo n.º 54
0
def parse_cb(page, data):
    options = data[0]
    url = data[1]
    match = cantonese_re.search(page)
    if match and not '_lang=1' in moonplayer.final_url:
        if moonplayer.question('是否解析为粤语版?'):
            url = match.group(1)
            if not url.startswith('http://'):
                url = 'http://www.flvcd.com/' + url
            url += '&go=1'
            moonplayer.get_url(url, parse_cb, data)
            return
    result = parse_flvcd_page(page, None)
    if len(result) == 0:
        moonplayer.warn('Cannot parse this video:\n' + url)
    elif options & moonplayer.OPT_DOWNLOAD:
        moonplayer.download(result, result[0])
    else:
        moonplayer.play(result)