Update Up
|
Before Width: | Height: | Size: 96 KiB After Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
|
Before Width: | Height: | Size: 85 KiB After Width: | Height: | Size: 85 KiB |
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 267 KiB After Width: | Height: | Size: 267 KiB |
|
Before Width: | Height: | Size: 500 KiB After Width: | Height: | Size: 500 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 80 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 89 KiB After Width: | Height: | Size: 89 KiB |
|
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 87 KiB After Width: | Height: | Size: 87 KiB |
@@ -3,4 +3,6 @@ Telethon==1.37.0
|
||||
requests==2.32.4
|
||||
typing_extensions==4.12.2
|
||||
demoji==1.1.0
|
||||
tqdm==4.66.5
|
||||
tqdm==4.66.5
|
||||
|
||||
aiohttp>=3.9.0
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
name: Update Toos
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
actions: write
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '30 2 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
TZ: Asia/Shanghai
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
Update:
|
||||
runs-on: self-hosted
|
||||
timeout-minutes: 15
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: cluntop/tvbox
|
||||
token: ${{ secrets.GIT_TOKEN }}
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Delete old workflow runs
|
||||
uses: Mattraks/delete-workflow-runs@v2
|
||||
with:
|
||||
token: ${{ github.token }}
|
||||
repository: ${{ github.repository }}
|
||||
retain_days: 1
|
||||
keep_minimum_runs: 3
|
||||
|
||||
#- name: Set up Python
|
||||
# uses: actions/setup-python@v6
|
||||
# with:
|
||||
# python-version: '3.10'
|
||||
# cache: 'pip'
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
python -m venv .venv
|
||||
source .venv/bin/activate
|
||||
python -m pip install --upgrade pip
|
||||
if [ -f .github/requirements.txt ]; then pip install -r .github/requirements.txt; fi
|
||||
# pip install pandas requests
|
||||
|
||||
- name: Run M3U script
|
||||
run: |
|
||||
source .venv/bin/activate
|
||||
python py/ssjh.py
|
||||
|
||||
- name: Commit and Push changes
|
||||
run: |
|
||||
git config --global user.name "GitHub Actions"
|
||||
git config --global user.email "actions@github.com"
|
||||
|
||||
if [ -n "$(git status --porcelain)" ]; then
|
||||
echo "Changes detected, committing..."
|
||||
git add .
|
||||
git commit -m "Update m3u"
|
||||
|
||||
git pull --rebase origin main
|
||||
git push origin main
|
||||
else
|
||||
echo "No changes detected, skipping push."
|
||||
fi
|
||||
@@ -824,7 +824,6 @@
|
||||
"url": "./lib/18/rwcr.m3u",
|
||||
"ua": ""
|
||||
},
|
||||
|
||||
{
|
||||
"name": "LIVEfl",
|
||||
"type": 0,
|
||||
|
||||
@@ -1,1495 +0,0 @@
|
||||
{
|
||||
"spider": "./pg.jar",
|
||||
"sites": [
|
||||
{
|
||||
"key": "豆瓣",
|
||||
"name": "豆瓣",
|
||||
"type": 3,
|
||||
"api": "csp_Douban",
|
||||
"searchable": 0,
|
||||
"changeable": 1,
|
||||
"indexs": 1,
|
||||
"ext": "./lib/tokenm.json$$$./lib/douban.json"
|
||||
},
|
||||
{
|
||||
"key": "TGDouban",
|
||||
"name": "TG豆瓣",
|
||||
"type": 3,
|
||||
"api": "csp_TGDouban",
|
||||
"timeout": 120,
|
||||
"ext": {
|
||||
"token": "./lib/tokenm.json",
|
||||
"json": "./lib/tgsearch.json",
|
||||
"keywords": "名称,片名,推荐",
|
||||
"tgsearch_url": "http://127.0.0.1:10199",
|
||||
"tgsearch_media_url": "http://127.0.0.1:10199",
|
||||
"channellist": "tgsearchers3,leoziyuan,peccxinpd,yydf_hzl,vip115hot,clouddriveresources,q66share,yggpan,xiangxiunbb,oscardianying,dianying4k,wfysfx02,quarkfree,ucwpzy,ucquark,mcph860,mcph608,xunleibl,taoxgzy,yunpanx,kkxlzy,mcph086,dianyingshare,quark_movies,zyfx2022,alyp_1,quanziyuanshe,hdhhd21,guoman4k,duan_ju,q_dianying,q_dianshiju,sharepanfilms,mcph01,jdjdn1111,panjclub,baicaozy,yunpan189,tianyirigeng,cloudtianyi,tyysypzypd,txtyzy,kuakeclound,tyypzhpd,zyfb123,xx123pan,zyzhpd123,yingshifenxiang123,yp123pan,wp123zy115:oneonefivewpfx,lsp115,qukanmovie,channel_shares_115,share4115,ysxb48,aliyun:zaihuayun,sharealiyun,aliyun_4k_movies,aliyunys,qixingzhenren,yunpanuc,ucshare,ucwangpan",
|
||||
"proxy": "proxy",
|
||||
"douban": "./lib/douban.json",
|
||||
"danmu": true
|
||||
},
|
||||
"style": {
|
||||
"type": "rect",
|
||||
"ratio": 0.7
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "网盘配置",
|
||||
"name": "网盘及彈幕配置",
|
||||
"type": 3,
|
||||
"api": "csp_Config",
|
||||
"searchable": 0,
|
||||
"changeable": 0,
|
||||
"ext": "./lib/tokenm.json",
|
||||
"style": {
|
||||
"type": "rect",
|
||||
"ratio": 1.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "Local",
|
||||
"name": "本地",
|
||||
"type": 3,
|
||||
"api": "csp_Local"
|
||||
},
|
||||
{
|
||||
"key": "FirstAid",
|
||||
"name": "🚑 急救知识 ",
|
||||
"type": 3,
|
||||
"api": "csp_FirstAid",
|
||||
"searchable": 0,
|
||||
"quickSearch": 0,
|
||||
"changeable": 0,
|
||||
"style": {
|
||||
"type": "rect",
|
||||
"ratio": 3.8
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "bili",
|
||||
"name": "B站 | Bili[jar]",
|
||||
"type": 3,
|
||||
"api": "csp_Bili",
|
||||
"searchable": 1,
|
||||
"quickSearch": 0,
|
||||
"changeable": 0,
|
||||
"timeout": 60,
|
||||
"playerType": 2,
|
||||
"ext": {
|
||||
"type": "演唱会#电影#电视剧#帕梅拉#广场舞#纪录片#综艺#鬼畜#音乐#舞蹈#影视#知识#美食#风光#田园#户外#8K#徐云",
|
||||
"cookie": ""
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "TGYunPanLocal",
|
||||
"name": "TG频道搜索",
|
||||
"type": 3,
|
||||
"api": "csp_TGYunPanLocal",
|
||||
"timeout": 120,
|
||||
"ext": {
|
||||
"token": "./lib/tokenm.json",
|
||||
"json": "./lib/tgsearch.json",
|
||||
"keywords": "名称,片名,推荐",
|
||||
"tgsearch_url": "http://127.0.0.1:10199",
|
||||
"tgsearch_media_url": "http://127.0.0.1:10199",
|
||||
"channellist": "tgsearchers3,leoziyuan,peccxinpd,yydf_hzl,vip115hot,clouddriveresources,q66share,yggpan,xiangxiunbb,oscardianying,dianying4k,wfysfx02,quarkfree,ucwpzy,ucquark,mcph860,mcph608,xunleibl,taoxgzy,yunpanx,kkxlzy,mcph086,dianyingshare,quark_movies,zyfx2022,alyp_1,quanziyuanshe,hdhhd21,guoman4k,duan_ju,q_dianying,q_dianshiju,sharepanfilms,mcph01,jdjdn1111,panjclub,baicaozy,yunpan189,tianyirigeng,cloudtianyi,tyysypzypd,txtyzy,kuakeclound,tyypzhpd,zyfb123,xx123pan,zyzhpd123,yingshifenxiang123,yp123pan,wp123zy115:oneonefivewpfx,lsp115,qukanmovie,channel_shares_115,share4115,ysxb48,aliyun:zaihuayun,sharealiyun,aliyun_4k_movies,aliyunys,qixingzhenren,yunpanuc,ucshare,ucwangpan",
|
||||
"proxy": "proxy",
|
||||
"danmu": true
|
||||
},
|
||||
"style": {
|
||||
"type": "rect",
|
||||
"ratio": 1.77
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "TGYunPan",
|
||||
"name": "TG群组搜索",
|
||||
"type": 3,
|
||||
"api": "csp_TGYunPan",
|
||||
"timeout": 120,
|
||||
"ext": {
|
||||
"token": "./lib/tokenm.json",
|
||||
"json": "./lib/tgsearch.json",
|
||||
"keywords": "名称,片名,推荐",
|
||||
"tgsearch_url": "http://127.0.0.1:10199",
|
||||
"tgsearch_media_url": "http://127.0.0.1:10199",
|
||||
"channellist": "tgsearchers3,KFCYeah,tianyifc,BaiduCloudDisk,txtyzy,peccxinpd,gotopan,PanjClub,kkxlzy,baicaoZY,yggpan,zaihuayun,Q66Share,Oscar_4Kmovies,shareAliyun,alyp_1,Quark_Movies,XiangxiuNBB,ydypzyfx,ucquark,xx123pan,zyfb123,tyypzhpd,tianyirigeng,cloudtianyi,hdhhd21,Lsp115,qixingzhenren,tyysypzypd,vip115hot,wp123zy,yunpan189,yydf_hzl,leoziyuan",
|
||||
"proxy": "noproxy",
|
||||
"danmu": true
|
||||
},
|
||||
"style": {
|
||||
"type": "rect",
|
||||
"ratio": 1.77
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "Guanying",
|
||||
"name": "观影|网盘|磁力",
|
||||
"type": 3,
|
||||
"api": "csp_Guanying",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://www.gying.net$$$noproxy$$$1$$$./lib/guanying.txt$$$GUANYING"
|
||||
},
|
||||
{
|
||||
"key": "FourKZN",
|
||||
"name": "4K指南|网盘|磁力",
|
||||
"type": 3,
|
||||
"api": "csp_FourKZN",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$http://xuexizhinan.com/$$$noproxy$$$1$$$./lib/4kzn.txt$$$4KZN"
|
||||
},
|
||||
{
|
||||
"key": "FourKFox",
|
||||
"name": "4KFox|网盘|磁力",
|
||||
"type": 3,
|
||||
"api": "csp_FourKFox",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$http://4kfox.com/$$$noproxy$$$1$$$./lib/4kfox.txt$$$4KFOX"
|
||||
},
|
||||
{
|
||||
"key": "FourKFM",
|
||||
"name": "4K影库|网盘|磁力",
|
||||
"type": 3,
|
||||
"api": "csp_FourKFM",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$http://4kfm.com/$$$noproxy$$$1$$$./lib/4kfm.txt$$$4KFM"
|
||||
},
|
||||
{
|
||||
"key": "校长影视",
|
||||
"name": "校长影视|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_XiaoZhang",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://xzyshd.com$$$proxy$$$1"
|
||||
},
|
||||
{
|
||||
"key": "Wogg",
|
||||
"name": "玩偶哥哥|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Wogg",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$http://wogg.888484.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$WOGG"
|
||||
},
|
||||
{
|
||||
"key": "yydsys",
|
||||
"name": "玩你老哥|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Wobg",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://tv.yydsys.top/$$$proxy$$$1$$$./lib/wogg.json$$$WNLG"
|
||||
},
|
||||
{
|
||||
"key": "Mogg",
|
||||
"name": "木偶哥哥|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Wobg",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$http://123.666291.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$MOGG"
|
||||
},
|
||||
{
|
||||
"key": "至臻|网盘",
|
||||
"name": "至臻|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Wobg",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://mihdr.top/$$$noproxy$$$1$$$./lib/wogg.json$$$ZHIZHEN"
|
||||
},
|
||||
{
|
||||
"key": "Hmxz",
|
||||
"name": "海绵|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Hmxz",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://haimian.eu.org/$$$noproxy$$$1$$$./lib/hmxz.txt$$$HMXZ",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "Leijing",
|
||||
"name": "雷鲸|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Panta",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://leijing.xyz/$$$noproxy$$$1$$$./lib/leijing.txt$$$LEIJING",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "LIBVIO",
|
||||
"name": "LIBVIO|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Libvio",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$http://www.libvio.mov/$$$noproxy$$$1"
|
||||
},
|
||||
{
|
||||
"key": "Youtube",
|
||||
"name": "Youtube",
|
||||
"type": 3,
|
||||
"api": "csp_Youtube",
|
||||
"searchable": 1,
|
||||
"quickSearch": 0,
|
||||
"changeable": 0,
|
||||
"timeout": 120,
|
||||
"ext": {
|
||||
"token": "./lib/tokenm.json",
|
||||
"json": "./lib/youtube.json",
|
||||
"type": "直播#新闻#剧集#电影#综艺#纪录片#音乐#体育#动物#风光#放松#4K#HDR#movie#music#documentary#bbc documentary#national geographic documentary",
|
||||
"keywords": "排行榜,HOT,TRENDS,热门话题,热门趋势,热门综艺,热门电影,热门电视剧,小姐姐",
|
||||
"codecs": "",
|
||||
"proxy": "proxy",
|
||||
"danmu": true
|
||||
},
|
||||
"style": {
|
||||
"type": "rect",
|
||||
"ratio": 1.77
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "Guazi",
|
||||
"name": "瓜子|App",
|
||||
"type": 3,
|
||||
"api": "csp_Guazi",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": ""
|
||||
},
|
||||
{
|
||||
"key": "Moli",
|
||||
"name": "HDmoli|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Moli",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://www.hdmoli.pro/$$$proxy$$$1$$$./lib/moli.json"
|
||||
},
|
||||
{
|
||||
"key": "ddys",
|
||||
"name": "低端影视|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Ddys",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://ddys.pro/$$$proxy$$$1$$$"
|
||||
},
|
||||
{
|
||||
"key": "美剧迷",
|
||||
"name": "美剧迷|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Meijumi",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 120,
|
||||
"ext": "./lib/tokenm.json$$$https://www.meijumi.net/$$$proxy$$$1"
|
||||
},
|
||||
{
|
||||
"key": "WebDAV",
|
||||
"name": "WebDAV[jar]",
|
||||
"type": 3,
|
||||
"api": "csp_WebDAV",
|
||||
"searchable": 1,
|
||||
"filterable": 1,
|
||||
"changeable": 1,
|
||||
"timeout": 60,
|
||||
"playerType": 2,
|
||||
"ext": "./lib/webdav.json"
|
||||
},
|
||||
{
|
||||
"key": "AList",
|
||||
"name": "网盘|Alist[jar]",
|
||||
"type": 3,
|
||||
"api": "csp_AList",
|
||||
"searchable": 1,
|
||||
"filterable": 1,
|
||||
"changeable": 1,
|
||||
"timeout": 60,
|
||||
"playerType": 2,
|
||||
"ext": "./lib/alistjar.json"
|
||||
},
|
||||
{
|
||||
"key": "PushShare",
|
||||
"name": "我的资源分享",
|
||||
"type": 3,
|
||||
"api": "csp_PushShare",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 0,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$./lib/pushshare.txt$$$db$$$1",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "AlistShare",
|
||||
"name": "网盘分享合集",
|
||||
"type": 3,
|
||||
"api": "csp_AlistShare",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 0,
|
||||
"timeout": 120,
|
||||
"ext": "./lib/tokenm.json$$$null$$$proxy$$$1",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "AliShare",
|
||||
"name": "阿里云盘影视分享",
|
||||
"type": 3,
|
||||
"api": "csp_AliShare",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 0,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$./lib/alishare.txt$$$db$$$1",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "AliShareEBook",
|
||||
"name": "阿里云盘书籍分享",
|
||||
"type": 3,
|
||||
"api": "csp_AliShare",
|
||||
"searchable": 0,
|
||||
"quickSearch": 0,
|
||||
"changeable": 0,
|
||||
"filterable": 0,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$./lib/alishare.ebook.txt$$$db$$$1",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "QuarkShare",
|
||||
"name": "夸克云盘分享",
|
||||
"type": 3,
|
||||
"api": "csp_QuarkShare",
|
||||
"searchable": 1,
|
||||
"quickSearch": 0,
|
||||
"changeable": 0,
|
||||
"filterable": 0,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$./lib/quarkshare.txt",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "123Share",
|
||||
"name": "123云盘分享",
|
||||
"type": 3,
|
||||
"api": "csp_P123Share",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"changeable": 0,
|
||||
"filterable": 0,
|
||||
"timeout": 120,
|
||||
"ext": "./lib/tokenm.json$$$./lib/123share.txt$$$db$$$1",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "189Share",
|
||||
"name": "189云盘分享",
|
||||
"type": 3,
|
||||
"api": "csp_P189Share",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"changeable": 0,
|
||||
"filterable": 0,
|
||||
"timeout": 120,
|
||||
"ext": "./lib/tokenm.json$$$./lib/189share.txt$$$db$$$1",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "ThunderShare",
|
||||
"name": "迅雷云盘分享",
|
||||
"type": 3,
|
||||
"api": "csp_ThunderShare",
|
||||
"searchable": 1,
|
||||
"quickSearch": 0,
|
||||
"changeable": 0,
|
||||
"filterable": 0,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$./lib/thundershare.txt",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "UCShare",
|
||||
"name": "UC云盘分享",
|
||||
"type": 3,
|
||||
"api": "csp_UCShare",
|
||||
"searchable": 1,
|
||||
"quickSearch": 0,
|
||||
"changeable": 0,
|
||||
"filterable": 0,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$./lib/ucshare.txt$$$db$$$1",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "115Share",
|
||||
"name": "115云盘分享",
|
||||
"type": 3,
|
||||
"api": "csp_P115Share",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"changeable": 0,
|
||||
"filterable": 0,
|
||||
"timeout": 120,
|
||||
"ext": "./lib/tokenm.json$$$./lib/115share.txt$$$db$$$1",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "PikPakShare",
|
||||
"name": "PikPak分享",
|
||||
"type": 3,
|
||||
"api": "csp_PikPakShare",
|
||||
"searchable": 1,
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 0,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$./lib/pikpakclass.json$$$./lib/pikpakclass.json.txt.gz",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "SambaShare",
|
||||
"name": "Samba分享",
|
||||
"type": 3,
|
||||
"api": "csp_SambaShare",
|
||||
"searchable": 0,
|
||||
"quickSearch": 0,
|
||||
"changeable": 0,
|
||||
"filterable": 0,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$./lib/sambashare.txt"
|
||||
},
|
||||
{
|
||||
"key": "Hdhive",
|
||||
"name": "鸟窝|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Hdh",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 120,
|
||||
"ext": "./lib/tokenm.json$$$https://hdhive.com$$$noproxy$$$1$$$./lib/hdhive.txt"
|
||||
},
|
||||
{
|
||||
"key": "TianYiSou",
|
||||
"name": "天逸搜|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_TianYiSou",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$null$$$proxy"
|
||||
},
|
||||
{
|
||||
"key": "YunPan",
|
||||
"name": "云盘资源|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_YunPan",
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$null$$$proxy$$$1"
|
||||
},
|
||||
{
|
||||
"key": "YingSo",
|
||||
"name": "影搜|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_YingSo",
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json"
|
||||
},
|
||||
{
|
||||
"key": "混合盘",
|
||||
"name": "混合盘|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_HunHePan",
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "88Pan",
|
||||
"name": "88网盘|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_EightEight",
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://662688.xyz$$$",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "PanSearch",
|
||||
"name": "PanSearch|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_PanSearch",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$null$$$proxy"
|
||||
},
|
||||
{
|
||||
"key": "盘友圈",
|
||||
"name": "盘友圈|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_Panyq",
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$site$$$proxy"
|
||||
},
|
||||
{
|
||||
"key": "易搜",
|
||||
"name": "易搜|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_YiSo",
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$./lib/yiso.txt",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "秒搜",
|
||||
"name": "秒搜|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_MiaoSou",
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "Funletu",
|
||||
"name": "趣盘搜|夸克搜索",
|
||||
"type": 3,
|
||||
"api": "csp_Funletu",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "QuarkPanso",
|
||||
"name": "夸克盘搜|夸克搜索",
|
||||
"type": 3,
|
||||
"api": "csp_QuarkPanso",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "Panta",
|
||||
"name": "盘Ta|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Panta",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://www.91panta.cn/$$$null$$$1$$$./lib/panta.txt$$$PANTA",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "DaPanSo",
|
||||
"name": "大盘搜|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_DaPanSo",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://dapanso.com$$$proxy$$$1"
|
||||
},
|
||||
{
|
||||
"key": "PikaSo",
|
||||
"name": "皮卡搜|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_PikaSo",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://www.pikaso.top/$$$null",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "Qianfan",
|
||||
"name": "千帆|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_Qianfan",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://pan.qianfan.app$$$null$$$./lib/qianfan.txt$$$1"
|
||||
},
|
||||
{
|
||||
"key": "YunSo",
|
||||
"name": "小云搜索|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_YunSo",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://www.yunso.net$$$null$$$1",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "YunPanOne",
|
||||
"name": "云盘One|网盘搜索",
|
||||
"type": 3,
|
||||
"api": "csp_YunPanOne",
|
||||
"quickSearch": 1,
|
||||
"changeable": 1,
|
||||
"filterable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$null$$$proxy$$$1"
|
||||
},
|
||||
{
|
||||
"key": "新6V",
|
||||
"name": "新6V|网盘",
|
||||
"type": 3,
|
||||
"api": "csp_Xb6v",
|
||||
"searchable": 1,
|
||||
"changeable": 1,
|
||||
"timeout": 60,
|
||||
"ext": "./lib/tokenm.json$$$https://www.66ss.org$$$null$$$1"
|
||||
},
|
||||
{
|
||||
"key": "索尼资源",
|
||||
"name": "索尼┃资源",
|
||||
"type": 1,
|
||||
"api": "https://suoniapi.com/api.php/provide/vod/from/snm3u8/",
|
||||
"categories": [
|
||||
"动作片",
|
||||
"喜剧片",
|
||||
"爱情片",
|
||||
"科幻片",
|
||||
"恐怖片",
|
||||
"剧情片",
|
||||
"战争片",
|
||||
"国产剧",
|
||||
"欧美剧",
|
||||
"韩剧",
|
||||
"日剧",
|
||||
"港剧",
|
||||
"台剧",
|
||||
"泰剧",
|
||||
"海外剧",
|
||||
"纪录片",
|
||||
"大陆综艺",
|
||||
"日韩综艺",
|
||||
"港台综艺",
|
||||
"欧美综艺",
|
||||
"国产动漫",
|
||||
"日韩动漫",
|
||||
"欧美动漫",
|
||||
"动画片",
|
||||
"港台动漫",
|
||||
"海外动漫",
|
||||
"演唱会",
|
||||
"体育赛事",
|
||||
"篮球",
|
||||
"足球",
|
||||
"预告片",
|
||||
"斯诺克",
|
||||
"影视解说"
|
||||
],
|
||||
"searchable": 1,
|
||||
"quickSearch": 1
|
||||
},
|
||||
{
|
||||
"key": "UP云搜",
|
||||
"name": "阿里|UP云搜",
|
||||
"type": 3,
|
||||
"api": "csp_UpYun",
|
||||
"timeout": 30,
|
||||
"ext": "./lib/tokenm.json",
|
||||
"style": {
|
||||
"type": "list",
|
||||
"ratio": 1.1
|
||||
}
|
||||
},
|
||||
{
|
||||
"key": "BLSGod",
|
||||
"name": "BLSGod|磁",
|
||||
"type": 3,
|
||||
"api": "csp_BLSGod",
|
||||
"changeable": 1,
|
||||
"timeout": 60
|
||||
},
|
||||
{
|
||||
"key": "SeedHub",
|
||||
"name": "SeedHub|磁",
|
||||
"type": 3,
|
||||
"api": "csp_SeedHub",
|
||||
"changeable": 1,
|
||||
"timeout": 60
|
||||
},
|
||||
{
|
||||
"key": "ikun",
|
||||
"name": "ikun",
|
||||
"type": 1,
|
||||
"api": "http://127.0.0.1:10079/p/0/proxy/https://ikunzyapi.com/api.php/provide/vod/?",
|
||||
"playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=",
|
||||
"playerType": 1,
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "暴風",
|
||||
"name": "暴風",
|
||||
"type": 1,
|
||||
"api": "http://127.0.0.1:10079/p/0/proxy/https://bfzyapi.com/api.php/provide/vod?",
|
||||
"playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=",
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "索尼",
|
||||
"name": "索尼 ",
|
||||
"type": 1,
|
||||
"api": "http://127.0.0.1:10079/p/0/proxy/https://suoniapi.com/api.php/provide/vod?",
|
||||
"playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=",
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "量子",
|
||||
"name": "量子",
|
||||
"type": 1,
|
||||
"api": "http://127.0.0.1:10079/p/0/proxy/http://cj.lziapi.com/api.php/provide/vod/?",
|
||||
"playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=",
|
||||
"playerType": 1,
|
||||
"searchable": 1,
|
||||
"changeable": 1
|
||||
},
|
||||
{
|
||||
"key": "非凡",
|
||||
"name": "非凡",
|
||||
"type": 1,
|
||||
"api": "http://127.0.0.1:10079/p/0/proxy/http://cj.ffzyapi.com/api.php/provide/vod/?",
|
||||
"playUrl": "json:http://127.0.0.1:10079/parse/?thread=0&proxy=proxy&url=",
|
||||
"playerType": 1,
|
||||
"searchable": 1,
|
||||
"changeable": 1,
|
||||
"categories": [
|
||||
"国产动漫",
|
||||
"日韩动漫",
|
||||
"国产剧",
|
||||
"韩国剧",
|
||||
"日本剧",
|
||||
"电影片",
|
||||
"连续剧",
|
||||
"综艺片",
|
||||
"动漫片",
|
||||
"动作片",
|
||||
"喜剧片",
|
||||
"爱情片",
|
||||
"科幻片",
|
||||
"恐怖片",
|
||||
"剧情片",
|
||||
"战争片",
|
||||
"香港剧",
|
||||
"欧美剧",
|
||||
"记录片",
|
||||
"台湾剧",
|
||||
"海外剧",
|
||||
"泰国剧",
|
||||
"大陆综艺",
|
||||
"港台综艺",
|
||||
"日韩综艺",
|
||||
"欧美综艺",
|
||||
"欧美动漫",
|
||||
"港台动漫",
|
||||
"海外动漫"
|
||||
]
|
||||
},
|
||||
{
|
||||
"key": "異界",
|
||||
"name": "異界",
|
||||
"type": 3,
|
||||
"api": "csp_Ysj",
|
||||
"searchable": 1,
|
||||
"changeable": 0
|
||||
},
|
||||
{
|
||||
"key": "drpy_js_Alist",
|
||||
"name": "网盘 | Alist[js]",
|
||||
"type": 3,
|
||||
"api": "./lib/alist.min.js",
|
||||
"searchable": 1,
|
||||
"filterable": 1,
|
||||
"changeable": 1,
|
||||
"ext": "./js/alist.json"
|
||||
},
|
||||
{
|
||||
"key": "酷狗",
|
||||
"name": "酷狗",
|
||||
"type": 3,
|
||||
"api": "csp_Kugou",
|
||||
"searchable": 1,
|
||||
"changeable": 0
|
||||
},
|
||||
{
|
||||
"key": "Yinyuetai",
|
||||
"name": "音悦台",
|
||||
"type": 3,
|
||||
"api": "csp_Yinyuetai",
|
||||
"searchable": 1,
|
||||
"changeable": 0
|
||||
},
|
||||
{
|
||||
"key": "push_agent",
|
||||
"name": "推送",
|
||||
"type": 3,
|
||||
"api": "csp_Push",
|
||||
"changeable": 0,
|
||||
"timeout": 30,
|
||||
"ext": "./lib/tokenm.json"
|
||||
},
|
||||
{
|
||||
"key": "應用商店",
|
||||
"name": "應用商店",
|
||||
"type": 3,
|
||||
"api": "csp_Market",
|
||||
"searchable": 0,
|
||||
"changeable": 0,
|
||||
"ext": "https://fm.t4tv.hz.cz/json/market.json"
|
||||
},
|
||||
{
|
||||
"key": "直播转点播",
|
||||
"name": "🐼️┃电视┃直播",
|
||||
"type": 3,
|
||||
"searchable": 0,
|
||||
"api": "./lib/live2vod.js",
|
||||
"ext": "./lib/feimaolive.json"
|
||||
}
|
||||
],
|
||||
"lives": [
|
||||
{
|
||||
"name": "最强国内直播(合并版)",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/all.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png",
|
||||
"catchup": {
|
||||
"type": "append",
|
||||
"source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "最强国内直播",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/tv.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png",
|
||||
"catchup": {
|
||||
"type": "append",
|
||||
"source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "最强国内直播(EPG-1天回看)",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/tv.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE1SUB",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png",
|
||||
"catchup": {
|
||||
"type": "append",
|
||||
"source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "FeiYang牧场",
|
||||
"type": 0,
|
||||
"url": "http://sub.ottiptv.cc/iptv.m3u",
|
||||
"ua": "okHttp/Mod-1.3.0.0",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE1SUB",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png",
|
||||
"catchup": {
|
||||
"type": "append",
|
||||
"source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "BJYD",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bjyd.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png",
|
||||
"catchup": {
|
||||
"type": "append",
|
||||
"source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "BJYD(EPG-1天回看)",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bjyd.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE1SUB",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png",
|
||||
"catchup": {
|
||||
"type": "append",
|
||||
"source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "BJYD(EPG-2天回看)",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bjyd.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE2SUB",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png",
|
||||
"catchup": {
|
||||
"type": "append",
|
||||
"source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "BJYD(EPG-3天回看)",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bjyd.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date=DATE3SUB",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png",
|
||||
"catchup": {
|
||||
"type": "append",
|
||||
"source": "?livemode=4&starttime=${(b)yyyyMMdd'T'HHmm}00.00Z&endtime=${(e)yyyyMMdd'T'HHmm}00.00Z"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "BIPTV(IPV6,可回看)",
|
||||
"type": 0,
|
||||
"url": "./lib/biptv.txt",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "PandaGo投屏直播接收记录",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/dlnam3u/tv.m3u",
|
||||
"ua": "okhttp/3.15.",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "FMM.m3u",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/proxy/https://raw.githubusercontent.com/fanmingming/live/refs/heads/main/tv/m3u/ipv6.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "FMM.m3u.音质增强",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/mp4/3600/proxy/https://raw.githubusercontent.com/fanmingming/live/refs/heads/main/tv/m3u/ipv6.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "肥羊TX赛事直播",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/60/null/http://127.0.0.1:35456/txevent.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "肥羊QY赛事直播",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/60/null/http://127.0.0.1:35456/iqyevent.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "肥羊B站直播",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/bililive.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "肥羊B站直播.音质增强",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/mp4/3600/null/http://127.0.0.1:35456/bililive.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "肥羊虎牙一起看",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/huyayqk.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "肥羊虎牙一起看.音质增强",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/mp4/3600/null/http://127.0.0.1:35456/huyayqk.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "肥羊斗鱼一起看",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/douyuyqk.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "肥羊斗鱼一起看.音质增强",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/mp4/3600/null/http://127.0.0.1:35456/douyuyqk.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "肥羊YY轮播",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/null/http://127.0.0.1:35456/yylunbo.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "YTB直播",
|
||||
"type": 0,
|
||||
"url": "./lib/ytblive.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "AKTV.电视直播",
|
||||
"type": 0,
|
||||
"url": "http://aktv.top/live.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "Gather.电视直播",
|
||||
"type": 0,
|
||||
"url": "https://tv.iill.top/m3u/Gather",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "Gather.网络直播",
|
||||
"type": 0,
|
||||
"url": "https://tv.iill.top/m3u/Live",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "FMM.txt",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/proxy/https://fanmingming.com/txt?url=https://live.fanmingming.cn/tv/m3u/ipv6.m3u",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "zouming.ipv6",
|
||||
"type": 0,
|
||||
"url": "http://127.0.0.1:10079/c/3600/proxy/http://ww.zouming.com/ipv6.txt",
|
||||
"ua": "okhttp/3.15",
|
||||
"epg": "http://127.0.0.1:10079/p/0/proxy/http://epg.112114.xyz/?ch={name}&date={date}",
|
||||
"logo": "http://127.0.0.1:10079/p/0/proxy/https://epg.112114.xyz/logo/{name}.png"
|
||||
},
|
||||
{
|
||||
"name": "YTLive",
|
||||
"type": 0,
|
||||
"url": "./lib/yo21.txt"
|
||||
},
|
||||
{
|
||||
"group": "redirect",
|
||||
"channels": [
|
||||
{
|
||||
"name": "redirect",
|
||||
"urls": [
|
||||
"proxy://do=live&type=live&proxy=&url="
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"doh": [
|
||||
{
|
||||
"name": "Google",
|
||||
"url": "https://dns.google/dns-query",
|
||||
"ips": [
|
||||
"8.8.4.4",
|
||||
"8.8.8.8"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Cloudflare",
|
||||
"url": "https://cloudflare-dns.com/dns-query",
|
||||
"ips": [
|
||||
"1.1.1.1",
|
||||
"1.0.0.1",
|
||||
"2606:4700:4700::1111",
|
||||
"2606:4700:4700::1001"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "AdGuard",
|
||||
"url": "https://dns.adguard.com/dns-query",
|
||||
"ips": [
|
||||
"94.140.14.140",
|
||||
"94.140.14.141"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "DNSWatch",
|
||||
"url": "https://resolver2.dns.watch/dns-query",
|
||||
"ips": [
|
||||
"84.200.69.80",
|
||||
"84.200.70.40"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "Quad9",
|
||||
"url": "https://dns.quad9.net/dns-quer",
|
||||
"ips": [
|
||||
"9.9.9.9",
|
||||
"149.112.112.112"
|
||||
]
|
||||
}
|
||||
],
|
||||
"proxy": [
|
||||
"raw.githubusercontent.com",
|
||||
"googlevideo.com",
|
||||
"cdn.v82u1l.com",
|
||||
"cdn.iz8qkg.com",
|
||||
"cdn.kin6c1.com",
|
||||
"c.biggggg.com",
|
||||
"c.olddddd.com",
|
||||
"haiwaikan.com",
|
||||
"www.histar.tv",
|
||||
"youtube.com",
|
||||
"uhibo.com",
|
||||
".*boku.*",
|
||||
".*nivod.*",
|
||||
".*ulivetv.*"
|
||||
],
|
||||
"hosts": [
|
||||
"cache.ott.ystenlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com",
|
||||
"cache.ott.bestlive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com",
|
||||
"cache.ott.wasulive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com",
|
||||
"cache.ott.fifalive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com",
|
||||
"cache.ott.hnbblive.itv.cmvideo.cn=base-v4-free-mghy.e.cdn.chinamobile.com"
|
||||
],
|
||||
"rules": [
|
||||
{
|
||||
"name": "proxy",
|
||||
"hosts": [
|
||||
"raw.githubusercontent.com",
|
||||
"googlevideo.com",
|
||||
"cdn.v82u1l.com",
|
||||
"cdn.iz8qkg.com",
|
||||
"cdn.kin6c1.com",
|
||||
"c.biggggg.com",
|
||||
"c.olddddd.com",
|
||||
"haiwaikan.com",
|
||||
"www.histar.tv",
|
||||
"youtube.com",
|
||||
"uhibo.com",
|
||||
".*boku.*",
|
||||
".*nivod.*",
|
||||
"*.t4tv.hz.cz",
|
||||
".*ulivetv.*"
|
||||
]
|
||||
},
|
||||
{
|
||||
"host": "www.djuu.com",
|
||||
"rule": [
|
||||
"mp4.djuu.com",
|
||||
"m4a"
|
||||
]
|
||||
},
|
||||
{
|
||||
"host": "www.sharenice.net",
|
||||
"rule": [
|
||||
"huoshan.com",
|
||||
"/item/video/"
|
||||
],
|
||||
"filter": []
|
||||
},
|
||||
{
|
||||
"host": "www.sharenice.net",
|
||||
"rule": [
|
||||
"sovv.qianpailive.com",
|
||||
"vid="
|
||||
],
|
||||
"filter": []
|
||||
},
|
||||
{
|
||||
"host": "www.sharenice.net",
|
||||
"rule": [
|
||||
"douyin.com",
|
||||
"/play/"
|
||||
]
|
||||
},
|
||||
{
|
||||
"host": "m.ysxs8.vip",
|
||||
"rule": [
|
||||
"ysting.ysxs8.vip:81",
|
||||
"xmcdn.com"
|
||||
],
|
||||
"filter": []
|
||||
},
|
||||
{
|
||||
"host": "hdmoli.com",
|
||||
"rule": [
|
||||
".m3u8"
|
||||
]
|
||||
},
|
||||
{
|
||||
"host": "https://api.live.bilibili.com",
|
||||
"rule": [
|
||||
"bilivideo.com",
|
||||
"/index.m3u8"
|
||||
],
|
||||
"filter": [
|
||||
"data.bilibili.com/log/web",
|
||||
"i0.hdslb.com/bfs/live/"
|
||||
]
|
||||
},
|
||||
{
|
||||
"host": "www.agemys.cc",
|
||||
"rule": [
|
||||
"cdn-tos",
|
||||
"obj/tos-cn"
|
||||
]
|
||||
},
|
||||
{
|
||||
"host": "www.fun4k.com",
|
||||
"rule": [
|
||||
"https://hd.ijycnd.com/play",
|
||||
"index.m3u8"
|
||||
]
|
||||
},
|
||||
{
|
||||
"host": "zjmiao.com",
|
||||
"rule": [
|
||||
"play.videomiao.vip/API.php",
|
||||
"time=",
|
||||
"key=",
|
||||
"path="
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "火山嗅探",
|
||||
"hosts": [
|
||||
"huoshan.com"
|
||||
],
|
||||
"regex": [
|
||||
"item_id="
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "抖音嗅探",
|
||||
"hosts": [
|
||||
"douyin.com"
|
||||
],
|
||||
"regex": [
|
||||
"is_play_url="
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "農民嗅探",
|
||||
"hosts": [
|
||||
"toutiaovod.com"
|
||||
],
|
||||
"regex": [
|
||||
"video/tos/cn"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "夜市",
|
||||
"hosts": [
|
||||
"yeslivetv.com"
|
||||
],
|
||||
"script": [
|
||||
"document.getElementsByClassName('vjs-big-play-button')[0].click()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "毛驢",
|
||||
"hosts": [
|
||||
"www.maolvys.com"
|
||||
],
|
||||
"script": [
|
||||
"document.getElementsByClassName('swal-button swal-button--confirm')[0].click()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "磁力广告",
|
||||
"hosts": [
|
||||
"magnet"
|
||||
],
|
||||
"regex": [
|
||||
"更多",
|
||||
"社 區",
|
||||
"x u u",
|
||||
"最 新",
|
||||
"直 播",
|
||||
"更 新",
|
||||
"社 区",
|
||||
"有 趣",
|
||||
"英皇体育",
|
||||
"全中文AV在线",
|
||||
"澳门皇冠赌场",
|
||||
"哥哥快来",
|
||||
"美女荷官",
|
||||
"裸聊",
|
||||
"新片首发",
|
||||
"UUE29"
|
||||
]
|
||||
}
|
||||
],
|
||||
"parses": [],
|
||||
"flags": [
|
||||
"youku",
|
||||
"qq",
|
||||
"iqiyi",
|
||||
"qiyi",
|
||||
"letv",
|
||||
"sohu",
|
||||
"tudou",
|
||||
"pptv",
|
||||
"mgtv",
|
||||
"wasu"
|
||||
],
|
||||
"wallpaper": "http://饭太硬.top/深色壁纸/api.php",
|
||||
"disabled_wallpaper": "http://www.kf666888.cn/api/tvbox/img"
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
c10464a367e55bef8b5c1ab58995144a
|
||||
@@ -0,0 +1,151 @@
|
||||
# coding=utf-8
|
||||
import os
|
||||
import logging
|
||||
import sys
|
||||
import asyncio
|
||||
import aiohttp
|
||||
|
||||
BASE_URL = "http://api.hclyz.com:81/mf"
|
||||
|
||||
SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
TARGET_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "..", "lib"))
|
||||
M3U_FILE = os.path.join(TARGET_DIR, "18/sbjh.m3u")
|
||||
|
||||
BLACK_LIST = ["支付宝风控解除", "依依实力带飞"]
|
||||
|
||||
HEADERS = {"User-Agent": "Mozilla/5.0"}
|
||||
VALID_PREFIX = ("http://", "https://", "rtmp://")
|
||||
|
||||
MAX_WORKERS = 15
|
||||
|
||||
def setup_logging():
|
||||
logger = logging.getLogger("ScraperLogger")
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
formatter = logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
||||
|
||||
console_handler = logging.StreamHandler(sys.stdout)
|
||||
console_handler.setFormatter(formatter)
|
||||
logger.addHandler(console_handler)
|
||||
|
||||
return logger
|
||||
|
||||
log = setup_logging()
|
||||
|
||||
async def safe_get_json(url, session):
|
||||
try:
|
||||
async with session.get(url, headers=HEADERS, timeout=10) as r:
|
||||
if r.status != 200:
|
||||
return None
|
||||
return await r.json(content_type=None)
|
||||
except Exception as e:
|
||||
log.error(f"Request Exception: {url} -> {e}")
|
||||
return None
|
||||
|
||||
def is_valid_stream(url):
|
||||
url = url.lower()
|
||||
return url.startswith(VALID_PREFIX) and (".m3u8" in url or ".flv" in url or ".mp4" in url or url.startswith("rtmp://"))
|
||||
|
||||
async def process_platform(item, session, sem):
|
||||
async with sem:
|
||||
room_title = item.get("title", "").strip()
|
||||
number = item.get("Number", "")
|
||||
address = item.get("address", "")
|
||||
|
||||
log.info(f"📺 Concurrent requests:{room_title}({number})")
|
||||
|
||||
detail = await safe_get_json(f"{BASE_URL}/{address}", session)
|
||||
if not detail:
|
||||
return room_title, [], 1, 0
|
||||
|
||||
zhubo = detail.get("zhubo", [])
|
||||
if not zhubo:
|
||||
return room_title, [], 1, 0
|
||||
|
||||
group_name = f"{room_title}"
|
||||
results = []
|
||||
errors = 0
|
||||
filtered = 0
|
||||
|
||||
for vod in zhubo:
|
||||
name = vod.get("title", "").strip()
|
||||
url = vod.get("address", "").strip()
|
||||
|
||||
if any(keyword in name for keyword in BLACK_LIST):
|
||||
log.info(f"🚫 Blocked words: {name}")
|
||||
filtered += 1
|
||||
continue
|
||||
|
||||
if not url or not is_valid_stream(url):
|
||||
errors += 1
|
||||
continue
|
||||
|
||||
results.append((group_name, name, url))
|
||||
|
||||
return room_title, results, errors, filtered
|
||||
|
||||
async def main_async():
|
||||
total_error = 0
|
||||
total_success = 0
|
||||
total_filtered = 0
|
||||
|
||||
log.info("🚀 Task initiated.")
|
||||
log.info(f"📂 Output the absolute path:{M3U_FILE}")
|
||||
|
||||
# aiohttp 连接池配置
|
||||
connector = aiohttp.TCPConnector(limit=MAX_WORKERS)
|
||||
async with aiohttp.ClientSession(connector=connector) as session:
|
||||
|
||||
home = await safe_get_json(f"{BASE_URL}/json.txt", session)
|
||||
if not home:
|
||||
log.error("❌ Retrieval failed, collection terminated.")
|
||||
sys.exit(1)
|
||||
|
||||
data = home.get("pingtai", [])[1:]
|
||||
data = sorted(data, key=lambda x: int(x.get("Number", 0) or 0), reverse=True)
|
||||
|
||||
m3u_lines = ["#EXTM3U"]
|
||||
seen_urls = set()
|
||||
|
||||
log.info(f"⚡ Multi-threading (Async): {MAX_WORKERS}")
|
||||
|
||||
sem = asyncio.Semaphore(MAX_WORKERS)
|
||||
|
||||
tasks = [process_platform(item, session, sem) for item in data]
|
||||
|
||||
results = await asyncio.gather(*tasks)
|
||||
|
||||
for room_title, res, errors, filtered in results:
|
||||
total_error += errors
|
||||
total_filtered += filtered
|
||||
|
||||
for group_name, name, url in res:
|
||||
if url in seen_urls:
|
||||
continue
|
||||
|
||||
seen_urls.add(url)
|
||||
m3u_lines.append(f'#EXTINF:-1 group-title="{group_name}",{name}')
|
||||
m3u_lines.append(url)
|
||||
total_success += 1
|
||||
|
||||
try:
|
||||
os.makedirs(os.path.dirname(M3U_FILE), exist_ok=True)
|
||||
|
||||
with open(M3U_FILE, "w", encoding="utf-8") as f:
|
||||
f.write("\n".join(m3u_lines))
|
||||
log.info(f"📄 It has been generated and saved.")
|
||||
log.info(f"✅ Absolute path: {M3U_FILE}")
|
||||
except Exception as e:
|
||||
log.error(f"❌ Failed to write to file: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
summary_msg = f"Collection completed, valid:{total_success},Shield:{total_filtered},abnormal:{total_error}"
|
||||
log.info(summary_msg)
|
||||
|
||||
print(f"::notice title=📁 Save path: {M3U_FILE}::{summary_msg}")
|
||||
|
||||
def main():
|
||||
asyncio.run(main_async())
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||