diff --git a/addons.xml b/addons.xml index 8f3d2c8..8f33194 100644 --- a/addons.xml +++ b/addons.xml @@ -243,7 +243,7 @@ @@ -531,7 +531,7 @@ @@ -854,7 +854,7 @@ + version="2.0.1"> diff --git a/addons.xml.md5 b/addons.xml.md5 index 5013a83..b631118 100644 --- a/addons.xml.md5 +++ b/addons.xml.md5 @@ -1 +1 @@ -684fb49b798b75b91afb7c96f6511e3f addons.xml +8d6bccd735b3457fb3ea297939bb8c86 addons.xml diff --git a/plugin.video.bilivideo/lib/bilibili.py b/plugin.video.bilivideo/lib/bilibili.py index 848e51c..c46b243 100644 --- a/plugin.video.bilivideo/lib/bilibili.py +++ b/plugin.video.bilivideo/lib/bilibili.py @@ -362,7 +362,6 @@ def get_video_urls(self, cid, qn=0): chksum = hashlib.md5(compact_bytes(params_str + SECRETKEY, 'utf-8')).hexdigest() purl = '{}?{}&sign={}'.format(api_url, params_str, chksum) - print "XXXXXXXXXXXXXXXXX",purl html = get_html(purl) m = hashlib.md5() diff --git a/plugin.video.meiju/addon.xml b/plugin.video.meiju/addon.xml index 4e53f5b..fa5699d 100644 --- a/plugin.video.meiju/addon.xml +++ b/plugin.video.meiju/addon.xml @@ -1,7 +1,7 @@ @@ -13,7 +13,7 @@ video - meijumao video plugin + meiju video plugin 搜罗网络美剧 online video from yyetss(not yyets) and ttkmj, etc 网上美剧视频 diff --git a/plugin.video.meiju/default.py b/plugin.video.meiju/default.py index bd25253..28176a3 100644 --- a/plugin.video.meiju/default.py +++ b/plugin.video.meiju/default.py @@ -1,12 +1,16 @@ #!/usr/bin/python -# -*- coding: utf8 -*- +# -*- coding: utf-8 -*- -from xbmcswift2 import Plugin, ListItem, xbmc +from xbmcswift2 import Plugin, ListItem, xbmcgui from bs4 import BeautifulSoup +import re from common import get_html, r1 +from json import loads +import time YYETSS = 'http://www.yyetss.com/' TTKMJ = 'https://www.ttkmj.org/' +MEIJUXIA = 'http://www.meijuxia.vip' BANNER = '[COLOR FFDEB887]{}[/COLOR]' plugin = Plugin() @@ -16,6 +20,94 @@ def stay(): pass + + + +@plugin.route('/xiaplay//') +def xiaplay(url): + html = get_html(url) + m = r1('cms_player\s*=\s*({.+?\});', html) + urlinfo = loads(m) + u = urlinfo['url'] + print "XXXXXXXXXXXXXXXXXXX",u + t = int(time.time()) + #u = re.sub('sign=\d+', 'sign='+str(t), u) + playurl = urlinfo['jiexi'] + u + playurl = get_html(playurl) + print playurl.encode('utf-8') + + print "XXXXXXXXXXXXXXXXXX", playurl+'?t='+t + plugin.set_resolved_url(playurl + '?t=' + t) + + +@plugin.route('/xiafilter//') +def xiafilter(url): + html = get_html(url) + soup = BeautifulSoup(html, 'html.parser') + + +@plugin.route('/xiaepisode//') +def xiaepisode(url): + plugin.set_content('TVShows') + html = get_html(url) + soup = BeautifulSoup(html, 'html.parser') + tree = soup.findAll('div', {'class': 'tab-content'}) + items = [] + + lists = tree[0].findAll('li') + for item in lists: + items.append({ + 'label': item.text, + 'path': url_for('xiaplay', url=MEIJUXIA+item.a['href']), + 'is_playable': True, + 'info': {'title': item.text} + }) + return items + + +@plugin.route('/xiacatagory//') +def xiacatagory(url=None): + if url is None: + url = MEIJUXIA + '/list-select-id-2-type--area--year--star--state--order-addtime.html' + items = [] + + items.append({ + 'label': '[COLOR yellow] 分类过滤[/COLOR]]', + 'path': url_for('xiafilter', url=url) + }) + + plugin.set_content('TVShows') + html = get_html(url) + soup = BeautifulSoup(html, 'html.parser') + tree = soup.findAll('ul', {'class': 'list-unstyled'}) + + lists = tree[0].findAll('li') + for item in lists: + url = MEIJUXIA + item.a['href'] + title = item.img['alt'] + info = item.span.text + info = info.replace('\n', '') + info = info.replace('\t', '') + info = info.replace(' ', '') + items.append({ + 'label': title + '('+ info + ')', + 'path': url_for('xiaepisode', url=url), + 'thumbnail': item.img['data-original'], + }) + + pages = soup.findAll('a', {'class': 'page-link'}) + for page in pages: + items.append({ + 'label': page.text, + 'path': url_for('xiacatagory', url=MEIJUXIA + page['href']) + }) + return items + + +@plugin.route('/meijuxia/') +def meijuxia(): + return xiacatagory(None) + @plugin.route('/ttepisodes//') def ttepisodes(url): plugin.set_content('TVShows') @@ -161,37 +253,56 @@ def yyepisodes(url): return items -@plugin.route('/yycategory//') -def yycategory(url): - plugin.set_content('TVShows') +@plugin.route('/yyfilter//') +def yyfilter(url): + dialog = xbmcgui.Dialog() + html = get_html(url) soup = BeautifulSoup(html, 'html.parser') + + tree = soup.findAll('ul', {'class': 'navbar-nav'}) + titles = tree[0].findAll('li') + lst = [x.text for x in titles[2:-1]] + sel = dialog.select('分类', lst) + sel = max(0, sel) + href = titles[2+sel].a['href'] + hs = href.split('-') + cate = hs[1] + tree = soup.findAll('ul', {'class':'list-inline'}) - years = tree[0].findAll('li') + titles = tree[0].findAll('li') + lst = [x.text for x in titles[1:]] + sel = dialog.select('年份', lst) + sel = max(0, sel) + href = titles[1+sel].a['href'] + hs = href.split('-') + year = hs[2] + return yycategory(cate, year, 1) + + +@plugin.route('/yycategory////') +def yycategory(cate, year, page): + plugin.set_content('TVShows') items = [] - # 年份 - items.append({ - 'label': BANNER.format('年份'), - 'path': url_for('stay') - }) - for item in years[1:]: - title = item.text - try: - href = item.a['href'] - except: - href = url - if href[0] == '/': href = YYETSS + href - items.append({ - 'label': title, - 'path': url_for('yycategory', url=href) - }) - - # 剧集 + url = YYETSS + 'list-{}-{}-{}.html'.format(cate, year, page) + html = get_html(url) + soup = BeautifulSoup(html, 'html.parser') + + tree = soup.findAll('ul', {'class': 'navbar-nav'}) + titles = tree[0].findAll('li') + cname = '' + for x in titles[2:-1]: + if cate in x.a['href']: + cname = x.text.encode('utf-8') + break + items.append({ - 'label': BANNER.format('剧集'), - 'path': url_for('stay') + 'label': '分类 [COLOR yellow][{}-{}][/COLOR]'.format(cname, year), + 'path': url_for('yyfilter', url=url) }) + + tree = soup.findAll('div', {'class':'c-list-box'}) for item in tree: title = item.a['title'] @@ -207,37 +318,23 @@ def yycategory(url): 'thumbnail': img }) + tree = soup.findAll('ul', {'class':'pagination'}) + if not tree: + return items # 分页 items.append({ 'label': BANNER.format('分页'), 'path': url_for('stay') }) - tree = soup.findAll('ul', {'class':'pagination'}) pages = tree[0].findAll('li') for item in pages: title = item.text href = item.a['href'] + page = r1('-(\d+).html', href) if href[0] == '/': href = YYETSS + href items.append({ 'label': title, - 'path': url_for('yycategory', url=href) - }) - - return items - - -@plugin.route('/yyetss/') -def yyetss(): - html = get_html(YYETSS) - soup = BeautifulSoup(html, 'html.parser') - tree = soup.findAll('li') - items = [] - for item in tree[2:-2]: - url = item.a['href'] - if url[0] == '/': url = YYETSS + url - items.append({ - 'label': item.text, - 'path': url_for('yycategory', url=url) + 'path': url_for('yycategory', cate=cate, year=year, page=page) }) return items @@ -248,13 +345,17 @@ def yyetss(): def index(): yield { 'label': '人人影视', - 'path': url_for('yyetss') + 'path': url_for('yycategory', cate='lishi', year='all', page=1) } - yield { 'label': '天天看美剧', 'path': url_for('ttkmj') } + #yield { + # 'label': '美剧侠', + # 'path': url_for('meijuxia') + #} + if __name__ == '__main__': plugin.run() diff --git a/plugin.video.meiju/plugin.video.meiju-1.0.0.zip b/plugin.video.meiju/plugin.video.meiju-1.0.2.zip similarity index 75% rename from plugin.video.meiju/plugin.video.meiju-1.0.0.zip rename to plugin.video.meiju/plugin.video.meiju-1.0.2.zip index 22e99f5..1929533 100644 Binary files a/plugin.video.meiju/plugin.video.meiju-1.0.0.zip and b/plugin.video.meiju/plugin.video.meiju-1.0.2.zip differ diff --git a/plugin.video.mgtv/default.py b/plugin.video.mgtv/default.py index 785bf4a..b9dceca 100644 --- a/plugin.video.mgtv/default.py +++ b/plugin.video.mgtv/default.py @@ -90,10 +90,6 @@ def changeList(url): url = surl filter = si[sel].text.encode('utf-8') - if url[0:2] == '//': - url = 'http:' + url - elif url[0] == '/': - url = LIST_URL + url return mainlist(url, filter) @@ -165,7 +161,7 @@ def episodelist(url, id, page): 'path': url_for('episodelist', url=url, id=id, page=page+1) } - lists = data.get('short', []) + lists = data.get('short') if lists and (page == total_page): for series in lists: d = series.get('t2', '0:0') @@ -193,6 +189,10 @@ def episodelist(url, id, page): @plugin.route('/mainlist///') def mainlist(url, filter): + if url[:2] == '//': + utl = 'http:' + url + elif url[0] == '/': + url = LIST_URL + url plugin.set_content('TVShows') filtitle = '' if filter == '0' else filter items = [{ @@ -203,9 +203,9 @@ def mainlist(url, filter): html = get_html(url) soup = BeautifulSoup(html, 'html.parser') - tree = soup.findAll('div', {'class': 'm-result-list'}) + tree = soup.find('div', {'class': 'm-result-list'}) - tree = tree[0].findAll('li', {'class': 'm-result-list-item'}) + tree = tree.findAll('li', {'class': 'm-result-list-item'}) for item in tree: t = item.find('a', {'class': 'u-title'}) title = t.text @@ -234,9 +234,9 @@ def mainlist(url, filter): }) # multiple pages - setpage = soup.findAll('div', {'class': 'w-pages'}) + setpage = soup.find('div', {'class': 'w-pages'}) try: - pages = setpage[0].findAll('li') + pages = setpage.findAll('li') except: return items @@ -245,10 +245,6 @@ def mainlist(url, filter): href = page.a.get('href') if href == 'javascript:;' or title == '': continue - if href[0:2] == '//': - href = 'http:' + href - elif href[0] == '/': - href = LIST_URL + href items.append({ 'label': BANNER_FMT % title, 'path': url_for('mainlist', url=href, filter=filter) @@ -267,7 +263,7 @@ def root(): jsdata = loads(get_html(mainAPI)) for item in jsdata['data'][1:]: - url = LIST_URL + '/-------------.html?channelId=' + item['pageType'] + url = '/-------------.html?channelId=' + item['pageType'] yield { 'label': item['title'], 'path': url_for('mainlist', diff --git a/plugin.video.mgtv/plugin.video.mgtv-1.1.8.zip b/plugin.video.mgtv/plugin.video.mgtv-1.1.8.zip index 4de21b7..1b306ab 100644 Binary files a/plugin.video.mgtv/plugin.video.mgtv-1.1.8.zip and b/plugin.video.mgtv/plugin.video.mgtv-1.1.8.zip differ diff --git a/plugin.video.youku/addon.xml b/plugin.video.youku/addon.xml index 603b5cc..ee7e30f 100644 --- a/plugin.video.youku/addon.xml +++ b/plugin.video.youku/addon.xml @@ -1,6 +1,6 @@ diff --git a/plugin.video.youku/default.py b/plugin.video.youku/default.py index 4899214..098757b 100644 --- a/plugin.video.youku/default.py +++ b/plugin.video.youku/default.py @@ -189,21 +189,39 @@ def episodelist(params): except: series = p['data']['data']['nodes'][0]['nodes'][1]['nodes'] content = p['data']['data']['nodes'][0]['nodes'][0]['nodes'][0]['data']['desc'] - items = [] - for film in series: - vid = film['data']['action']['value'] - title = film['data']['title'].encode('utf-8') - li = ListItem(title, thumbnailImage=film['data']['img']) + showid = p['showId'] + IDS = urlencode(BASEIDS) + api = HOST + '/layout/smarttv/shows/{}/series?{}'.format(showid, IDS) + data = get_html(api) + series = loads(data) + + for item in series['results']: + title = item['title'].encode('utf-8') + li = ListItem(title, thumbnailImage=item['img']) li.setInfo(type='video', infoLabels={'title': title, 'plot': content}) req = { 'mode': 'playvideo', - 'vid': vid, + 'vid': item['videoid'], 'name': title, - 'thumbnail': film['data']['img'] + 'thumbnail': item['img'] } u = sys.argv[0] + '?' + urlencode(req) addDirectoryItem(int(sys.argv[1]), u, li, False) + #for film in series: + # vid = film['data']['action']['value'] + # title = film['data']['title'].encode('utf-8') + # li = ListItem(title, thumbnailImage=film['data']['img']) + # li.setInfo(type='video', infoLabels={'title': title, 'plot': content}) + # req = { + # 'mode': 'playvideo', + # 'vid': vid, + # 'name': title, + # 'thumbnail': film['data']['img'] + # } + # u = sys.argv[0] + '?' + urlencode(req) + # addDirectoryItem(int(sys.argv[1]), u, li, False) + setContent(int(sys.argv[1]), 'tvshows') endOfDirectory(int(sys.argv[1])) @@ -226,7 +244,7 @@ def mainlist(params): api = 'https://list.youku.com/category/page?' req = params.copy() req['p'] = page - req.pop('title') + #req.pop('title') html = get_html(api + urlencode(req)) data = loads(html) @@ -264,7 +282,7 @@ def root(): li = ListItem(title) req = { 'mode': 'mainlist', - 'title': title, + #'title': title, 'type': item[title][0], 'c': item[title][1], } diff --git a/plugin.video.youku/plugin.video.youku-2.0.3.zip b/plugin.video.youku/plugin.video.youku-2.0.4.zip similarity index 93% rename from plugin.video.youku/plugin.video.youku-2.0.3.zip rename to plugin.video.youku/plugin.video.youku-2.0.4.zip index 58d1226..8283912 100644 Binary files a/plugin.video.youku/plugin.video.youku-2.0.3.zip and b/plugin.video.youku/plugin.video.youku-2.0.4.zip differ diff --git a/script.iptvtool/resources/channel.m3u b/script.iptvtool/resources/channel.m3u index 7caa2a0..2b658b8 100644 --- a/script.iptvtool/resources/channel.m3u +++ b/script.iptvtool/resources/channel.m3u @@ -635,8 +635,6 @@ http://stream1.hnntv.cn/ysjpd/sd/live.m3u8 http://weblive.hebtv.com/live/hbys_bq/index.m3u8 #EXTINF:-1 ,济南影视 http://ts1.ijntv.cn/yshd/hd/live.m3u8 -#EXTINF:-1 group-title="地方电视台" ,湖北影视 -http://live.cjyun.org/video/s10008-hbys2018/index.m3u8 #EXTINF:-1 group-title="地方电视台" ,福州影视频道 http://live.zohi.tv/video/s10001-yspd-2/index.m3u8 #EXTINF:-1 group-title="其他" ,赌神全集 diff --git a/script.module.geturl/addon.xml b/script.module.geturl/addon.xml index c3074b3..720cbf1 100644 --- a/script.module.geturl/addon.xml +++ b/script.module.geturl/addon.xml @@ -2,7 +2,7 @@ + version="2.0.1"> diff --git a/script.module.geturl/lib/common.py b/script.module.geturl/lib/common.py index 88e1be5..872641a 100644 --- a/script.module.geturl/lib/common.py +++ b/script.module.geturl/lib/common.py @@ -92,7 +92,7 @@ def get_html(url, # Decode the response body if decoded: - match = re.compile('