code:
# coding=utf-8
# !/usr/bin/python
import sys
sys.path.append('..')
from base.spider import Spider
import json
import re
import urllib

class Spider(Spider):  # 元类 默认的元类 type
    def getName(self):
        return "Alist"

    def init(self, extend=""):
        print("============{0}============".format(extend))
        pass

    def isVideoFormat(self, url):
        pass

    def manualVideoCheck(self):
        pass

    def homeContent(self, filter):
        result = {}
        cateManual = {
            "七米蓝": "https://al.chirmyram.com",
            "神器云": "https://al.chirmyram.com",
            "xiaoya": "http://43.139.29.179:5245",
            "梅花盘": "https://pan.142856.xyz/OneDrive",
            "触光云盘": "https://pan.ichuguang.com",
            "小孟资源": "https://8023.haohanba.cn/小孟丨资源大合集/无损音乐",
            "资源小站": "https://960303.xyz/ali",
            "轻弹浅唱": "https://g.xiang.lol",
            "小兵组网盘视频": "https://6vv.app"
        }
        classes = []
        for k in cateManual:
            classes.append({
                'type_name': k,
				"type_flag": "1",
                'type_id': cateManual[k]
            })
        result['class'] = classes
        if (filter):
            filters = {}
            for lk in cateManual:
                link = cateManual[lk]
                filters.update({
                    link: [{"key": "nm", "name": "名        称", "value": [{"n": "正序", "v": "False"},{"n": "反序", "v": "True"}]},{"key": "sz", "name": "大        小", "value": [{"n": "升序", "v": "False"},{"n": "降序", "v": "True"}]},{"key": "tp", "name": "类        型", "value": [{"n": "升序", "v": "False"},{"n": "降序", "v": "True"}]},{"key": "tm", "name": "修改时间", "value": [{"n": "升序", "v": "False"},{"n": "降序", "v": "True"}]}]
                })
            result['filters'] = filters
        return result

    def homeVideoContent(self):
        result = {
            'list': []
        }
        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 = {}
        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
        }
        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']
        ovodList = vodList
        if len(extend) != 0:
            if 'tp' in extend:
                fl = 'type'
                if extend['tp'] == "True":
                    key = True
                if extend['tp'] == "False":
                    key = False
                vodList.sort(key=lambda x: (x['{0}'.format(fl)]), reverse=key)
            elif 'sz' in extend:
                fl = 'size'
                if extend['sz'] == "True":
                    key = True
                if extend['sz'] == "False":
                    key = False
                vodList.sort(key=lambda x: (x['{0}'.format(fl)]), reverse=key)
            elif 'nm' in extend:
                fl = 'name'
                if extend['nm'] == "True":
                    key = True
                if extend['nm'] == "False":
                    key = False
                vodList.sort(key=lambda x: (x['{0}'.format(fl)]), reverse=key)
            elif 'tm' in extend:
                if ver == 2:
                    fl = 'updated_at'
                elif ver == 3:
                    fl = 'modified'
                if extend['tm'] == "True":
                    key = True
                if extend['tm'] == "False":
                    key = False
                vodList.sort(key=lambda x: (x['{0}'.format(fl)]), reverse=key)
            else:
                vodList = ovodList
        else:
            vodList = ovodList
        videos = []
        cid = ''
        purl = ''
        svodList = str(vodList)
        lenvodList = len(vodList)
        substr = str(re.findall(r"\'name\': \'(.*?)\'", svodList))
        foldernum = svodList.count('\'type\': 1')
        filenum = lenvodList - foldernum
        for vod in vodList:
            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"
            if pat != '':
                aid = pat + '/'
            else:
                aid = pat
            if vod['type'] == 1:
                tag = "folder"
                remark = "文件夹"
                cid = baseurl + aid + vod['name']
            #计算文件大小
            else:
                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
                cid = baseurl + aid + vod['name']
                # 开始爬视频与字幕
                if filenum < 150:
                    if 'mp4' in vod['name'] or 'mkv' in vod['name'] or 'TS' in vod['name'] or 'flv' in vod['name'] or 'rmvb' in vod['name'] or 'mp3' in vod['name'] or 'flac' in vod['name'] or 'wav' in vod['name'] or 'wma' in vod['name'] or 'dff' in vod['name']:
                        vodurl = vod['name']
                        # 开始爬字幕
                        cid = '###'
                        subname = re.findall(r"(.*)\.", vod['name'])[0]
                        if filenum == 2:
                            if '.ass' in substr:
                                sub = re.findall(r"'(.*)\.ass", substr)[0]
                                subt = '@@@' + sub + '.ass'
                                if ',' in sub:
                                    sub = re.findall(r"', '(.*)\.ass", substr)[0]
                                    subt = '@@@' + sub + '.ass'
                            if '.srt' in substr:
                                sub = re.findall(r"'(.*)\.srt", substr)[0]
                                subt = '@@@' + sub + '.srt'
                                if ',' in sub:
                                    sub = re.findall(r"', '(.*)\.srt", substr)[0]
                                    subt = '@@@' + sub + '.srt'
                        else:
                            if '.ass' in substr:
                                if '(' in subname or ')' in subname or '[' in subname or ']' in subname:
                                    subname = subname.replace("(","\(").replace(")","\)").replace("[","\[").replace("]","\]")
                                sub = re.findall(r"{0}.*?\.ass".format(subname), substr)
                                if len(sub) != 0:
                                    sub = sub[0]
                                else:
                                    sub = ''
                                if ',' in sub:
                                    lsub = sub.replace('\'',"").split(', ')
                                    sub = lsub[len(lsub)-1]
                                if '(' in subname or ')' in subname or '[' in subname or ']' in subname:
                                    ssubname = subname.replace("\(","(").replace("\)",")").replace("\[","[").replace("\]","]")
                                if subname in sub:
                                    subt = '@@@' + sub
                            elif '.srt' in substr:
                                if '(' in subname or ')' in subname or '[' in subname or ']' in subname:
                                    subname = subname.replace("(","\(").replace(")","\)").replace("[","\[").replace("]","\]")
                                sub = re.findall(r'{0}.*?\.srt'.format(subname), substr)
                                if len(sub) != 0:
                                    sub = sub[0]
                                else:
                                    sub = ''
                                if ',' in sub:
                                    lsub = sub.replace('\'',"").split(', ')
                                    sub = lsub[len(lsub)-1]
                                if '(' in subname or ')' in subname or '[' in subname or ']' in subname:
                                    subname = subname.replace("\(","(").replace("\)",")").replace("\[","[").replace("\]","]")
                                if subname in sub:
                                    subt = '@@@' + sub
                        # 合并链接
                        if 'subt' in locals().keys():
                            purl = purl + '{0}{1}#'.format(vodurl, subt)
                        else:
                            purl = purl + '{0}#'.format(vodurl)
                else:
                    subname = re.findall(r"(.*)\.", vod['name'])[0]
                    if '.ass' in substr:
                        if '(' in subname or ')' in subname or '[' in subname or ']' in subname:
                            subname = subname.replace("(","\(").replace(")","\)").replace("[","\[").replace("]","\]")
                        sub = re.findall(r"{0}.*?\.ass".format(subname), substr)
                        if len(sub) != 0:
                            sub = sub[0]
                        else:
                            sub = ''
                        if ',' in sub:
                            lsub = sub.replace('\'', "").split(', ')
                            sub = lsub[len(lsub) - 1]
                        if '(' in subname or ')' in subname or '[' in subname or ']' in subname:
                            subname = subname.replace("\(","(").replace("\)",")").replace("\[","[").replace("\]","]")
                        if subname in sub:
                            subt = '@@@' + sub
                            cid = cid + subt
                    elif '.srt' in substr:
                        if '(' in subname or ')' in subname or '[' in subname or ']' in subname:
                            subname = subname.replace("(","\(").replace(")","\)").replace("[","\[").replace("]","\]")
                        sub = re.findall(r"{0}.*?\.srt".format(subname), substr)
                        if len(sub) != 0:
                            sub = sub[0]
                        else:
                            sub = ''
                        if ',' in sub:
                            lsub = sub.replace('\'', "").split(', ')
                            sub = lsub[len(lsub) - 1]
                        if '(' in subname or ')' in subname or '[' in subname or ']' in subname:
                            subname = subname.replace("\(","(").replace("\)",")").replace("\[","[").replace("\]","]")
                        if subname in sub:
                            subt = '@@@' + sub
                            cid = cid + subt
            videos.append({
                "vod_id":  cid,
                "vod_name": vod['name'],
                "vod_pic": img,
                "vod_tag": tag,
                "vod_remarks": remark
            })
        if 'purl' in locals().keys():
            purl = baseurl + aid + '+++' + purl
            for i in range(foldernum, lenvodList):
                if videos[i]['vod_id'] == '###':
                    videos[i]['vod_id'] = purl
        result['list'] = videos
        result['page'] = 1
        result['pagecount'] = 1
        result['limit'] = 999
        result['total'] = 999999
        return result

    def detailContent(self, array):
        id = array[0]
        if '+++' in id:
            ids = id.split('+++')
            durl = ids[0]
            vsList = ids[1].strip('#').split('#')
            vsurl = ''
            for vs in vsList:
                if '@@@' in vs:
                    dvs = vs.split('@@@')
                    vname = dvs[0]
                    vurl = durl + dvs[0]
                    surl = durl + dvs[1]
                    vsurl = vsurl + '{0}${1}@@@{2}#'.format(vname, vurl, surl)
                else:
                    vurl = durl + vs
                    vsurl = vsurl + '{0}${1}#'.format(vs, vurl)
            url = vsurl
        else:
            durl = id
        if self.ver == '' or self.baseurl == '':
            self.getVersion(durl)
        baseurl = self.baseurl
        if '+++' in id:
            vid = durl.replace(baseurl, "").strip('/')
        else:
            vid = durl.replace(re.findall(r".*/", durl)[0], "")
            url = vid + '$' + id
        vod = {
            "vod_id": vid,
            "vod_name": vid,
            "vod_pic": '',
            "vod_tag": '',
            "vod_play_from": "播放",
            "vod_play_url": url
        }
        result = {
            'list': [
                vod
            ]
        }
        return result

    def searchContent(self, key, quick):
        result = {
            'list': []
        }
        return result

    def playerContent(self, flag, id, vipFlags):
        result = {}
        url = ''
        subturl = ''
        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]
                driver = vList['driver']
                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']
                driver = vList['provider']
            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)
            if driver == 'Baidu.Disk':
                result["header"] = {"User-Agent": "pan.baidu.com"}

        result["parse"] = 0
        result["playUrl"] = ''
        result["url"] = url

        return result

    flurl = ''
    config = {
        "player": {},
        "filter": {}
    }
    header = {}

    def localProxy(self, param):
        return [200, "video/MP2T", action, ""]


默认选项

url: Demo

flag: qq qiyi mgtv youku letv sohu xigua 1905

User-Agent: Dart/2.14 (dart:io)

网络搜集02

flag: youku 优酷 qq 腾讯 qiyi 爱奇艺 奇艺

网络搜集03

flag: Itnb wuduzy

网络搜集04

flag: youku 优酷 mgtv 芒果 qq 腾讯 qiyi 爱奇艺 qq xigua 奇艺

网络搜集05

flag: qq 腾讯 qiyi 爱奇艺 奇艺 youku 优酷 sohu 芒果 mgtv xigua wuduzy bilibili pptv leduo Clk4 哔哩 renrenmi ltnb rx

网络搜集08

flag: youku qq mgtv bilibili wasu xigua renrenmi 优酷 芒果

网络搜集10

flag: qq 腾讯 qiyi 爱奇艺 奇艺 youku 优酷 mgtv 芒果 renrenmi Itnb

group: redirect

flags: youku qq iqiyi qiyi letv sohu letv tudou pptv mgtv wasu bilibili leduo fq3 fq4 xueren duoduo duoduozy miaoparty miaoparty2 miaoparty3 renrenmi 优酷 芒果 腾讯 爱奇艺 奇艺 ltnb rx CL4K xfyun wuduzy

group: 软解码

fflags

value: fastseek

group: 硬解码

repo_name: jiory/TVbox

license: unknown


🐞小苹果

key: 小苹果

🐞追剧喵

key: 追剧喵

🐞快看影视

key: 快看影视

🐞在线之家

key: 在线之家

盘搜

key: AliPS

小纸条

key: Gitcafe

找资源

key: FindZY

推送

ext: 阿里Token

酷猫

key: 酷猫

🥉天堂资源(官)

key: 天堂资源

🥉八戒官采(官)

key: 八戒官采

🥉忆梦(官)

key: 忆梦

🥉木子看剧(官)

key: 木子看剧

🥉小猫咪(官)

key: 小猫咪

🥉诺讯资源(官)

key: 诺讯资源

🥉看猫(官)

key: 看猫

金鹰资源(切)

key: 金鹰资源

冠军资源(切)

key: 冠军资源

FOX资源(切)

key: FOX资源

量子资源(切)

key: 量子资源

卧龙资源(切)

key: 卧龙资源

樱花资源(切)

key: 樱花资源

易看资源(切)

key: 易看资源

新浪资源(切)

key: 新浪资源

快播资源(切)

key: 快播资源

Json并发

url: Parallel

Json轮询

url: Sequence

左岸

flag: qq qiyi mgtv youku letv sohu xigua 1905 优播线路 腾播线路

太空

flag: qq 腾讯 qiyi 爱奇艺 奇艺 youku 优酷 sohu 搜狐 letv 乐视 mgtv 芒果 CL4K renrenmi ltnb bilibili 1905 xigua

未知

flag: qq 腾讯 qiyi 爱奇艺 奇艺 youku 优酷 mgtv 芒果 letv 乐视 pptv PPTV sohu bilibili 哔哩哔哩 哔哩

OJBK

flag: ltnb renrenmi rx xfyun muxm3u8 xigua xueren qq 腾讯 qiyi 爱奇艺 奇艺 youku 优酷 mgtv 芒果 bilibili 哔哩哔哩 哔哩 pptv PPTV sohu letv

②秒播

flag: qiyi qq letv sohu youku mgtv bilibili wasu xigua 1905

③秒播

flag: qiyi 爱奇艺 奇艺 qq 腾讯 youku 优酷 pptv PPTV letv 乐视 bilibili 哔哩哔哩 哔哩 mgtv 芒果

Pro

flag: youku 优酷 mgtv 芒果 qq 腾讯 qiyi 爱奇艺 qq 奇艺

flag: mgtv 芒果

飓风影院2

flag: ziqie youku 优酷 qiyi 爱奇艺 奇艺 mgtv 芒果 qq 腾讯

我爱电影网

flag: qiyi 爱奇艺 奇艺 mgtv 芒果 youku 优酷 pptv PPTV

王牌

flag: qq 腾讯 qiyi 爱奇艺 奇艺 youku 优酷 mgtv 芒果 搜狐 sohu letv 乐视 bilibili 哔哩哔哩 哔哩 xigua 西瓜

盘古解析

flag: qq 腾讯 qiyi 爱奇艺 奇艺 youku 优酷 mgtv 芒果

欢雨

flag: qq 腾讯 qiyi 爱奇艺 奇艺 youku 优酷 letv 乐视 xigua 西瓜

flags: youku qq iqiyi qiyi letv sohu tudou pptv mgtv wasu bilibili renrenmi


👒七七

key: 七七

🎈快看

key: Kuaikan

🐼在线之家

key: 在线之家

🐼Libvio

key: Libvio

🐼Auete

key: Auete

🐼Cokemv

key: Cokemv

key: 300看世界

钟特影视(v2)

key: 钟特影视

key: 美剧虫

key: 6U资源

搬运工资源(官)

key: 搬运工资源

英皇官采(官)

key: 英皇官采

江北资源(官)

key: 江北资源

云海官采(官)

key: 云海官采

wabc(腾讯直采)(官)

key: wabc(腾讯直采)

wabc(爱奇艺直采)(官)

key: wabc(爱奇艺直采)

阿远采集(官)

key: 阿远采集

极速BT资源(切)

key: 极速BT资源

步步高资源(切)

key: 步步高资源

TOM资源(切)

key: TOM资源

快车资源(切)

key: 快车资源

松鼠资源(切)

key: 松鼠资源

多多资源(切)

key: 多多资源

OK资源(切)

key: OK资源

猫眼资源(切)

key: 猫眼资源

神速资源(切)

key: 神速资源

番茄资源(切)

key: 番茄资源

红牛资源(切)

key: 红牛资源

北斗星资源(切)

key: 北斗星资源

想看资源(切)

key: 想看资源

酷点资源(切)

key: 酷点资源

速更资源(切)

key: 速更资源

闪电资源(切)

key: 闪电资源

飞速资源(切)

key: 飞速资源

光速资源(切)

key: 光速资源

鱼乐资源(切)

key: 鱼乐资源

韩剧资源(切)

key: 韩剧资源

八戒资源(切)

key: 八戒资源

百度资源(切)

key: 百度资源

无尽资源2(切)

key: 无尽资源2

无尽资源(切)

key: 无尽资源

天空资源(切)

key: 天空资源

乐多资源(切)

key: 乐多资源

聚合资源(切)

key: 聚合资源

南国影源(切)

key: 南国影源

U酷资源(优)

key: U酷资源

看看资源(优)

key: 看看资源

淘片资源(优)

key: 淘片资源

一帆资源(VPN)(优)

key: 一帆资源(VPN)

旋风云(优)

key: 旋风云

奈菲迷(优)

key: 奈菲迷

鸭奈飞(优)

key: 鸭奈飞

奈飞云(优)

key: 奈飞云

多多资源2(优)

key: 多多资源2

奇粹影视(优)

key: 奇粹影视

土剧TV(优)

key: 土剧TV

影世界(优)

key: 影世界

XYUI(优)

key: XYUI

ASMR(优)

key: ASMR

饭后电影(优)

key: 饭后电影

考拉TV(优)

key: 考拉TV

段友影视(优)

key: 段友影视

key: 51看剧

思古影院(优)

key: 思古影院

天天看(优)

key: 天天看

每天看看(优)

key: 每天看看

一拳动漫(优)

key: 一拳动漫

畅视影视(优)

key: 畅视影视

人人资源(优)

key: 人人资源

乐活影视(优)

key: 乐活影视

筋斗云(优)

key: 筋斗云

影图(聚)

key: 影图

猪猪影院(聚)

key: 猪猪影院

美剧星球(聚)

key: 美剧星球

初恋云影视(聚)

key: 初恋云影视

绿地影视(聚)

key: 绿地影视

天天影视(聚)

key: 天天影视

随缘电影(聚)

key: 随缘电影

飘零影院(聚)

key: 飘零影院

酷点影视(聚)

key: 酷点影视

小城影视(聚)

key: 小城影视

橘子影视(聚)

key: 橘子影视

小慧影视(聚)

key: 小慧影视

超高清影视(聚)

key: 超高清影视

flag: youku 优酷 mgtv 芒果 qq 腾讯 qiyi 爱奇艺 qq 奇艺 sohu letv

flag: ltnb rx qiyi 爱奇艺 qq 奇艺 sohu letv youku 优酷 mgtv 芒果

flag: ltnb renrenmi xfyun miaoparty miaoparty2 miaoparty3 longteng xueren

RongXingVR

flag: renrenmi rx rongxing mgtv 芒果 bilibili 哔哩哔哩 哔哩


code:
# TVBoxOSC
不懂java代码，在开源项目中做一些常见的小修改。
改APP名字，版本号，替换app图标，替换背景图片，内置源。共存（com.github.tvbox.osc）。

![9c47ad0a6e7445b825be058e22888b4](https://user-images.githubusercontent.com/102397160/177658190-7863e8bb-619f-4ef3-88b6-2cb5a0c9084b.png)

改APP版本号:TVBoxOS-junlao/app/build.gradle 　　　　　　versionName '2.0.0'

![7866862a3f3636c9d57527ce175057c](https://user-images.githubusercontent.com/102397160/177658195-ca687aed-427a-4443-af35-df92240729bb.png)
![fe07333d50600375c49612855018fdd](https://user-images.githubusercontent.com/102397160/177658197-ae104e2c-66d9-4e5f-9ea9-60675323574b.png)
![微信图片_20220728040003](https://user-images.githubusercontent.com/102397160/181361340-3d6f361c-8199-4a2b-a445-786ec9dad028.jpg)
调整设置画面选项的位置方法：打开，两块复制调换一下就行。

![微信图片_20220728040329](https://user-images.githubusercontent.com/102397160/181361920-cdcdffa7-5cd0-4b10-af2d-e850d59ae219.png)

修改内置源

俊老仓库打开下面,第83行
https://github.com/dabbing2019/TVBoxOS/blob/main/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java

takagen99大佬仓库 改这里;app/src/main/res/values-zh/strings.xml

修改默认缩略图、硬解、dns
地址：

https://github.com/dabbing2019/TVBoxOS/blob/main/app/src/main/java/com/github/tvbox/osc/base/App.java

代码

@@ -53,9 +53,19 @@ private void initParams()
{

       if (!Hawk.contains(HawkConfig.PLAY_TYPE))

        {
            Hawk.put(HawkConfig.PLAY_TYPE, 1);

        }

        //自定义默认配置-硬解-安全dns-缩略图

        if (!Hawk.contains(HawkConfig.IJK_CODEC))

        {
            Hawk.put(HawkConfig.IJK_CODEC, "硬解码");
        }

        if (!Hawk.contains(HawkConfig.DOH_URL))

        {
            Hawk.put(HawkConfig.DOH_URL, 2);
        }

        if (!Hawk.contains(HawkConfig.SEARCH_VIEW))

        {
            Hawk.put(HawkConfig.SEARCH_VIEW, 2);
        }
    }

    public static App getInstance()

    {
        return instance;
    }


code:
# 猫影视TV使用

>以下图文来源于神器每日推送 ，作者神器每日推送
>
>图片若无法显示，可能是版权原因，懒得改，看文字应该看得懂

片源主要以爬虫类片源为主，包括乐猪爬虫、cokemv爬虫、初心爬虫、不开VIP爬虫、熊猫爬虫、九亿爬虫、六度爬虫、libvio爬虫、毒蛇爬虫、迪迪爬虫、滴哩TV、0号资源、橘猫影视_M、追剧吧等等。

![图片](https://mmbiz.qpic.cn/mmbiz_png/aznpE5XXmSicxLCnyCzUgIySuMjaoaEdMKEQe0C2H9YSAqp8xG2w8vDZiaT6Trx0kia6ydS32w0OzkJyL6VtNAnDA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

**「猫影视TV209」+片源接口更新**

「猫影视TV2.0.9」官方版本次更新的核心内容有如下几个：

移除了「猫影视TV」后台里面的配置限制；

修复了xpath源解析bug；

### **【使用须知】**

1、「猫影视TV2.0.9」采用播放壳和片源接口分离的形式开发；

2、[神器每日推送](https://mp.weixin.qq.com/s?__biz=MzIwMDM1MzYzMQ==&mid=2654417517&idx=1&sn=00222c78267a54ade64fa7c81e35e138&chksm=8d3de05dba4a694bfd393e0fc9b92cef1617b8ea1ece766e6cc891ba8a877179273dcc67dc59&scene=126&sessionid=1646570960&key=5b3b05cf48614fbe1af3c1807e38905e6b8599409d6244052bf709c8376c96c0c57b37cfb4a208bb5701926ea09bb1ad115e12320e9467c50f0d3b6393c57145c37a632d1fdabf860b135859fc8512499a7b540ec0c9aa8f5d5c68ace850b9891fb22cd7afd2dbb74e3998a14e60e6489592a2f943e4f81840d0dc1a4d09cecf&ascene=1&uin=ODM1ODMyOTg%3D&devicetype=Windows+10+x64&version=6305002e&lang=zh_CN&exportkey=Azrev4yXecuFNPxtJwPmzFQ%3D&acctmode=0&pass_ticket=vZ6tfGv4Q3DuDEyXwCwSq8QLvLBMjyy8Xqz%2FDX6Dd%2FCwjHwinCrFi9iS1lGHe5f7&wx_header=0&fontgear=2)整理了多位大佬写的20余个爬虫片源接口，已检测并剔除了失效片源接口。

![图片](https://mmbiz.qpic.cn/mmbiz_png/wGNXkKsvH5aicib2I3thMYcCwFYYYpqGaS6Z2ZciahqmxZXwTxd2PFmg8lGgIXJpRjMmu3HQrtFZxQ46LAVB964Cw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

3、规则加载优化、流畅度大幅提升，基本可以做到秒播！

4、「猫影视TV2.0.9」版可以跟以往的旧版共存使用，互不影响；

![图片](https://mmbiz.qpic.cn/mmbiz_png/lEPfOPOPdlHNBwDvPp8WUA7FnoN3Pm6xZhMQhXHb09KicySf611C7eFWdl4uqLVg2Oia6aibmBhbvmqYVpJmNl3gw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

### **「猫影视TV2.0.9」更新细节**

**【版本更新】**

2022.2.28更新

移除了「猫影视TV」后台里面的配置限制；

修复了xpath源解析bug；

「猫影视TV2.0.9」版最直观的感受是，「历史配置」可以更人性化管理了。

![图片](https://mmbiz.qpic.cn/mmbiz_png/wGNXkKsvH5aicib2I3thMYcCwFYYYpqGaSahKiaKYkTqgusWDOU3D82ict9GAIq1cT8D9UZqQCFkWk7VIy0QA2MuAQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

播放速度有了大幅提升，无论爬虫源、搜索源，还是阿里源，不像以前那样卡顿了。

[神器每日推送](https://mp.weixin.qq.com/s?__biz=MzIwMDM1MzYzMQ==&mid=2654417517&idx=1&sn=00222c78267a54ade64fa7c81e35e138&chksm=8d3de05dba4a694bfd393e0fc9b92cef1617b8ea1ece766e6cc891ba8a877179273dcc67dc59&scene=126&sessionid=1646570960&key=5b3b05cf48614fbe1af3c1807e38905e6b8599409d6244052bf709c8376c96c0c57b37cfb4a208bb5701926ea09bb1ad115e12320e9467c50f0d3b6393c57145c37a632d1fdabf860b135859fc8512499a7b540ec0c9aa8f5d5c68ace850b9891fb22cd7afd2dbb74e3998a14e60e6489592a2f943e4f81840d0dc1a4d09cecf&ascene=1&uin=ODM1ODMyOTg%3D&devicetype=Windows+10+x64&version=6305002e&lang=zh_CN&exportkey=Azrev4yXecuFNPxtJwPmzFQ%3D&acctmode=0&pass_ticket=vZ6tfGv4Q3DuDEyXwCwSq8QLvLBMjyy8Xqz%2FDX6Dd%2FCwjHwinCrFi9iS1lGHe5f7&wx_header=0&fontgear=2)对「爬虫jar加载速度」、「自动播放下一页」这两项优化比较感兴趣，很实用。

### **图文教程+视频教程**

**【软件介绍与自定义接口教程】**

[![图片](https://mmbiz.qpic.cn/mmbiz_png/aznpE5XXmS8icXvKR0FznXwqwEYVCRLmgAEjf63p4N8UN7sxzIaJ6So30sUTedVMq3rjiccpFG6XKibANaCD9n0bg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)](http://mp.weixin.qq.com/s?__biz=MzA3NTA2MjQ5Mg==&mid=2449557614&idx=1&sn=3320dd488c6be5e54b8f332998967a88&chksm=8883a5ddbff42ccbb1c9cd726fa12093edde5479e333dbe9d11ceb1ff0870bd7c7d0f9c4af8e&scene=21#wechat_redirect)

**【Xpath解析说明】**

1、Xpath解析；

2、超宽屏适配；

Xpath解析实际上是猫影视作者设定的“爬虫片源规则模板”，只要用户按照这个 规则模板套用编写爬虫片源规则，基本上就可以爬取任何影视资源站。

“爬虫片源规则模板”地址：

https://github.com/catvod/CatVodTVSpider/blob/master/XPath.md

**04片源接口大替换，稳定才是王道**

**【聚合源接口使用】**

「猫影视TV2.0.9」版使用后台提供的专用接口,**基本是秒播，超级流畅。**

![图片](https://mmbiz.qpic.cn/mmbiz_png/aznpE5XXmSicCxx5ibkXfxfRDxbnnbyvPekhADAGUj23kjMibjgUxhvhRc9seiaUzRgMRvF0FWwmELkk0UTWyVuTiaQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

**「猫影视TV2.0.9」以下的版本使用后台提供的其它聚合源接口：**

优先选择聚合片源接口『213013』、「212757」，支持很多爬虫源，最为稳定、流畅性也最好；

![图片](https://mmbiz.qpic.cn/mmbiz_png/aznpE5XXmS9pdDwTOeFrD69cFE30QXoAPELOOUrfwC4DQZ22tUdnrMAFSgCEF9ahvWt1cpqxFHZUAwxJ4rNEfg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

![图片](https://mmbiz.qpic.cn/mmbiz_png/aznpE5XXmS9pdDwTOeFrD69cFE30QXoAVhVpAR6CnuUpZRzUfDLltWSEvZlHz1oJ2sVgtHyicANzrnE3Ueam6dQ/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

「212757」这个片源接口也不错，超级强大，内置有40余个优质影视片源，主要分以下几个类型：

**增加****爬虫源****：**瓜皮TV、枫林网、剧迷、嗯哩嗯哩、爱迪等等，凡是备注「爬虫」的都是爬虫源。

——强大之处是，不受站点局限，全网爬取解析免费无广告优质影视剧，支持设置为首页数据。

**增加****阿里网盘源：**蛋蛋影院、YYDS影视（阿里网盘资源）；

——阿里网盘影视资源的优势是，可以白嫖阿里云的云加速播放功能，这种片源不存在播放卡顿的问题，但是，影视版权搞得这么严，这种片源怕是命不久矣。

![图片](https://mmbiz.qpic.cn/mmbiz_png/S455MahF3P29mYvwrBibCYJjibicZ3g72AoVwRVmibAuctqh6BqQLLDPHMWEq9d3526ORg1Pyy2syvFcun7tLPbPew/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

**增加** 搜索源：追剧达人、小易影视、影视工厂、蓝果影视等等，凡是备注了「搜」的都是搜索源；

——特点是，搜索源只提供在线搜索、点播全网影视剧，不支持设置为首页数据。

![图片](https://mmbiz.qpic.cn/mmbiz_png/S455MahF3P29mYvwrBibCYJjibicZ3g72AoVoacNpoLxO3WX1buZ35bicV3McaibOCNI2kWVsPBkd1rAenbkTFKBAIg/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

增加**Xpath片源**：极品直链、NFMovies、大师兄、独播库、骚火电影、动漫巴士等等，凡是备注有「XPath」的都是「Xpath解析源」，实际上就是猫影视作者设定的“爬虫片源规则模板”，上面已经介绍过。

![图片](https://mmbiz.qpic.cn/mmbiz_png/S455MahF3P29mYvwrBibCYJjibicZ3g72AoQeM3W8VET5B8nSjU5RxS3yKTaqB1XMYVW2xRHYic9jodeAYI0V2SDow/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

### **05软件实测**

**【软件实测】**

1、「猫影视TV2.0.9」版与旧版可以共存，有一些爬虫源接口仅支持「猫影视TV2.0.9」版。

![图片](https://mmbiz.qpic.cn/mmbiz_png/aznpE5XXmS9MdBy33neVxBj7gOAYibSyJFpkHabV2icpxiaib2om4jRuBFuy80mDzHlyTV8oA9fxDfiaf273TeBoegA/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

![图片](https://mmbiz.qpic.cn/mmbiz_png/aznpE5XXmSicyNgN7KNY3u8TLopEIWTGLyz6LOt8OxeOBzw5pYibnWme4fwjUD8Fr6UqxruDYxGLYewX2licHHictw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

![图片](https://mmbiz.qpic.cn/mmbiz_png/lEPfOPOPdlHNBwDvPp8WUA7FnoN3Pm6xu4icWrtGiaLphVklGFfE2EgicWZGCLh56Dn7leyHjsCxgD0ku3a0nos0g/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

2、根据实测，电视盒子设置为硬解码模式后，播放会更加流畅；

3、如果安卓系统5.0以下解析失败，建议在设置里开启xwalkview，会更好。

![图片](https://mmbiz.qpic.cn/mmbiz_png/lEPfOPOPdlHu42cL1O6MZgdzJAatmso48BJzxO6nannLqlv9sjm3A49r0rjhILfibicYViaFvXjT3FX3Cf8amEvog/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

**【自定义接口汇总】**

1、播放壳和内容分离后，自定义片源接口决定播放质量。

2、[神器每日推送](https://mp.weixin.qq.com/s?__biz=MzIwMDM1MzYzMQ==&mid=2654417517&idx=1&sn=00222c78267a54ade64fa7c81e35e138&chksm=8d3de05dba4a694bfd393e0fc9b92cef1617b8ea1ece766e6cc891ba8a877179273dcc67dc59&scene=126&sessionid=1646570960&key=5b3b05cf48614fbe1af3c1807e38905e6b8599409d6244052bf709c8376c96c0c57b37cfb4a208bb5701926ea09bb1ad115e12320e9467c50f0d3b6393c57145c37a632d1fdabf860b135859fc8512499a7b540ec0c9aa8f5d5c68ace850b9891fb22cd7afd2dbb74e3998a14e60e6489592a2f943e4f81840d0dc1a4d09cecf&ascene=1&uin=ODM1ODMyOTg%3D&devicetype=Windows+10+x64&version=6305002e&lang=zh_CN&exportkey=Azrev4yXecuFNPxtJwPmzFQ%3D&acctmode=0&pass_ticket=vZ6tfGv4Q3DuDEyXwCwSq8QLvLBMjyy8Xqz%2FDX6Dd%2FCwjHwinCrFi9iS1lGHe5f7&wx_header=0&fontgear=2)搜集整理了多位大神制作的片源接口，累计20余个片源接口了，全部都可以使用。

![图片](https://mmbiz.qpic.cn/mmbiz_png/lEPfOPOPdlHu42cL1O6MZgdzJAatmso4kExDHNpVzxVCC417E0av4MsVGVwMTaCYa6mYNYZAttydmKmyrB9xzw/640?wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1)

3、片源主要包括三大类：爬虫类片源、搜索类片源、阿里网盘资源。

主要包括：人人迷免解源、快播云、阿房影视、极品影视、柚子资源、暮光影视、影视工厂、HG影视、追剧达人、追剧猫、新影视工厂、恐怖鸭、安逸影院、2A资源站、蘑菇资源、88资源、39影视、追剧吧等等。


code:
<?xml version="1.0" encoding="UTF-8"?>
<!--
This file is generated automatically.
-->
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.xwalk</groupId>
  <artifactId>xwalk_shared_library</artifactId>
  <version>23.53.589.4</version>
  <packaging>aar</packaging>
</project>