From 59d60b6cda17a0b7835e901e1978f6ed7058e83c Mon Sep 17 00:00:00 2001 From: comeonbaby0122 <38131680@qq.com> Date: Fri, 23 Sep 2022 23:49:18 +0000 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20'plugin'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/py_alist.py | 263 ++++++++++++++++++++++++++++++++++----------- 1 file changed, 201 insertions(+), 62 deletions(-) diff --git a/plugin/py_alist.py b/plugin/py_alist.py index e1b6efa..52ae73c 100644 --- a/plugin/py_alist.py +++ b/plugin/py_alist.py @@ -4,7 +4,9 @@ import sys sys.path.append('..') from base.spider import Spider import json - +import re +import difflib +import urllib class Spider(Spider): # 元类 默认的元类 type def getName(self): @@ -23,32 +25,12 @@ class Spider(Spider): # 元类 默认的元类 type def homeContent(self, filter): result = {} cateManual = { - "🔮嗨翻":"https://pan.hikerfans.com", - "🦀9T(Adult)":"https://drive.9t.ee", - "🐱梓澪の妙妙屋":"https://xn--i0v44m.xyz", - "🚆资源小站":"https://pan.142856.xyz", - "🌤晴园的宝藏库":"https://alist.52qy.repl.co", - "🐭米奇妙妙屋":"https://anime.mqmmw.ga", - "💂小兵组网盘影视":"https://6vv.app", - "📀小光盘":"https://alist.xiaoguanxiaocheng.life", - "🐋一只鱼":"https://alist.youte.ml", - "🌊七米蓝":"https://al.chirmyram.com", - "🌴非盘":"http://www.feifwp.top", - "🥼帅盘":"https://hi.shuaipeng.wang", - "🐉神族九帝":"https://alist.shenzjd.com", - "☃姬路白雪":"https://pan.jlbx.xyz", - "🎧听闻网盘":"https://wangpan.sangxuesheng.com", - "💾DISK":"http://124.222.140.243:8080", - "🌨云播放":"https://quanzi.laoxianghuijia.cn", - "✨星梦":"https://pan.bashroot.top", - "🌊小江":"https://dyj.me", - "💫触光":"https://pan.ichuguang.com", - "🕵好汉吧":"https://8023.haohanba.cn", - "🥗AUNEY":"http://121.227.25.116:8008", - "🎡资源小站":"https://960303.xyz/", - "🐝神器云": "https://quanzi.laoxianghuijia.cn", - "🏝fenwe":"http://www.fenwe.tk:5244", - "🎢轻弹浅唱":"https://g.xiang.lol" + "菊花盘": "https://pan.142856.xyz/OneDrive", + "触光云盘": "https://pan.ichuguang.com", + "小孟资源": "https://8023.haohanba.cn", + "资源小站": "https://960303.xyz", + "轻弹浅唱": "https://g.xiang.lol", + "小兵组网盘视频": "https://pan.ichuguang.com" } classes = [] for k in cateManual: @@ -68,31 +50,83 @@ class Spider(Spider): # 元类 默认的元类 type } return result + ver = '' + baseurl = '' + def getVersion(self, gtid): + param = { + "path": '/' + } + if gtid.count('/') == 2: + gtid = gtid + '/' + baseurl = re.findall(r"http.*://.*?/", gtid)[0] + ver = self.fetch(baseurl + 'api/public/settings', param) + vjo = json.loads(ver.text)['data'] + if type(vjo) is dict: + ver = 3 + else: + ver = 2 + self.ver = ver + self.baseurl = baseurl + def categoryContent(self, tid, pg, filter, extend): result = {} - ulen = len(self.config['url']) - pat = tid[ulen:] + '/' + if tid.count('/') == 2: + tid = tid + '/' + nurl = re.findall(r"http.*://.*?/", tid)[0] + if self.ver == '' or self.baseurl != nurl: + self.getVersion(tid) + ver = self.ver + baseurl = self.baseurl + if tid.count('/') == 2: + tid = tid + '/' + pat = tid.replace(baseurl,"") param = { - "path": pat + "path": '/' + pat } - rsp = self.postJson(self.config['url'] + '/api/fs/list', param) - jo = json.loads(rsp.text) + if ver == 2: + rsp = self.postJson(baseurl + 'api/public/path', param) + jo = json.loads(rsp.text) + vodList = jo['data']['files'] + elif ver == 3: + rsp = self.postJson(baseurl + 'api/fs/list', param) + jo = json.loads(rsp.text) + vodList = jo['data']['content'] videos = [] - vodList = jo['data']['content'] for vod in vodList: - img = vod['thumb'] + if ver == 2: + img = vod['thumbnail'] + elif ver == 3: + img = vod['thumb'] if len(img) == 0: if vod['type'] == 1: img = "http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png" - aid = pat - tag = "file" - remark = "文件" + if pat != '': + aid = pat + '/' + else: + aid = pat if vod['type'] == 1: tag = "folder" remark = "文件夹" - aid = self.config['url'] + aid + vod['name'] else: - aid = aid + vod['name'] + size = vod['size'] + if size > 1024 * 1024 * 1024 * 1024.0: + fs = "TB" + sz = round(size / (1024 * 1024 * 1024 * 1024.0), 2) + elif size > 1024 * 1024 * 1024.0: + fs = "GB" + sz = round(size / (1024 * 1024 * 1024.0), 2) + elif size > 1024 * 1024.0: + fs = "MB" + sz = round(size / (1024 * 1024.0), 2) + elif size > 1024.0: + fs = "KB" + sz = round(size / (1024.0), 2) + else: + fs = "KB" + sz = round(size / (1024.0), 2) + tag = "file" + remark = str(sz) + fs + aid = baseurl + aid + vod['name'] videos.append({ "vod_id": aid, "vod_name": vod['name'], @@ -108,32 +142,59 @@ class Spider(Spider): # 元类 默认的元类 type return result def detailContent(self, array): - fileName = array[0] - param = { - "path": fileName, + id = array[0] + if self.ver == '' or self.baseurl == '': + self.getVersion(id) + ver = self.ver + baseurl = self.baseurl + fileName = id.replace(baseurl, "") + dir = re.findall(r"(.*)/", fileName)[0].replace(baseurl, "") + dirparam = { + "path": '/' + dir, "password": "", "page_num": 1, "page_size": 100 } - rsp = self.postJson(self.config['url'] + '/api/fs/get', param) - jo = json.loads(rsp.text) - videos = [] - vodList = jo['data'] - url = vodList['raw_url'] - vId = self.config['url'] + fileName - name = vodList['name'] - pic = vodList['thumb'] - tag = "file" - if vodList['type'] == 1: - tag = "folder" vod = { - "vod_id": vId, - "vod_name": name, - "vod_pic": pic, - "vod_tag": tag, + "vod_id": fileName, + "vod_name": dir, + "vod_pic": '', + "vod_tag": '', "vod_play_from": "播放", - "vod_play_url": name + '$' + url } + if ver == 2: + drsp = self.postJson(baseurl + 'api/public/path', dirparam) + djo = json.loads(drsp.text) + dList = djo['data']['files'] + elif ver == 3: + drsp = self.postJson(baseurl + 'api/fs/list', dirparam) + djo = json.loads(drsp.text) + dList = djo['data']['content'] + playUrl = '' + for tempd in dList: + if 'mp4' in tempd['name'] or 'mkv' in tempd['name'] or 'TS' in tempd['name'] or 'flv' in tempd['name'] or 'rmvb' in tempd['name'] or 'mp3' in tempd['name'] or 'flac' in tempd['name'] or 'wav' in tempd['name']: + # 开始匹配视频 + # 视频名称 name + name = tempd['name'] + # 视频链接 url + fname = re.findall(r"(.*)/", fileName)[0] + '/' + name + url = baseurl + fname + # 开始找字幕 subt + vname = re.findall(r"(.*)\.", tempd['name'])[0] + vstr = re.findall(r"\'name\': \'(.*?)\'", str(dList)) + if len(vstr) == 2: + suball = vstr + else: + suball = difflib.get_close_matches(vname, vstr, len(dList), cutoff=0.8) + for sub in suball: + if sub.endswith(".ass") or sub.endswith(".srt"): + subt = '@@@' + baseurl + dir + '/' +sub + ifsubt = 'subt' in locals().keys() + if ifsubt is False: + playUrl = playUrl + '{0}${1}#'.format(name, url) + else: + playUrl = playUrl + '{0}${1}{2}#'.format(name, url, subt) + vod['vod_play_url'] = playUrl result = { 'list': [ vod @@ -149,18 +210,96 @@ class Spider(Spider): # 元类 默认的元类 type def playerContent(self, flag, id, vipFlags): result = {} - url = id + ifsub = '@@@' in id + if ifsub is True: + ids = id.split('@@@') + if self.ver == '' or self.baseurl == '': + self.getVersion(ids[1]) + ver = self.ver + baseurl = self.baseurl + fileName = ids[1].replace(baseurl, "") + vfileName = ids[0].replace(baseurl, "") + param = { + "path": '/' + fileName, + "password": "", + "page_num": 1, + "page_size": 100 + } + vparam = { + "path": '/' + vfileName, + "password": "", + "page_num": 1, + "page_size": 100 + } + if ver == 2: + rsp = self.postJson(baseurl + 'api/public/path', param) + jo = json.loads(rsp.text) + vodList = jo['data']['files'][0] + subturl = vodList['url'] + vrsp = self.postJson(baseurl + 'api/public/path', vparam) + vjo = json.loads(vrsp.text) + vList = vjo['data']['files'][0] + url = vList['url'] + elif ver == 3: + rsp = self.postJson(baseurl + 'api/fs/get', param) + jo = json.loads(rsp.text) + vodList = jo['data'] + subturl = vodList['raw_url'] + vrsp = self.postJson(baseurl + 'api/fs/get', vparam) + vjo = json.loads(vrsp.text) + vList = vjo['data'] + url = vList['raw_url'] + if subturl.startswith('http') is False: + head = re.findall(r"h.*?:", baseurl)[0] + subturl = head + subturl + if url.startswith('http') is False: + head = re.findall(r"h.*?:", baseurl)[0] + url = head + url + urlfileName = urllib.parse.quote(fileName) + subturl = subturl.replace(fileName, urlfileName) + urlvfileName = urllib.parse.quote(vfileName) + url = url.replace(vfileName, urlvfileName) + result['subt'] = subturl + else: + if self.ver == '' or self.baseurl == '': + self.getVersion(id) + ver = self.ver + baseurl = self.baseurl + vfileName = id.replace(baseurl, "") + vparam = { + "path": '/' + vfileName, + "password": "", + "page_num": 1, + "page_size": 100 + } + if ver == 2: + vrsp = self.postJson(baseurl + 'api/public/path', vparam) + vjo = json.loads(vrsp.text) + vList = vjo['data']['files'][0] + url = vList['url'] + elif ver == 3: + vrsp = self.postJson(baseurl + 'api/fs/get', vparam) + vjo = json.loads(vrsp.text) + vList = vjo['data'] + url = vList['raw_url'] + if url.startswith('http') is False: + head = re.findall(r"h.*?:", baseurl)[0] + url = head + url + urlvfileName = urllib.parse.quote(vfileName) + url = url.replace(vfileName, urlvfileName) result["parse"] = 0 result["playUrl"] = '' result["url"] = url + result["header"] = { + "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36" + } return result config = { "player": {}, - "filter": {}, - "url": 'https://al.chirmyram.com' + "filter": {} } header = {} def localProxy(self, param): - return [200, "video/MP2T", action, ""] + return [200, "video/MP2T", action, ""] \ No newline at end of file