From 0d6d526343c3036912ab44ccd7fa786b9b7d3d44 Mon Sep 17 00:00:00 2001 From: yfang1644 Date: Sun, 15 Mar 2020 23:05:30 +0800 Subject: [PATCH] letv --- addons.xml | 2 +- addons.xml.md5 | 2 +- plugin.video.funshion/lib/funshion.py | 49 ++++++++---------- plugin.video.letv/addon.xml | 2 +- plugin.video.letv/default.py | 43 ++++++++------- ...-2.2.0.zip => plugin.video.letv-2.2.1.zip} | Bin 45799 -> 45778 bytes 6 files changed, 47 insertions(+), 51 deletions(-) rename plugin.video.letv/{plugin.video.letv-2.2.0.zip => plugin.video.letv-2.2.1.zip} (88%) diff --git a/addons.xml b/addons.xml index 294ea9c..208e917 100644 --- a/addons.xml +++ b/addons.xml @@ -2,7 +2,7 @@ diff --git a/addons.xml.md5 b/addons.xml.md5 index 4d0e97d..ee0e0ad 100644 --- a/addons.xml.md5 +++ b/addons.xml.md5 @@ -1 +1 @@ -159508192198d4676b6961029e56db69 addons.xml +26e27f5ffa972871c830d92f0681e567 addons.xml diff --git a/plugin.video.funshion/lib/funshion.py b/plugin.video.funshion/lib/funshion.py index 4472006..e565268 100644 --- a/plugin.video.funshion/lib/funshion.py +++ b/plugin.video.funshion/lib/funshion.py @@ -23,7 +23,7 @@ def mapping(num, base): return res class Funshion(): - stream_types = ['sdvd', 'sdvd_h265', 'hd', 'hd_h265', + stream_types = ['sdvd', 'sdvd_h265', 'hd', 'hd_h265', 'shd', 'dvd', 'dvd_h265', 'tv', 'tv_h265' ] a_mobile_url = 'http://m.fun.tv/implay/?mid=302555' @@ -162,44 +162,37 @@ def video_from_vid(self, vid, **kwargs): meta = loads(get_html(url)) - if meta['retcode'] != '404': - streams = meta['playlist'] - maxlevel = len(streams) - level = min(level, maxlevel-1) - stream = streams[level] - s = stream['playinfo'][0] - clear_info = self.dec_playinfo(s, self.coeff) - base_url = self.get_cdninfo(clear_info['hashid']) - token = base64.b64encode(clear_info['token'].encode('utf8')) - video_url = '{}?token={}&vf={}'.format(base_url, token, s['vf']) - else: + if meta['retcode'] == '404': meta = loads(get_html('https://api1.fun.tv/ajax/new_playinfo/video/%s' % vid)) streams = meta['data']['files'] maxlevel = len(streams) level = min(level, maxlevel-1) s = streams[level] - clear_info = self.dec_playinfo(s, self.coeff) - base_url = self.get_cdninfo(clear_info['hashid']) - token = base64.b64encode(s['token'].encode('utf8')) - video_url = '{}?token={}&vf={}'.format(base_url, token, s['vf']) + else: + streams = meta['playlist'] + maxlevel = len(streams) + level = min(level, maxlevel-1) + stream = streams[level] + s = stream['playinfo'][0] + clear_info = self.dec_playinfo(s, self.coeff) + base_url = self.get_cdninfo(clear_info['hashid']) + token = base64.b64encode(clear_info['token'].encode('utf-8')) + video_url = '{}?token={}&vf={}'.format(base_url, token, s['vf']) return [video_url] # Logics for single video until drama #---------------------------------------------------------------------- def video_from_url(self, url, **kwargs): - vid = r1(r'https?://www.fun.tv/vplay/v-(\w+)', url) - if vid: - return self.video_from_vid(vid, single_video=True, **kwargs) - else: - vid = r1(r'https?://www.fun.tv/vplay/.*v-(\w+)', url) - if not vid: - epid = r1(r'https?://www.fun.tv/vplay/.*g-(\w+)', url) - url = 'http://pm.funshion.com/v5/media/episode?id={}&cl=mweb&uc=111'.format(epid) - html = get_html(url) - meta = loads(html) - vid = meta['episodes'][0]['id'] - return self.video_from_vid(vid, **kwargs) + vid = r1(r'https?://www.fun.tv/vplay/.*v-(\w+)', url) + if not vid: + epid = r1(r'https?://www.fun.tv/vplay/.*g-(\w+)', url) + url = 'http://pm.funshion.com/v5/media/episode?id={}&cl=mweb&uc=111'.format(epid) + html = get_html(url) + meta = loads(html) + vid = meta['episodes'][0]['id'] # pick the first video in episodes + + return self.video_from_vid(vid, **kwargs) site = Funshion() diff --git a/plugin.video.letv/addon.xml b/plugin.video.letv/addon.xml index b49b055..df35e66 100644 --- a/plugin.video.letv/addon.xml +++ b/plugin.video.letv/addon.xml @@ -1,7 +1,7 @@ diff --git a/plugin.video.letv/default.py b/plugin.video.letv/default.py index 1b52b2c..ce3a9f2 100644 --- a/plugin.video.letv/default.py +++ b/plugin.video.letv/default.py @@ -9,6 +9,7 @@ from common import get_html from lib.letv import video_from_vid, quote_plus +GBANNER = '[COLOR green]%s[/COLOR]' plugin = Plugin() url_for = plugin.url_for @@ -45,21 +46,6 @@ def httphead(url): TRAILER_API = 'http://d.api.m.le.com/detail/getVideoTrailer?pid={}&platform=pc' EPISODES_API = 'http://d.api.m.le.com/detail/episode?pid={}&pagesize=300&platform=pc' -############################################################################ -def previous_page(endpoint, page, total_page, **kwargs): - if int(page) > 1: - page = str(int(page) - 1) - return [{'label': u'上一页 - {0}/{1}'.format(page, str(total_page)), 'path': plugin.url_for(endpoint, page=page, **kwargs)}] - else: - return [] - -def next_page(endpoint, page, total_page, **kwargs): - if int(page) < int(total_page): - page = str(int(page) + 1) - return [{'label': u'下一页 - {0}/{1}'.format(page, str(total_page)), 'path': plugin.url_for(endpoint, page=page, **kwargs)}] - else: - return [] - @plugin.route('/filter//') def filter(url): html = get_html(url) @@ -89,7 +75,14 @@ def filter(url): idx = i break - sel = dialog.select(title, [x.text for x in li]) + content = [] + for x in li: + if x.get('class'): + content += [GBANNER % re.sub('\r|\n|\t| ', '', x.text)] + else: + content += [x.text] + + sel = dialog.select(title, content) if sel >= 0: try: @@ -254,14 +247,19 @@ def videolist(url, page): }) - items += previous_page('videolist', page, 300, url=url) + if int(page) > 1: + p = int(page) - 1 + items.append({ + 'label': '上一页 - {0}'.format(p), + 'path': plugin.url_for('videolist', url=url, page=p) + }) newpage = '&pn=' + str(page) frontUrl = re.sub('&pn=\d+', newpage, frontUrl) html = get_html(frontUrl) - jsdata = loads(html)['data']['arr'] - for item in jsdata: + jsdata = loads(html)['data'] + for item in jsdata['arr']: aid = item.get('aid') #album ID eps = item.get('episodes', 0); sub = item.get('subname') @@ -288,7 +286,12 @@ def videolist(url, page): 'info': {'title': title, 'plot': item['description']}, }) - items += next_page('videolist', page, 300, url=url) + if jsdata['more'] == True: + p = int(page) + 1 + items.append({ + 'label': '下一页 - {0}'.format(p), + 'path': plugin.url_for('videolist', url=url, page=p) + }) return items diff --git a/plugin.video.letv/plugin.video.letv-2.2.0.zip b/plugin.video.letv/plugin.video.letv-2.2.1.zip similarity index 88% rename from plugin.video.letv/plugin.video.letv-2.2.0.zip rename to plugin.video.letv/plugin.video.letv-2.2.1.zip index 4f500d7e1cedc167d728ada6d80746367776ed43..8717d691fb54264b3057b0c2c7433e1b4518ac19 100644 GIT binary patch delta 4032 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