up
This commit is contained in:
Liu committed 2025-04-19 02:11:07 +08:00
1 parent 29b45a8f67
commit 631ac04fc1
34 files changed
+99127 -25028

No files matched your search

+1 -14
View File
@@ -213,7 +213,7 @@
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": "https://www.momp4.cc"
"ext": "https://www.xlmp4.com"
},
{
"key": "csp_New6v",
@@ -553,19 +553,6 @@
"filter": "./json/wogg.json"
}
},
{
"key": "MIUC",
"name": "💌MIUC",
"type": 3,
"api": "csp_kongbai",
"searchable": 1,
"changeable": 0,
"ext": {
"commonConfig": "./json/peizhi.json",
"siteUrl": "https://mucpan.cc/",
"filter": "./json/wogg.json"
}
},
{
"key": "闪电",
"name": "⚡闪电",
-33
View File
@@ -1,11 +1,9 @@
央视,#genre#
CCTV1,http://home.kuaidi521.com:35455/gaoma/cctv1.m3u8
CCTV1,http://xiaoya.crccxw.top:35455/gaoma/cctv1.m3u8
CCTV1,http://58.220.219.14:9901/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV1,http://175.31.21.146:4480/hls/1/index.m3u8
CCTV1,http://58.220.211.90:352/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid$LR•IPV4『线路274』
CCTV1,http://58.220.211.90:352/tsfile/live/0001_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路275』
CCTV1,http://3501776.xyz:35455/gaoma/cctv1.m3u8
CCTV1,http://113.140.12.230:8888/newlive/live/hls/2/live.m3u8
CCTV1,http://222.219.183.103:8089/hls/1/index.m3u8
CCTV1,http://58.210.168.86:10800/newlive/live/hls/1/live.m3u8
@@ -13,7 +11,6 @@ CCTV2,http://222.169.85.8:9901/tsfile/live/0002_1.m3u8?key=txiptv&playlive=1&aut
CCTV2,http://39.164.160.249:9901/tsfile/live/0002_1.m3u8
CCTV2,http://175.31.21.146:4480/hls/2/index.m3u8
CCTV2,http://116.128.243.121:85/tsfile/live/0002_1.m3u8?key=txiptv&playlive=0&authid=0
CCTV2,http://3501776.xyz:35455/gaoma/cctv2.m3u8
CCTV2,http://113.140.12.230:8888/newlive/live/hls/3/live.m3u8
CCTV2,http://60.223.224.176:8888/newlive/live/hls/3/live.m3u8
CCTV3,http://222.134.19.31:352/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路247』
@@ -23,7 +20,6 @@ CCTV3,http://113.140.12.230:8888/newlive/live/hls/4/live.m3u8
CCTV3,http://222.169.85.8:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV3,http://222.169.85.8:9901/tsfile/live/0003_1.m3u8
CCTV3,http://112.46.85.60:8009/hls/3/index.m3u8
CCTV3,http://3501776.xyz:35455/gaoma/cctv3.m3u8
CCTV3,http://218.29.168.146:352/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV3,http://58.220.219.14:9901/tsfile/live/0003_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV4,http://113.140.12.230:8888/newlive/live/hls/5/live.m3u8
@@ -34,14 +30,11 @@ CCTV5,http://60.223.224.176:8888/newlive/live/hls/6/live.m3u8
CCTV5,http://113.140.12.230:8888/newlive/live/hls/6/live.m3u8
CCTV5,http://116.9.204.242:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路177』
CCTV5,http://61.133.10.250:352/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路269』
CCTV5,http://home.kuaidi521.com:35455/gaoma/cctv5.m3u8
CCTV5,http://116.9.204.242:9901/tsfile/live/0005_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV5,http://116.9.204.242:9901/tsfile/live/0005_1.m3u8
CCTV5,http://xiaoya.crccxw.top:35455/gaoma/cctv5.m3u8
CCTV5+,http://home.kuaidi521.com:35455/gaoma/cctv5p.m3u8
CCTV5+,http://xiaoya.crccxw.top:35455/gaoma/cctv5p.m3u8
CCTV5+,http://222.219.183.103:8089/hls/19/index.m3u8
CCTV5+,http://182.37.169.94:352/tsfile/live/0016_1.m3u8
CCTV6,http://222.134.19.31:352/tsfile/live/0006_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV6,http://39.170.52.236:808/hls/6/index.m3u8
CCTV6,http://113.140.12.230:8888/newlive/live/hls/7/live.m3u8
@@ -53,12 +46,9 @@ CCTV7,http://60.223.224.176:8888/newlive/live/hls/9/live.m3u8
CCTV7,https://live.junhao.mil.cn/rmt9502/3e6e7c5477314ec38f5e58e2a5c70024.m3u8?txSecret=57978fafb9c19880afa5c8687e8241d8&txTime=7A42BAFF
CCTV7,http://live.junhao.mil.cn/rmt9502/3e6e7c5477314ec38f5e58e2a5c70024.m3u8?txSecret=57978fafb9c19880afa5c8687e8241d8&txTime=7A42BAFF
CCTV7,http://xiaoya.crccxw.top:35455/gaoma/cctv7.m3u8
CCTV7,http://home.kuaidi521.com:35455/gaoma/cctv7.m3u8
CCTV7,http://101.19.84.8:9901/tsfile/live/0007_1.m3u8
CCTV7,http://222.219.183.103:8089/hls/7/index.m3u8
CCTV8,http://222.134.19.31:352/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV8,http://3501776.xyz:35455/gaoma/cctv8.m3u8
CCTV8,http://home.kuaidi521.com:35455/gaoma/cctv8.m3u8
CCTV8,http://112.46.85.60:8009/hls/8/index.m3u8
CCTV8,http://101.19.84.8:9901/tsfile/live/0008_1.m3u8
CCTV8,http://113.140.12.230:8888/newlive/live/hls/9/live.m3u8
@@ -66,23 +56,16 @@ CCTV8,http://xiaoya.crccxw.top:35455/gaoma/cctv8.m3u8
CCTV8,http://60.223.224.176:8888/newlive/live/hls/10/live.m3u8?
CCTV8,http://61.133.10.250:352/tsfile/live/0008_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV9,http://180.213.174.225:9901/tsfile/live/0009_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV9,http://3501776.xyz:35455/gaoma/cctv9.m3u8
CCTV9,http://xiaoya.crccxw.top:35455/gaoma/cctv9.m3u8
CCTV9,http://home.kuaidi521.com:35455/gaoma/cctv9.m3u8
CCTV9,http://60.223.224.176:8888/newlive/live/hls/11/live.m3u8?
CCTV9,http://222.219.183.103:8089/hls/9/index.m3u8
CCTV10,http://39.164.160.249:9901/tsfile/live/0010_1.m3u8
CCTV10,http://3501776.xyz:35455/gaoma/cctv10.m3u8
CCTV10,http://xiaoya.crccxw.top:35455/gaoma/cctv10.m3u8
CCTV10,http://113.140.12.230:8888/newlive/live/hls/11/live.m3u8
CCTV10,http://222.169.85.8:9901/tsfile/live/0010_1.m3u8
CCTV10,http://222.219.183.103:8089/hls/10/index.m3u8
CCTV10,http://60.223.224.176:8888/newlive/live/hls/12/live.m3u8
CCTV10,http://182.37.169.94:352/tsfile/live/0010_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV11,http://39.164.160.249:9901/tsfile/live/0011_1.m3u8
CCTV11,http://home.kuaidi521.com:35455/gaoma/cctv11.m3u8
CCTV12,http://home.kuaidi521.com:35455/gaoma/cctv12.m3u8
CCTV12,http://39.164.160.249:9901/tsfile/live/0012_1.m3u8
CCTV12,http://xiaoya.crccxw.top:35455/gaoma/cctv12.m3u8
CCTV13,http://61.163.181.78:9901/tsfile/live/0013_1.m3u8
CCTV13,https://event.pull.hebtv.com/jishi/cp1.m3u8
@@ -90,12 +73,9 @@ CCTV13,http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8
CCTV13,http://183.215.134.239:19901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV13,http://39.164.160.249:9901/tsfile/live/0013_1.m3u8
CCTV14,https://event.pull.hebtv.com/jishi/cp2.m3u8
CCTV14,http://3501776.xyz:35455/gaoma/cctv14.m3u8
CCTV14,http://39.164.160.249:9901/tsfile/live/0014_1.m3u8
CCTV14,http://58.17.48.228:808/hls/14/index.m3u8
CCTV14,http://222.173.108.238:352/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV15,http://39.164.160.249:9901/tsfile/live/0015_1.m3u8
CCTV15,http://home.kuaidi521.com:35455/gaoma/cctv15.m3u8
CCTV16,http://xiaoya.crccxw.top:35455/gaoma/cctv16.m3u8
CCTV17,http://xiaoya.crccxw.top:35455/gaoma/cctv17.m3u8
CCTV风云剧场,http://dassby.qqff.top:99/live/风云剧场/index.m3u8
@@ -118,7 +98,6 @@ CCTV15,http://61.156.228.12:8154/tsfile/live/0015_1.m3u8
安多卫视,https://liveout.xntv.tv/a65jur/96iln2.m3u8
安多卫视,https://livecdn.dmqhyadmin.com/hls/xjmenyuan.m3u8
安徽卫视,http://115.149.139.141:10000/tsfile/live/1028_1.m3u8?key=txiptv&playlive=0&authid=0
安徽卫视,http://39.164.160.249:9901/tsfile/live/0130_1.m3u8
北京卫视,http://183.215.134.239:19901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0
北京卫视,http://115.149.139.141:10000/tsfile/live/1022_1.m3u8?key=txiptv&playlive=0&authid=0
北京卫视,http://58.220.219.14:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0
@@ -131,37 +110,29 @@ CCTV15,http://61.156.228.12:8154/tsfile/live/0015_1.m3u8
重庆卫视,http://222.173.108.238:352/tsfile/live/1016_1.m3u8?key=txiptv&playlive=1&authid=0
大湾区卫视,http://222.128.55.152:9080/live/dwq.m3u8
东方卫视,http://183.215.134.239:19901/tsfile/live/0107_1.m3u8?key=txiptv&playlive=1&authid=0
东方卫视,http://39.164.160.249:9901/tsfile/live/0107_1.m3u8
东南卫视,http://120.76.248.139/live/bfgd/4200000483.m3u8
东南卫视,http://115.149.139.141:10001/tsfile/live/1035_1.m3u8?blog.ntnas.top
东南卫视,http://220.164.192.48:50085/tsfile/live/0120_1.m3u8
甘肃卫视,http://live.zohi.tv/video/s10001-fztv-3/index.m3u8
广东卫视,http://183.215.134.239:19901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0
广东卫视,http://115.149.139.141:10001/tsfile/live/1029_1.m3u8?blog.ntnas.top
广东卫视,http://222.173.108.238:352/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0
广东卫视,http://39.164.160.249:9901/tsfile/live/0125_1.m3u8
广西卫视,http://live.cztv.cc:85/live/ggpd.m3u8
广西卫视,http://115.149.139.141:10000/tsfile/live/1037_1.m3u8?key=txiptv&playlive=0&authid=0
广西卫视,http://220.164.192.48:50085/tsfile/live/0112_1.m3u8
广西卫视,http://115.149.139.141:10001/tsfile/live/1037_1.m3u8?blog.ntnas.top
广西卫视,http://116.9.204.242:9901/tsfile/live/0113_1.m3u8?key=txiptv&playlive=1&authid=0
广西卫视,http://116.9.204.242:9901/tsfile/live/0113_1.m3u8
贵州卫视,http://39.164.160.249:9901/tsfile/live/0120_1.m3u8
河北卫视,http://116.131.190.210:352/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0
河北卫视,http://60.8.49.38:352/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0
河南卫视,http://39.164.160.249:9901/tsfile/live/0139_1.m3u8
黑龙江卫视,http://115.149.139.141:10000/tsfile/live/1030_1.m3u8?key=txiptv&playlive=0&authid=0
黑龙江卫视,http://39.164.160.249:9901/tsfile/live/0143_1.m3u8
湖北卫视,http://115.149.139.141:10001/tsfile/live/1027_1.m3u8
湖南卫视,http://183.215.134.239:19901/tsfile/live/0128_1.m3u8?key=txiptv&playlive=1&authid=0
湖南卫视,http://39.164.160.249:9901/tsfile/live/0128_1.m3u8
湖南卫视,http://60.223.224.176:8888/newlive/live/hls/22/live.m3u8
吉林卫视,http://220.164.192.48:50085/tsfile/live/0118_1.m3u8
江西卫视,http://120.76.248.139/live/bfgd/4200000098.m3u8
江西卫视,http://183.215.134.239:19901/tsfile/live/0138_1.m3u8?key=txiptv&playlive=1&authid=0
江西卫视,http://222.173.108.238:352/tsfile/live/1010_1.m3u8?key=txiptv&playlive=1&authid=0
辽宁卫视,http://222.173.108.238:352/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0
辽宁卫视,http://39.164.160.249:9901/tsfile/live/0121_1.m3u8
辽宁卫视,http://115.149.139.141:10001/tsfile/live/1028_1.m3u8
辽宁卫视,http://115.149.139.141:10001/tsfile/live/1028_1.m3u8?blog.ntnas.top
内蒙古蒙语卫视,https://livestream-bt.nmtv.cn/nmtv/2315general.m3u8?txSecret=4971666599ef9411629213c9a300bf66&txTime=771EF880
@@ -182,7 +153,6 @@ CCTV15,http://61.156.228.12:8154/tsfile/live/0015_1.m3u8
亚洲卫视,https://p2hs.vzan.com/slowlive/821481626725612419/live.m3u8
延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8
延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8$LR•IPV4『线路20』
云南卫视,http://39.164.160.249:9901/tsfile/live/0119_1.m3u8
浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8?
浙江卫视,http://ali-m-l.cztv.com:80/channels/lantian/channel001/1080p.m3u8
浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8
@@ -194,7 +164,6 @@ CCTV15,http://61.156.228.12:8154/tsfile/live/0015_1.m3u8
浙江卫视,http://wouu.net:9977/udp/239.93.0.124:5140$LR•IPV4『线路157』
北京卫视,http://61.156.228.12:8154/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路83』
北京卫视,http://123.129.70.178:9901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路88』
江苏卫视,http://124.128.73.58:9901/tsfile/live/0127_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路95』
安徽卫视,http://123.129.70.178:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路73』
安徽卫视,http://61.136.172.236:9901/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路75』
安徽卫视,http://61.156.228.12:8154/tsfile/live/0130_1.m3u8?key=txiptv&playlive=1&authid=0$LR•IPV4『线路76』
@@ -292,7 +261,6 @@ CGTN阿语,https://0472.org/hls/cgtna.m3u8
少儿频道,#genre#
熊大熊二,https://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/1733da751de64e6e910abda889d87a26/1200.m3u8
福州少儿,http://live.zohi.tv/video/s10001-fztv-4/index.m3u8
武汉少儿,http://stream.appwuhan.com/7tzb/sd/live.m3u8
GOOD卡通,https://dqhxk7sbp7xog.cloudfront.net/osmflivech45.m3u8
倒霉特熊,https://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/87f87ba569c147e3805f80e4844d2de9/1200.m3u8
雲朵妈妈,https://newcntv.qcloudcdn.com/asp/hls/1200/0303000a/3/default/d8ad434c6b08421a927557a4d98da65c/1200.m3u8
@@ -314,7 +282,6 @@ key=0b292c335e5837e947f9409c59228f3e6
新昌休闲影视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8
石河子影视文体,http://124.88.144.73:1935/live/jjsh/HasBahCa.m3u8
烟台影视,http://live.yantaitv.cn/live/e9f1d9045d474c31884d13fa4ffbbd16/a4a9b3704d854756907845107cc56129-1.m3u8
影视频道,http://112.30.194.221:20080/live/d18ff95cb1fb4bbcb56215e189fc12be/hls.m3u8
美丽中国说,http://newcntv.qcloudcdn.com/asp/hls/4000/0303000a/3/default/8cdd688b04e4495ba1635e218419d6f9/4000.m3u8
File diff suppressed because it is too large. Load diff
BIN
View File
Binary file not shown.
+20 -4
View File
@@ -1,6 +1,7 @@
{
"spider": "./spider.jar",
"wallpaper": "https://xn--11x805d.xn--4kq62z5rby2qupq9ub.xyz/",
"wallpaper": "https://t.alcy.cc/fj",
"sites": [
{
"key": "豆豆",
@@ -247,7 +248,7 @@
"type": 3,
"quickSearch": 1,
"changeable": "0",
"api": "csp_MiSouGuard",
"api": "csp_XiaoYiGuard",
"ext": ""
},
{
@@ -290,9 +291,24 @@
"url": "影视"
},
{
"name": "自用",
"name": "巧技三",
"type": 1,
"url": ""
"url": "https://zy.qiaoji8.com/xiafan.php?url=",
"ext": {
"flag": [
"QD4K",
"iyf",
"duanju",
"gzcj",
"GTV",
"GZYS",
"weggz",
"Ace"
],
"header": {
"User-Agent": "okhttp/4.9.1"
}
}
},
{
"name": "8090g",
+577
View File
@@ -0,0 +1,577 @@
/*!
* Jinja Templating for JavaScript v0.1.8
* https://github.com/sstur/jinja-js
*
* This is a slimmed-down Jinja2 implementation [http://jinja.pocoo.org/]
*
* In the interest of simplicity, it deviates from Jinja2 as follows:
* - Line statements, cycle, super, macro tags and block nesting are not implemented
* - auto escapes html by default (the filter is "html" not "e")
* - Only "html" and "safe" filters are built in
* - Filters are not valid in expressions; `foo|length > 1` is not valid
* - Expression Tests (`if num is odd`) not implemented (`is` translates to `==` and `isnot` to `!=`)
*
* Notes:
* - if property is not found, but method '_get' exists, it will be called with the property name (and cached)
* - `{% for n in obj %}` iterates the object's keys; get the value with `{% for n in obj %}{{ obj[n] }}{% endfor %}`
* - subscript notation `a[0]` takes literals or simple variables but not `a[item.key]`
* - `.2` is not a valid number literal; use `0.2`
*
*/
/*global require, exports, module, define */
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.jinja = {}));
})(this, (function (jinja) {
"use strict";
var STRINGS = /'(\\.|[^'])*'|"(\\.|[^"'"])*"/g;
var IDENTS_AND_NUMS = /([$_a-z][$\w]*)|([+-]?\d+(\.\d+)?)/g;
var NUMBER = /^[+-]?\d+(\.\d+)?$/;
//non-primitive literals (array and object literals)
var NON_PRIMITIVES = /\[[@#~](,[@#~])*\]|\[\]|\{([@i]:[@#~])(,[@i]:[@#~])*\}|\{\}/g;
//bare identifiers such as variables and in object literals: {foo: 'value'}
var IDENTIFIERS = /[$_a-z][$\w]*/ig;
var VARIABLES = /i(\.i|\[[@#i]\])*/g;
var ACCESSOR = /(\.i|\[[@#i]\])/g;
var OPERATORS = /(===?|!==?|>=?|<=?|&&|\|\||[+\-\*\/%])/g;
//extended (english) operators
var EOPS = /(^|[^$\w])(and|or|not|is|isnot)([^$\w]|$)/g;
var LEADING_SPACE = /^\s+/;
var TRAILING_SPACE = /\s+$/;
var START_TOKEN = /\{\{\{|\{\{|\{%|\{#/;
var TAGS = {
'{{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}\}/,
'{{': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?\}\}/,
'{%': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?%\}/,
'{#': /^('(\\.|[^'])*'|"(\\.|[^"'"])*"|.)+?#\}/
};
var delimeters = {
'{%': 'directive',
'{{': 'output',
'{#': 'comment'
};
var operators = {
and: '&&',
or: '||',
not: '!',
is: '==',
isnot: '!='
};
var constants = {
'true': true,
'false': false,
'null': null
};
function Parser() {
this.nest = [];
this.compiled = [];
this.childBlocks = 0;
this.parentBlocks = 0;
this.isSilent = false;
}
Parser.prototype.push = function (line) {
if (!this.isSilent) {
this.compiled.push(line);
}
};
Parser.prototype.parse = function (src) {
this.tokenize(src);
return this.compiled;
};
Parser.prototype.tokenize = function (src) {
var lastEnd = 0, parser = this, trimLeading = false;
matchAll(src, START_TOKEN, function (open, index, src) {
//here we match the rest of the src against a regex for this tag
var match = src.slice(index + open.length).match(TAGS[open]);
match = (match ? match[0] : '');
//here we sub out strings so we don't get false matches
var simplified = match.replace(STRINGS, '@');
//if we don't have a close tag or there is a nested open tag
if (!match || ~simplified.indexOf(open)) {
return index + 1;
}
var inner = match.slice(0, 0 - open.length);
//check for white-space collapse syntax
if (inner.charAt(0) === '-') var wsCollapseLeft = true;
if (inner.slice(-1) === '-') var wsCollapseRight = true;
inner = inner.replace(/^-|-$/g, '').trim();
//if we're in raw mode and we are not looking at an "endraw" tag, move along
if (parser.rawMode && (open + inner) !== '{%endraw') {
return index + 1;
}
var text = src.slice(lastEnd, index);
lastEnd = index + open.length + match.length;
if (trimLeading) text = trimLeft(text);
if (wsCollapseLeft) text = trimRight(text);
if (wsCollapseRight) trimLeading = true;
if (open === '{{{') {
//liquid-style: make {{{x}}} => {{x|safe}}
open = '{{';
inner += '|safe';
}
parser.textHandler(text);
parser.tokenHandler(open, inner);
});
var text = src.slice(lastEnd);
if (trimLeading) text = trimLeft(text);
this.textHandler(text);
};
Parser.prototype.textHandler = function (text) {
this.push('write(' + JSON.stringify(text) + ');');
};
Parser.prototype.tokenHandler = function (open, inner) {
var type = delimeters[open];
if (type === 'directive') {
this.compileTag(inner);
} else if (type === 'output') {
var extracted = this.extractEnt(inner, STRINGS, '@');
//replace || operators with ~
extracted.src = extracted.src.replace(/\|\|/g, '~').split('|');
//put back || operators
extracted.src = extracted.src.map(function (part) {
return part.split('~').join('||');
});
var parts = this.injectEnt(extracted, '@');
if (parts.length > 1) {
var filters = parts.slice(1).map(this.parseFilter.bind(this));
this.push('filter(' + this.parseExpr(parts[0]) + ',' + filters.join(',') + ');');
} else {
this.push('filter(' + this.parseExpr(parts[0]) + ');');
}
}
};
Parser.prototype.compileTag = function (str) {
var directive = str.split(' ')[0];
var handler = tagHandlers[directive];
if (!handler) {
throw new Error('Invalid tag: ' + str);
}
handler.call(this, str.slice(directive.length).trim());
};
Parser.prototype.parseFilter = function (src) {
src = src.trim();
var match = src.match(/[:(]/);
var i = match ? match.index : -1;
if (i < 0) return JSON.stringify([src]);
var name = src.slice(0, i);
var args = src.charAt(i) === ':' ? src.slice(i + 1) : src.slice(i + 1, -1);
args = this.parseExpr(args, {terms: true});
return '[' + JSON.stringify(name) + ',' + args + ']';
};
Parser.prototype.extractEnt = function (src, regex, placeholder) {
var subs = [], isFunc = typeof placeholder == 'function';
src = src.replace(regex, function (str) {
var replacement = isFunc ? placeholder(str) : placeholder;
if (replacement) {
subs.push(str);
return replacement;
}
return str;
});
return {src: src, subs: subs};
};
Parser.prototype.injectEnt = function (extracted, placeholder) {
var src = extracted.src, subs = extracted.subs, isArr = Array.isArray(src);
var arr = (isArr) ? src : [src];
var re = new RegExp('[' + placeholder + ']', 'g'), i = 0;
arr.forEach(function (src, index) {
arr[index] = src.replace(re, function () {
return subs[i++];
});
});
return isArr ? arr : arr[0];
};
//replace complex literals without mistaking subscript notation with array literals
Parser.prototype.replaceComplex = function (s) {
var parsed = this.extractEnt(s, /i(\.i|\[[@#i]\])+/g, 'v');
parsed.src = parsed.src.replace(NON_PRIMITIVES, '~');
return this.injectEnt(parsed, 'v');
};
//parse expression containing literals (including objects/arrays) and variables (including dot and subscript notation)
//valid expressions: `a + 1 > b.c or c == null`, `a and b[1] != c`, `(a < b) or (c < d and e)`, 'a || [1]`
Parser.prototype.parseExpr = function (src, opts) {
opts = opts || {};
//extract string literals -> @
var parsed1 = this.extractEnt(src, STRINGS, '@');
//note: this will catch {not: 1} and a.is; could we replace temporarily and then check adjacent chars?
parsed1.src = parsed1.src.replace(EOPS, function (s, before, op, after) {
return (op in operators) ? before + operators[op] + after : s;
});
//sub out non-string literals (numbers/true/false/null) -> #
// the distinction is necessary because @ can be object identifiers, # cannot
var parsed2 = this.extractEnt(parsed1.src, IDENTS_AND_NUMS, function (s) {
return (s in constants || NUMBER.test(s)) ? '#' : null;
});
//sub out object/variable identifiers -> i
var parsed3 = this.extractEnt(parsed2.src, IDENTIFIERS, 'i');
//remove white-space
parsed3.src = parsed3.src.replace(/\s+/g, '');
//the rest of this is simply to boil the expression down and check validity
var simplified = parsed3.src;
//sub out complex literals (objects/arrays) -> ~
// the distinction is necessary because @ and # can be subscripts but ~ cannot
while (simplified !== (simplified = this.replaceComplex(simplified))) ;
//now @ represents strings, # represents other primitives and ~ represents non-primitives
//replace complex variables (those with dot/subscript accessors) -> v
while (simplified !== (simplified = simplified.replace(/i(\.i|\[[@#i]\])+/, 'v'))) ;
//empty subscript or complex variables in subscript, are not permitted
simplified = simplified.replace(/[iv]\[v?\]/g, 'x');
//sub in "i" for @ and # and ~ and v (now "i" represents all literals, variables and identifiers)
simplified = simplified.replace(/[@#~v]/g, 'i');
//sub out operators
simplified = simplified.replace(OPERATORS, '%');
//allow 'not' unary operator
simplified = simplified.replace(/!+[i]/g, 'i');
var terms = opts.terms ? simplified.split(',') : [simplified];
terms.forEach(function (term) {
//simplify logical grouping
while (term !== (term = term.replace(/\(i(%i)*\)/g, 'i'))) ;
if (!term.match(/^i(%i)*/)) {
throw new Error('Invalid expression: ' + src + " " + term);
}
});
parsed3.src = parsed3.src.replace(VARIABLES, this.parseVar.bind(this));
parsed2.src = this.injectEnt(parsed3, 'i');
parsed1.src = this.injectEnt(parsed2, '#');
return this.injectEnt(parsed1, '@');
};
Parser.prototype.parseVar = function (src) {
var args = Array.prototype.slice.call(arguments);
var str = args.pop(), index = args.pop();
//quote bare object identifiers (might be a reserved word like {while: 1})
if (src === 'i' && str.charAt(index + 1) === ':') {
return '"i"';
}
var parts = ['"i"'];
src.replace(ACCESSOR, function (part) {
if (part === '.i') {
parts.push('"i"');
} else if (part === '[i]') {
parts.push('get("i")');
} else {
parts.push(part.slice(1, -1));
}
});
return 'get(' + parts.join(',') + ')';
};
//escapes a name to be used as a javascript identifier
Parser.prototype.escName = function (str) {
return str.replace(/\W/g, function (s) {
return '$' + s.charCodeAt(0).toString(16);
});
};
Parser.prototype.parseQuoted = function (str) {
if (str.charAt(0) === "'") {
str = str.slice(1, -1).replace(/\\.|"/, function (s) {
if (s === "\\'") return "'";
return s.charAt(0) === '\\' ? s : ('\\' + s);
});
str = '"' + str + '"';
}
//todo: try/catch or deal with invalid characters (linebreaks, control characters)
return JSON.parse(str);
};
//the context 'this' inside tagHandlers is the parser instance
var tagHandlers = {
'if': function (expr) {
this.push('if (' + this.parseExpr(expr) + ') {');
this.nest.unshift('if');
},
'else': function () {
if (this.nest[0] === 'for') {
this.push('}, function() {');
} else {
this.push('} else {');
}
},
'elseif': function (expr) {
this.push('} else if (' + this.parseExpr(expr) + ') {');
},
'endif': function () {
this.nest.shift();
this.push('}');
},
'for': function (str) {
var i = str.indexOf(' in ');
var name = str.slice(0, i).trim();
var expr = str.slice(i + 4).trim();
this.push('each(' + this.parseExpr(expr) + ',' + JSON.stringify(name) + ',function() {');
this.nest.unshift('for');
},
'endfor': function () {
this.nest.shift();
this.push('});');
},
'raw': function () {
this.rawMode = true;
},
'endraw': function () {
this.rawMode = false;
},
'set': function (stmt) {
var i = stmt.indexOf('=');
var name = stmt.slice(0, i).trim();
var expr = stmt.slice(i + 1).trim();
this.push('set(' + JSON.stringify(name) + ',' + this.parseExpr(expr) + ');');
},
'block': function (name) {
if (this.isParent) {
++this.parentBlocks;
var blockName = 'block_' + (this.escName(name) || this.parentBlocks);
this.push('block(typeof ' + blockName + ' == "function" ? ' + blockName + ' : function() {');
} else if (this.hasParent) {
this.isSilent = false;
++this.childBlocks;
blockName = 'block_' + (this.escName(name) || this.childBlocks);
this.push('function ' + blockName + '() {');
}
this.nest.unshift('block');
},
'endblock': function () {
this.nest.shift();
if (this.isParent) {
this.push('});');
} else if (this.hasParent) {
this.push('}');
this.isSilent = true;
}
},
'extends': function (name) {
name = this.parseQuoted(name);
var parentSrc = this.readTemplateFile(name);
this.isParent = true;
this.tokenize(parentSrc);
this.isParent = false;
this.hasParent = true;
//silence output until we enter a child block
this.isSilent = true;
},
'include': function (name) {
name = this.parseQuoted(name);
var incSrc = this.readTemplateFile(name);
this.isInclude = true;
this.tokenize(incSrc);
this.isInclude = false;
}
};
//liquid style
tagHandlers.assign = tagHandlers.set;
//python/django style
tagHandlers.elif = tagHandlers.elseif;
var getRuntime = function runtime(data, opts) {
var defaults = {autoEscape: 'toJson'};
var _toString = Object.prototype.toString;
var _hasOwnProperty = Object.prototype.hasOwnProperty;
var getKeys = Object.keys || function (obj) {
var keys = [];
for (var n in obj) if (_hasOwnProperty.call(obj, n)) keys.push(n);
return keys;
};
var isArray = Array.isArray || function (obj) {
return _toString.call(obj) === '[object Array]';
};
var create = Object.create || function (obj) {
function F() {
}
F.prototype = obj;
return new F();
};
var toString = function (val) {
if (val == null) return '';
return (typeof val.toString == 'function') ? val.toString() : _toString.call(val);
};
var extend = function (dest, src) {
var keys = getKeys(src);
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i];
dest[key] = src[key];
}
return dest;
};
//get a value, lexically, starting in current context; a.b -> get("a","b")
var get = function () {
var val, n = arguments[0], c = stack.length;
while (c--) {
val = stack[c][n];
if (typeof val != 'undefined') break;
}
for (var i = 1, len = arguments.length; i < len; i++) {
if (val == null) continue;
n = arguments[i];
val = (_hasOwnProperty.call(val, n)) ? val[n] : (typeof val._get == 'function' ? (val[n] = val._get(n)) : null);
}
return (val == null) ? '' : val;
};
var set = function (n, val) {
stack[stack.length - 1][n] = val;
};
var push = function (ctx) {
stack.push(ctx || {});
};
var pop = function () {
stack.pop();
};
var write = function (str) {
output.push(str);
};
var filter = function (val) {
for (var i = 1, len = arguments.length; i < len; i++) {
var arr = arguments[i], name = arr[0], filter = filters[name];
if (filter) {
arr[0] = val;
//now arr looks like [val, arg1, arg2]
val = filter.apply(data, arr);
} else {
throw new Error('Invalid filter: ' + name);
}
}
if (opts.autoEscape && name !== opts.autoEscape && name !== 'safe') {
//auto escape if not explicitly safe or already escaped
val = filters[opts.autoEscape].call(data, val);
}
output.push(val);
};
var each = function (obj, loopvar, fn1, fn2) {
if (obj == null) return;
var arr = isArray(obj) ? obj : getKeys(obj), len = arr.length;
var ctx = {loop: {length: len, first: arr[0], last: arr[len - 1]}};
push(ctx);
for (var i = 0; i < len; i++) {
extend(ctx.loop, {index: i + 1, index0: i});
fn1(ctx[loopvar] = arr[i]);
}
if (len === 0 && fn2) fn2();
pop();
};
var block = function (fn) {
push();
fn();
pop();
};
var render = function () {
return output.join('');
};
data = data || {};
opts = extend(defaults, opts || {});
var filters = extend({
html: function (val) {
return toString(val)
.split('&').join('&amp;')
.split('<').join('&lt;')
.split('>').join('&gt;')
.split('"').join('&quot;');
},
safe: function (val) {
return val;
},
toJson: function (val) {
if (typeof val === 'object') {
return JSON.stringify(val);
}
return toString(val);
}
}, opts.filters || {});
var stack = [create(data || {})], output = [];
return {
get: get,
set: set,
push: push,
pop: pop,
write: write,
filter: filter,
each: each,
block: block,
render: render
};
};
var runtime;
jinja.compile = function (markup, opts) {
opts = opts || {};
var parser = new Parser();
parser.readTemplateFile = this.readTemplateFile;
var code = [];
code.push('function render($) {');
code.push('var get = $.get, set = $.set, push = $.push, pop = $.pop, write = $.write, filter = $.filter, each = $.each, block = $.block;');
code.push.apply(code, parser.parse(markup));
code.push('return $.render();');
code.push('}');
code = code.join('\n');
if (opts.runtime === false) {
var fn = new Function('data', 'options', 'return (' + code + ')(runtime(data, options))');
} else {
runtime = runtime || (runtime = getRuntime.toString());
fn = new Function('data', 'options', 'return (' + code + ')((' + runtime + ')(data, options))');
}
return {render: fn};
};
jinja.render = function (markup, data, opts) {
var tmpl = jinja.compile(markup);
return tmpl.render(data, opts);
};
jinja.templateFiles = [];
jinja.readTemplateFile = function (name) {
var templateFiles = this.templateFiles || [];
var templateFile = templateFiles[name];
if (templateFile == null) {
throw new Error('Template file not found: ' + name);
}
return templateFile;
};
/*!
* Helpers
*/
function trimLeft(str) {
return str.replace(LEADING_SPACE, '');
}
function trimRight(str) {
return str.replace(TRAILING_SPACE, '');
}
function matchAll(str, reg, fn) {
//copy as global
reg = new RegExp(reg.source, 'g' + (reg.ignoreCase ? 'i' : '') + (reg.multiline ? 'm' : ''));
var match;
while ((match = reg.exec(str))) {
var result = fn(match[0], match.index, str);
if (typeof result == 'number') {
reg.lastIndex = result;
}
}
}
}));
File diff suppressed because it is too large. Load diff
+1796 -2282
View File
File diff suppressed because it is too large. Load diff
BIN
View File
Binary file not shown.
+120 -96
View File
@@ -4,9 +4,9 @@
"spider": "./spider.jar",
"lives": [
{
"name": "【公众号欧歌APP】测试完请删除,请勿贩卖",
"name": "【公众号光歌软件分享】永久免费,请勿演示贩卖",
"type": 0,
"url": "./lives/【公众号欧歌APP】测试完请删除,请勿贩卖.txt",
"url": "./lives/【公众号光歌软件分享】永久免费,请勿演示贩卖.txt",
"epg": "http://cdn.1678520.xyz/epg/?ch={name}&date={date}"
},
{
@@ -31,41 +31,20 @@
"sites": [
{
"key": "豆瓣2",
"name": "📢【公众号欧歌APP】测试完请删除,请勿贩卖",
"name": "📢【公众号光歌软件分享】永久免费,请勿演示贩卖",
"type": 3,
"api": "csp_Douban",
"searchable": 0
},
{
"key": "豆瓣1",
"name": "📢【公众号欧歌APP】测试完请删除,请勿贩卖公告❤更新:4/14❤",
"name": "📢【公众号光歌软件分享】永久免费,请勿演示贩卖公告❤更新:4/17❤",
"type": 3,
"api": "csp_Notice",
"searchable": 0,
"changeable": 0,
"jar": "./jars/豆瓣1.jar",
"ext": "https://xn--dkw0c.v.nxog.top/m//公告.php?b=【公众号欧歌APP】测试完请删除,请勿贩卖"
},
{
"key": "config",
"name": "🐲玩欧┃配置中心",
"type": 3,
"jar": "./jars/config.jar",
"api": "csp_Config",
"searchable": 0
},
{
"key": "配置中心",
"name": "❤配置|中心",
"type": 3,
"api": "csp_Config",
"searchable": 0,
"changeable": 0,
"indexs": 0,
"style": {
"type": "rect",
"ratio": 1.597
}
"ext": "https://xn--dkw0c.v.nxog.top/m//公告.php?b=【公众号光歌软件分享】永久免费,请勿演示贩卖"
},
{
"key": "csp_woog",
@@ -82,31 +61,49 @@
],
"url_key": "woog",
"threadinfo": {
"chunksize": 400,
"chunksize": 300,
"threads": 10
}
}
},
{
"key": "csp_woog2",
"name": "🐲玩欧|非会员4K",
"key": "config",
"name": "🐲玩欧┃配置",
"type": 3,
"jar": "./jars/config.jar",
"api": "csp_Config",
"searchable": 0
},
{
"key": "csp_woogkk",
"name": "🐲夸快┃非会员4K",
"type": 3,
"changeable": "0",
"api": "csp_DuopanGuard",
"api": "csp_woog",
"filterable": 1,
"jar": "./jars/csp_woog.jar",
"jar": "./jars/csp_woogkk.jar",
"ext": {
"site_urls": [
"https://woog.xn--dkw.xn--6qq986b3xl",
"https://woog.nxog.eu.org"
"hhttps://ogkk.nxog.eu.org",
"https://ogkk.xn--dkw.xn--6qq986b3xl"
],
"url_key": "woog2",
"url_key": "woogkk",
"threadinfo": {
"chunksize": 400,
"chunksize": 282,
"threads": 60
}
}
},
{
"key": "csp_欧歌123",
"name": "🐲夸快┃配置",
"type": 3,
"api": "csp_Config",
"searchable": 0,
"quickSearch": 0,
"filterable": 1,
"jar": "./jars/csp_欧歌123.jar"
},
{
"key": "欧哥",
"name": "❤欧歌|4K弹幕",
@@ -118,6 +115,19 @@
"changeable": 1,
"ext": "./json/og.json?"
},
{
"key": "配置中心",
"name": "❤配置|中心",
"type": 3,
"api": "csp_Config",
"searchable": 0,
"changeable": 0,
"indexs": 0,
"style": {
"type": "rect",
"ratio": 1.597
}
},
{
"key": "荐片",
"name": "💡荐片|影视",
@@ -254,50 +264,6 @@
"quickSearch": 1,
"filterable": 1
},
{
"key": "猎手影视",
"name": "💡猎手|影视",
"type": 3,
"api": "./api/猎手影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "火车影视",
"name": "💡火车|影视",
"type": 3,
"api": "./api/火车影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "美帕影视",
"name": "💡美帕|影视",
"type": 3,
"api": "./api/美帕影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "嗨皮影视",
"name": "💡嗨皮|影视",
"type": 3,
"api": "./api/嗨皮影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "厂长影视",
"name": "💡厂长|影视",
@@ -370,17 +336,9 @@
"playerType": 2,
"ext": "https://shdy5.us"
},
{
"key": "光速",
"name": "💡光速|影视",
"type": 3,
"api": "csp_Xdai",
"playerType": 1,
"ext": "jaHR0cDovLzU5LjE1My4xNjcuMTM3Ojg4OTl8NGQ4M2I4N2M0YzVlYTExMXw0ZDgzYjg3YzRjNWVhMTExfDQ2Mg=="
},
{
"key": "现代",
"name": "💡现代|APP",
"name": "💡现代|影视",
"type": 3,
"api": "csp_Xdai",
"playerType": 1,
@@ -460,9 +418,75 @@
"api": "csp_AppFerr",
"ext": "sHR2rlsfjI4L3t4RXQMkn/M3t4AXAKTrZj3tfhm1t/gMT3dOrHqIzUNqLUEOIDMvllTbX6e1hMhB2mfpOaCmHNOL1yBB3SmxNyqXlai90EIpdnwOOgCR9Z+YwCTj6ySjzJ2VBiH3eXeOGcavcNeVRA=="
},
{
"key": "猎手影视",
"name": "🧡猎手|PY影视",
"type": 3,
"api": "./api/猎手影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "火车影视",
"name": "🧡火车|PY影视",
"type": 3,
"api": "./api/火车影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "嗨皮影视",
"name": "🧡嗨皮|PY影视",
"type": 3,
"api": "./api/嗨皮影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "边缘",
"name": "🧡边缘|PY影视",
"type": 3,
"api": "./api/边缘影视APP.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "若惜",
"name": "🧡若惜|PY影视",
"type": 3,
"api": "./api/若惜追剧APP.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "悠悠",
"name": "🧡悠悠|PY影视",
"type": 3,
"api": "./api/悠悠APP.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "csp_XYQHiker_农民影视",
"name": "🧿农民|影视",
"name": "🧿农民|XBPQ",
"type": 3,
"api": "csp_XYQHiker",
"searchable": 1,
@@ -472,7 +496,7 @@
},
{
"key": "嫖嫖嫖",
"name": "🧿嫖嫖┃影视",
"name": "🧿嫖嫖┃XBPQ",
"type": 3,
"api": "csp_XBPQ",
"ext": {
@@ -502,7 +526,7 @@
},
{
"key": "白嫖者",
"name": "🧿白嫖┃影视",
"name": "🧿白嫖┃XBPQ",
"type": 3,
"api": "csp_XBPQ",
"ext": {
@@ -514,7 +538,7 @@
},
{
"key": "656",
"name": "🧿梦想┃影视",
"name": "🧿梦想┃XBPQ",
"type": 3,
"api": "csp_XBPQ",
"searchable": 1,
@@ -554,7 +578,7 @@
},
{
"key": "8号影院",
"name": "🧿8号┃影视",
"name": "🧿8号┃XBPQ",
"type": 3,
"api": "csp_XBPQ",
"searchable": 1,
@@ -572,7 +596,7 @@
},
{
"key": "csp_红狐狸影视",
"name": "🧿狐狸┃影视",
"name": "🧿狐狸┃XBPQ",
"type": 3,
"api": "csp_XBPQ",
"ext": {
@@ -582,7 +606,7 @@
},
{
"key": "大师兄",
"name": "🧿大师┃影视",
"name": "🧿大师┃XBPQ",
"type": 3,
"api": "csp_XBPQ",
"ext": {
@@ -592,7 +616,7 @@
},
{
"key": "疯狗",
"name": "🧿疯狗┃影视",
"name": "🧿疯狗┃XBPQ",
"type": 3,
"api": "csp_XBPQ",
"ext": {
+220
View File
@@ -0,0 +1,220 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import re
import sys
from Crypto.Hash import MD5
sys.path.append("..")
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from urllib.parse import quote, urlparse
from base64 import b64encode, b64decode
import json
import time
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
self.host = self.gethost()
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def action(self, action):
pass
def destroy(self):
pass
def homeContent(self, filter):
data = self.getdata("/api.php/getappapi.index/initV119")
dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序",
"sort": "排序"}
filters = {}
classes = []
json_data = data["type_list"]
homedata = data["banner_list"][8:]
for item in json_data:
if item["type_name"] == "全部":
continue
has_non_empty_field = False
jsontype_extend = json.loads(item["type_extend"])
homedata.extend(item["recommend_list"])
jsontype_extend["sort"] = "最新,最热,最赞"
classes.append({"type_name": item["type_name"], "type_id": item["type_id"]})
for key in dy:
if key in jsontype_extend and jsontype_extend[key].strip() != "":
has_non_empty_field = True
break
if has_non_empty_field:
filters[str(item["type_id"])] = []
for dkey in jsontype_extend:
if dkey in dy and jsontype_extend[dkey].strip() != "":
values = jsontype_extend[dkey].split(",")
value_array = [{"n": value.strip(), "v": value.strip()} for value in values if
value.strip() != ""]
filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array})
result = {}
result["class"] = classes
result["filters"] = filters
result["list"] = homedata[1:]
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg,
"sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'),
"class": extend.get('class', '全部')}
result = {}
data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body)
result["list"] = data["recommend_list"]
result["page"] = pg
result["pagecount"] = 9999
result["limit"] = 90
result["total"] = 999999
return result
def detailContent(self, ids):
body = f"vod_id={ids[0]}"
data = self.getdata("/api.php/getappapi.index/vodDetail", body)
vod = data["vod"]
play = []
names = []
for itt in data["vod_play_list"]:
a = []
names.append(itt["player_info"]["show"])
for it in itt['urls']:
it['user_agent']=itt["player_info"].get("user_agent")
it["parse"]=itt["player_info"].get("parse")
a.append(f"{it['name']}${self.e64(json.dumps(it))}")
play.append("#".join(a))
vod["vod_play_from"] = "$$$".join(names)
vod["vod_play_url"] = "$$$".join(play)
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg="1"):
body = f"keywords={key}&type_id=0&page={pg}"
data = self.getdata("/api.php/getappapi.index/searchList", body)
result = {"list": data["search_list"], "page": pg}
return result
def playerContent(self, flag, id, vipFlags):
ids = json.loads(self.d64(id))
h = {"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")}
try:
if re.search(r'url=', ids['parse_api_url']):
data = self.fetch(ids['parse_api_url'], headers=h, timeout=10).json()
url = data.get('url') or data['data'].get('url')
else:
body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'], True))}&token={ids.get('token')}"
b = self.getdata("/api.php/getappapi.index/vodParse", body)['json']
url = json.loads(b)['url']
if 'error' in url: raise ValueError(f"解析失败: {url}")
p = 0
except Exception as e:
print('错误信息:', e)
url, p = ids['url'], 1
if re.search(r'\.jpg|\.png|\.jpeg', url):
url = self.Mproxy(url)
result = {}
result["parse"] = p
result["url"] = url
result["header"] = h
return result
def localProxy(self, param):
return self.Mlocal(param)
def gethost(self):
headers = {
'User-Agent': 'okhttp/3.14.9'
}
host = self.fetch('http://host.yyys.news/250123.txt', headers=headers).text
return host.strip()
phend = {
'User-Agent': 'Dalvik/2.1.0 (Linux; U; Android 11; M2012K10C Build/RP1A.200720.011)',
'allowCrossProtocolRedirects': 'true'
}
def aes(self, text,b=None):
key = b"RuN9LRvwTRgpQnpK"
cipher = AES.new(key, AES.MODE_CBC, key)
if b:
ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size))
ct = b64encode(ct_bytes).decode("utf-8")
return ct
else :
pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size)
return pt.decode("utf-8")
def header(self):
t = str(int(time.time()))
header = {"Referer":self.host,
"User-Agent": "okhttp/3.14.9", "app-version-code": "547", "app-ui-mode": "light",
"app-api-verify-time": t, "app-user-device-id": self.md5(t),
"app-api-verify-sign": self.aes(t,True),
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}
return header
def getdata(self, path, data=None):
vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data']
data1 = self.aes(vdata)
return json.loads(data1)
def Mproxy(self, url):
return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8"
def Mlocal(self, param,header=None):
url = self.d64(param["url"])
ydata = self.fetch(url, headers=header, allow_redirects=False)
data = ydata.content.decode('utf-8')
if ydata.headers.get('Location'):
url = ydata.headers['Location']
data = self.fetch(url, headers=header).content.decode('utf-8')
parsed_url = urlparse(url)
durl = parsed_url.scheme + "://" + parsed_url.netloc
lines = data.strip().split('\n')
for index, string in enumerate(lines):
if '#EXT' not in string and 'http' not in string:
last_slash_index = string.rfind('/')
lpath = string[:last_slash_index + 1]
lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath
data = '\n'.join(lines)
return [200, "application/vnd.apple.mpegur", data]
def e64(self, text):
try:
text_bytes = text.encode('utf-8')
encoded_bytes = b64encode(text_bytes)
return encoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64编码错误: {str(e)}")
return ""
def d64(self,encoded_text):
try:
encoded_bytes = encoded_text.encode('utf-8')
decoded_bytes = b64decode(encoded_bytes)
return decoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64解码错误: {str(e)}")
return ""
def md5(self, text):
h = MD5.new()
h.update(text.encode('utf-8'))
return h.hexdigest()
-93
View File
@@ -1,93 +0,0 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import sys
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def getName(self):
return "mp"
def init(self, extend=""):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host = 'https://g.c494.com'
header = {
'User-Agent': 'Dart/2.10 (dart:io)',
'platform_version': 'RP1A.200720.011',
'version': '2.2.3',
'copyright': 'xiaogui',
'platform': 'android',
'client_name': '576O5p+P5b2x6KeG',
}
def homeContent(self, filter):
data = self.fetch(f'{self.host}/api.php/app/nav?token=', headers=self.header).json()
dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序",
"sort": "排序"}
filters = {}
classes = []
json_data = data["list"]
for item in json_data:
has_non_empty_field = False
jsontype_extend = item["type_extend"]
classes.append({"type_name": item["type_name"], "type_id": str(item["type_id"])})
for key in dy:
if key in jsontype_extend and jsontype_extend[key].strip() != "":
has_non_empty_field = True
break
if has_non_empty_field:
filters[str(item["type_id"])] = []
for dkey in jsontype_extend:
if dkey in dy and jsontype_extend[dkey].strip() != "":
values = jsontype_extend[dkey].split(",")
value_array = [{"n": value.strip(), "v": value.strip()} for value in values if
value.strip() != ""]
filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array})
result = {}
result["class"] = classes
result["filters"] = filters
return result
def homeVideoContent(self):
rsp = self.fetch(f"{self.host}/api.php/app/index_video?token=", headers=self.header)
root = rsp.json()['list']
videos = [item for vodd in root for item in vodd['vlist']]
return {'list': videos}
def categoryContent(self, tid, pg, filter, extend):
parms = {"pg": pg, "tid": tid, "class": extend.get("class", ""), "area": extend.get("area", ""),
"lang": extend.get("lang", ""), "year": extend.get("year", ""), "token": ""}
data = self.fetch(f'{self.host}/api.php/app/video', params=parms, headers=self.header).json()
return data
def detailContent(self, ids):
parms = {"id": ids[0], "token": ""}
data = self.fetch(f'{self.host}/api.php/app/video_detail', params=parms, headers=self.header).json()
vod = data['data']
vod.pop('pause_advert_list', None)
vod.pop('init_advert_list', None)
vod.pop('vod_url_with_player', None)
return {"list": [vod]}
def searchContent(self, key, quick, pg='1'):
parms = {'pg': pg, 'text': key, 'token': ''}
data = self.fetch(f'{self.host}/api.php/app/search', params=parms, headers=self.header).json()
return data
def playerContent(self, flag, id, vipFlags):
return {"parse": 0, "url": id, "header": {'User-Agent': 'User-Agent: Lavf/58.12.100'}}
def localProxy(self, param):
pass
+255
View File
@@ -0,0 +1,255 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import re
import sys
from Crypto.Hash import MD5
sys.path.append("..")
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from urllib.parse import quote, urlparse
from base64 import b64encode, b64decode
from concurrent.futures import ThreadPoolExecutor
import json
import time
from base.spider import Spider
class Spider(Spider):
'''
sites照常配置,
lives配置:
{
"name": "xxxx",
"type": 3,
"api": "路径/若惜追剧APP.py",
"ext": ""
}
'''
def init(self, extend=""):
self.host = self.gethost()
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def action(self, action):
pass
def destroy(self):
pass
def homeContent(self, filter):
data = self.getdata("/api.php/getappapi.index/initV119")
dy = {"class": "类型", "area": "地区", "lang": "语言", "year": "年份", "letter": "字母", "by": "排序",
"sort": "排序"}
filters = {}
classes = []
json_data = data["type_list"]
homedata = data["banner_list"][8:]
for item in json_data:
if item["type_name"] == "全部":
continue
has_non_empty_field = False
jsontype_extend = json.loads(item["type_extend"])
homedata.extend(item["recommend_list"])
jsontype_extend["sort"] = "最新,最热,最赞"
classes.append({"type_name": item["type_name"], "type_id": item["type_id"]})
for key in dy:
if key in jsontype_extend and jsontype_extend[key].strip() != "":
has_non_empty_field = True
break
if has_non_empty_field:
filters[str(item["type_id"])] = []
for dkey in jsontype_extend:
if dkey in dy and jsontype_extend[dkey].strip() != "":
values = jsontype_extend[dkey].split(",")
value_array = [{"n": value.strip(), "v": value.strip()} for value in values if
value.strip() != ""]
filters[str(item["type_id"])].append({"key": dkey, "name": dy[dkey], "value": value_array})
result = {}
result["class"] = classes
result["filters"] = filters
result["list"] = homedata[1:]
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
body = {"area": extend.get('area', '全部'), "year": extend.get('year', '全部'), "type_id": tid, "page": pg,
"sort": extend.get('sort', '最新'), "lang": extend.get('lang', '全部'),
"class": extend.get('class', '全部')}
result = {}
data = self.getdata("/api.php/getappapi.index/typeFilterVodList", body)
result["list"] = data["recommend_list"]
result["page"] = pg
result["pagecount"] = 9999
result["limit"] = 90
result["total"] = 999999
return result
def detailContent(self, ids):
body = f"vod_id={ids[0]}"
data = self.getdata("/api.php/getappapi.index/vodDetail", body)
vod = data["vod"]
play = []
names = []
for itt in data["vod_play_list"]:
a = []
names.append(itt["player_info"]["show"])
for it in itt['urls']:
it['user_agent']=itt["player_info"].get("user_agent")
it["parse"]=itt["player_info"].get("parse")
a.append(f"{it['name']}${self.e64(json.dumps(it))}")
play.append("#".join(a))
vod["vod_play_from"] = "$$$".join(names)
vod["vod_play_url"] = "$$$".join(play)
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg="1"):
body = f"keywords={key}&type_id=0&page={pg}"
data = self.getdata("/api.php/getappapi.index/searchList", body)
result = {"list": data["search_list"], "page": pg}
return result
def playerContent(self, flag, id, vipFlags):
ids = json.loads(self.d64(id))
h={"User-Agent": (ids['user_agent'] or "okhttp/3.14.9")}
try:
if re.search(r'url=', ids['parse_api_url']):
data=self.fetch(ids['parse_api_url'], headers=h, timeout=10).json()
url=data.get('url') or data['data'].get('url')
else:
body = f"parse_api={ids.get('parse') or ids['parse_api_url'].replace(ids['url'], '')}&url={quote(self.aes(ids['url'],True))}&token={ids.get('token')}"
b = self.getdata("/api.php/getappapi.index/vodParse", body)['json']
url = json.loads(b)['url']
if 'error' in url:raise ValueError(f"解析失败: {url}")
p=0
except Exception as e:
print('错误信息:',e)
url, p = ids['url'], 1
if re.search(r'\.jpg|\.png|\.jpeg', url):
url = self.Mproxy(url)
result = {}
result["parse"] = p
result["url"] = url
result["header"] = h
return result
def liveContent(self, url):
id=self.homeContent(True)['class'][-1]['type_id']
vlist=self.categoryContent(id,1,False,{})['list']
results = []
with ThreadPoolExecutor(max_workers=len(vlist)) as executor:
futures = [executor.submit(self.livedetailContent, item['vod_name'], item['vod_id']) for item in vlist]
for future in futures:
try:
detail = future.result()
if detail:
results.append(detail)
except Exception as e:
print(f"处理详情数据失败: {str(e)}")
return '\n'.join(results)
def livedetailContent(self, name,id):
try:
print(f"获取直播源:{name}")
body = f"vod_id={id}"
data = self.getdata("/api.php/getappapi.index/vodDetail", body)
play = [f"{name},#genre#"]
for itt in data["vod_play_list"]:
for it in itt['urls']:
play.append(f"{it['name']}, {it['url']}")
except Exception as e:
print(f"获取直播源失败:{str(e)}")
play=[]
return '\n'.join(play)
def localProxy(self, param):
return self.Mlocal(param)
def gethost(self):
headers = {
'User-Agent': 'okhttp/3.14.9'
}
host = self.fetch('https://rxysyyds.oss-cn-chengdu.aliyuncs.com/getapp.txt', headers=headers).text
return host.strip()
def aes(self, text,b=None):
key = b"ebad3f1a58b13933"
cipher = AES.new(key, AES.MODE_CBC, key)
if b:
ct_bytes = cipher.encrypt(pad(text.encode("utf-8"), AES.block_size))
ct = b64encode(ct_bytes).decode("utf-8")
return ct
else :
pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size)
return pt.decode("utf-8")
def header(self):
t = str(int(time.time()))
header = {"Referer":self.host,
"User-Agent": "okhttp/3.14.9", "app-version-code": "140", "app-ui-mode": "light",
"app-api-verify-time": t, "app-user-device-id": self.md5(t),
"app-api-verify-sign": self.aes(t,True),
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"}
return header
def getdata(self, path, data=None):
vdata = self.post(f"{self.host}{path}", headers=self.header(), data=data, timeout=10).json()['data']
data1 = self.aes(vdata)
return json.loads(data1)
def Mproxy(self, url):
return f"{self.getProxyUrl()}&url={self.e64(url)}&type=m3u8"
def Mlocal(self, param,header=None):
url = self.d64(param["url"])
ydata = self.fetch(url, headers=header, allow_redirects=False)
data = ydata.content.decode('utf-8')
if ydata.headers.get('Location'):
url = ydata.headers['Location']
data = self.fetch(url, headers=header).content.decode('utf-8')
parsed_url = urlparse(url)
durl = parsed_url.scheme + "://" + parsed_url.netloc
lines = data.strip().split('\n')
for index, string in enumerate(lines):
if '#EXT' not in string and 'http' not in string:
last_slash_index = string.rfind('/')
lpath = string[:last_slash_index + 1]
lines[index] = durl + ('' if lpath.startswith('/') else '/') + lpath
data = '\n'.join(lines)
return [200, "application/vnd.apple.mpegur", data]
def e64(self, text):
try:
text_bytes = text.encode('utf-8')
encoded_bytes = b64encode(text_bytes)
return encoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64编码错误: {str(e)}")
return ""
def d64(self,encoded_text):
try:
encoded_bytes = encoded_text.encode('utf-8')
decoded_bytes = b64decode(encoded_bytes)
return decoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64解码错误: {str(e)}")
return ""
def md5(self, text):
h = MD5.new()
h.update(text.encode('utf-8'))
return h.hexdigest()
+340
View File
@@ -0,0 +1,340 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import binascii
import json
import os
import re
import sys
import time
import uuid
from urllib.parse import urlparse
from concurrent.futures import ThreadPoolExecutor
sys.path.append('..')
from base.spider import Spider
from base64 import b64encode, b64decode
from Crypto.PublicKey import RSA
from Crypto.Cipher import AES, PKCS1_v1_5
from Crypto.Util.Padding import unpad, pad
from Crypto.Hash import MD5
class Spider(Spider):
def init(self, extend=""):
self.host = self.gethost()
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
headers = {
'AppID': '534',
'app_id': '534',
'version': '1.0.3',
'package': 'com.hjmore.wallpaper',
'user_id': '3507f394e83d2424',
'user-id': '3507f394e83d2424',
'app_name': 'lanlan',
'app-name': 'lanlan',
'Content-Type': 'application/json; charset=utf-8;',
'User-Agent': 'okhttp/4.9.0'
}
def homeContent(self, filter):
hdata=self.getdata('/api.php/provide/index',self.getbody({'tid':'0'}))
vlist=hdata['data'].get('tj',[])
result = {}
classes = []
filters = {}
for i in hdata['data']['sub_data']:
id=str(i['type_id'])
classes.append({'type_id': id, 'type_name': i['type_name']})
if len(i['data']):
vlist.extend(i['data'])
with ThreadPoolExecutor(max_workers=len(classes)) as executor:
results = executor.map(self.getf, classes)
for id, ft in results:
if len(ft):filters[id] = ft
result['class'] = classes
result['filters'] = filters
result['list'] = vlist
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
body={
"tid": tid,
"type": extend.get('type'),
"lang": extend.get('lang'),
"area": extend.get('area'),
"year": extend.get('year'),
"pg": pg
}
body = {k: v for k, v in body.items() if v is not None and v != ""}
data=self.getdata('/api.php/provide/nav',self.getbody(body))
result = {}
result['list'] = data['data']['data']
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
pass
def detailContent(self, ids):
data=self.getdata('/api.php/provide/vod',self.getbody({'ids':ids[0]}))
vod=data['data']
plist=[]
names=[]
for i in vod['vod_play_url']:
ulist=[]
names.append(i['name'].split(' ')[0])
jdata={'parse':''}
if i.get('parse') and isinstance(i['parse'], list) and len(i['parse']):
jdata['parse']=self.e64(json.dumps(i['parse']))
for j in i['data']:
jdata['url']=j['url']
ulist.append(f'{j["name"]}${self.e64(json.dumps(jdata))}')
plist.append('#'.join(ulist))
vod['vod_play_from']='$$$'.join(names)
vod['vod_play_url']='$$$'.join(plist)
vod.pop('cover_list', None)
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
body={"wd":key,"tid":"0","pg":pg}
data=self.getdata('/api.php/provide/search',self.getbody(body))
vlist=[]
for i in data['data']:
i.pop('vod_play_from', None)
vlist.append(i)
return {'list':vlist,'page':pg}
def playerContent(self, flag, id, vipFlags):
data=json.loads(self.d64(id))
parse=data.get('parse')
url,p,head = data.get('url'),1,''
if parse:
parse=json.loads(self.d64(parse))
if not re.search(r'\.m3u8|.mp4|\.flv', url) and parse:
for p in parse:
try:
data=self.fetch(f'{p}{url}',self.headers).json()
url=data.get('data',{}).get('url') or data.get('url')
head=data.get('data',{}).get('header') or data.get('header')
p=0
break
except:
p,url=1,data.get('url')
head = {'User-Agent': 'okhttp/4.9.0'}
return {'parse': p, 'url': url, 'header': head}
def localProxy(self, param):
pass
def getf(self, map):
ft,id =[], map['type_id']
try:
fdata = self.getdata('/api.php/provide/nav', self.getbody({'tid': id, 'pg': '1'}))
dy = ['area', 'year', 'lang', 'type']
fd = fdata['data']['type_extend']
has_non_empty_field = False
for key in dy:
if key in fd and fd[key].strip() != "":
has_non_empty_field = True
break
if has_non_empty_field:
for dkey in fd:
if dkey in dy and fd[dkey].strip() != "":
values = fd[dkey].split(",")
value_array = [{"n": value.strip(), "v": value.strip()} for value in values if
value.strip() != ""]
ft.append({"key": dkey, "name": dkey, "value": value_array})
return (id, ft)
except:
return (id, ft)
def getskey(self):
random_bytes = os.urandom(16)
return binascii.hexlify(random_bytes).decode()
def getohost(self):
url='https://bianyuan001.oss-cn-beijing.aliyuncs.com/huidu1.0.0.json'
response = self.fetch(url, headers=self.headers).json()
return response['servers'][0]
def gethost(self):
body={
"gr_rp_size": "1080*2272",
"gr_app_list": "%E5%B1%8F%E5%B9%95%E5%BD%95%E5%88%B6%EF%BC%88com.miui.screenrecorder%29%0A%E5%A4%B8%E5%85%8B%EF%BC%88com.quark.browser%29%0A%E8%BE%B9%E7%BC%98%E8%A7%86%E9%A2%91%EF%BC%88com.hjmore.wallpaper%29%0A%E5%93%94%E5%93%A9%E5%93%94%E5%93%A9%EF%BC%88tv.danmaku.bili%29%0A%E7%81%AB%E6%98%9F%E6%90%9C%E9%A2%98%EF%BC%88com.fenbi.android.souti%29%0A%E6%94%AF%E4%BB%98%E5%AE%9D%EF%BC%88com.eg.android.AlipayGphone%29%0AWPS%20Office%EF%BC%88cn.wps.moffice_eng%29",
"gr_lal": "0.0%2C0.0",
"gr_system_type": "android",
"gr_device_imei": "3507f394e83d2424",
"gr_app_version": "1.0.3",
"gr_device_model": "Xiaomi%20M2012K10C%20%28Android%20%E7%89%88%E6%9C%AC%3A%2011%2C%20SDK%E7%89%88%E6%9C%AC%3A%2030%29",
"gr_city": "%E8%B4%B5%E5%B7%9E%2C%E6%9C%AA%E7%9F%A5%2C%E6%9C%AA%E7%9F%A5",
"requestId": self.uuid(),
"timeStamp": str(int(time.time() * 1000)),
"version": "1.0.3",
"package": "com.hjmore.wallpaper",
"userLoginToken": "",
"app_id": "534",
"appName": 2131951658,
"device_id": "3507f394e83d2424",
"device-id": "3507f394e83d2424",
"oaid": "",
"imei": "",
"referer_shop": "边缘影视",
"referer-shop": "边缘影视",
"access_fine_location": 0,
"access-fine-location": 0
}
ohost = self.getohost()
data=self.getdata(f'/api.php/settings/grayscale_list',body,ohost)
parsed_url = urlparse(data['data']['grayscale']['server_url'][0])
domain = parsed_url.scheme + "://" + parsed_url.netloc
return domain
def drsa(self, encrypted_data):
private_key_pem = """-----BEGIN RSA PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDA5NWiAwRjH50/
IJY1N0zLopa4jpuWE7kWMn1Qunu6SjBgTvNRmRUoPDHn54haLfbfXIa2X+/sIaMB
/O3HhrpVsz55E5W2vpZ5fBYWh+M65bQERKTW+l72H7GR9x0yj3QPByzzfsj/QkyP
81prpwR9i8yMe7yG9TFKqUQCPE+/GrhNU1Qf6nFmV+vMnlP9DantkwAt4fPOMZn3
j4da65/1YQV+F5bYzaLenNVKbHf8U8fVYLZWIy4yk2Vpe4R2Z+JX/eHWsChE9hOu
iFm02eTW5NJLZlWUxYrSE23VXi8oXSEdON3UEOrwSdAUh4SXxLZ9U7KpNVdTwWyR
AS4GyzJ/AgMBAAECggEBAKzmcXefLLeNBu4mz30z7Go7es5DRcLoOudiqmFKRs1c
4q/xFLj3drdx/WnZZ6ctvDPKRBYFOJF4NRz7Ekfew/c9i6oLnA8KFuceCs53T37j
ltCclwT7t1L2ZbxovIsteuJdlDVOV+w2CVqez1Xfh27heKAT6ZEvBtfdkVBPr0uj
oVwa2+XlJmYZw5dHeB7ySVeAQ+69zDuADB8OWxPWsv6Del+Fhf0kTHAw4WgqcYsd
JUunCjgLdJUlDgXzH/M/Nj8NYVEuq6QpmhaktJ4fwn/F7u3lQllVCFKj5lr0Xb92
y7lvQlGqMKX1oxf+P5c5/vie1kDx1Rj4S++flIcVlUECgYEA4BuxCZ1c8oOF98bs
KTAONnnZniQ1BRt7rA+O9+++lDjxJhxkuthwjB9YzrnZtxHJtvIIie9Jv8MVfzHa
p2woDtiEh3YYwmIlgNUFvTcGe++tTiEiLDcGc/xNhpvfbLaw9QB7/HQ+LT1QCMxJ
ufdBrR98l0khIGjYqxDW3W5pV70CgYEA3Ff/9+GM2XI/EUSTYrpnwp5R5OsXz1DL
3CFFgp1EPCNk/c3YNWnrUtTkfmKAlRqWIHfphvH/jS6jpGrfRxDggPwGMtBc134b
brIM5i4KNj/EcE+w5g03HaKBf1ZihHDQ53c6wTn6IFOHJNSPRLqMNqRymfbclNyO
lBMHQmB8yOsCgYBCdZPTwRnuRTi2WQRx1nFwkEQL1Lrwb80GInsIZc2DkTtaTPNG
QadmtmkUrSK2Wo0SNsZ3eUHKn2TBmpw4KCfc9zKeJVSEWKy8fu+7xBSlLlebotHK
gOrl/H1VHOZuC+OAVItwO1yw98zDPynh/0Q3ve2pw6MSRGV0nYLKmdKdlQKBgQCJ
Ty1rw1qKhu9WS22tMIxIc3CFPxtvTeI8I1+1rVtAPq5Im2YIoyDKVXCucaO/RvoW
8aLNPTELQe0oIJFTL+k3d9ZFBCNXBncB3GK9biNe+w3nD0IlmkamaQZZ2/M4pTUJ
iPtMPlzomCS3ht5g7f9CbegcmgGLooYXMGRtsMMSUQKBgQCoj+3UciH2i+HyUla5
1FxivjH3MqSTE4Q7OdzrELb6DoLYzjgWAbpG8HIuodD4uG5xz1oR5H7vkblf1itB
hwOwDEiabyX76e/I3Q0ovwBV+9PMjM4UVU0kHoiu3Z2s90ckwNh58w3QH5fn9E0b
fqMnB6uWze+xrXWijaOzVZhIZg==
-----END RSA PRIVATE KEY-----"""
private_key = RSA.import_key(private_key_pem)
cipher = PKCS1_v1_5.new(private_key)
decrypted_data = cipher.decrypt(b64decode(encrypted_data), None)
return decrypted_data.decode('utf-8')
def ersa(self, data):
public_key = """-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+0QMb3WDXjNBRovRhTLH
g3d+CliZAva2tepWNNN0Pj6DgE3ZTnPR34iL/cjo9Jbd3dqAJs/YkKnFurGkDxz5
TthIqvmz244wiFcHt+FGWoJsj5ZVvrH3pPwH85ggmI1DjxSJEUhB12Z9X6FGli8D
drR9xeLe5y8vFekux8xCQ7pwH1mNQu4Wy32WVM8aLjmRjNzEWOvEMAWCRuwymEdS
zlWoH53qk1dqd6DAmOJhWU2hH6Yt2ZY9LTaDGiHrS+g0DuwajAQzhbM8eonGYMph
nP4q0UTHWEfaGR3HoILmeM32M+qF/UCGfgfR6tCMiXPoHwnD2zoxbZ2p+QlYuTZL
vQIDAQAB
-----END PUBLIC KEY-----"""
key = RSA.importKey(public_key)
cipher = PKCS1_v1_5.new(key)
encrypted = cipher.encrypt(data.encode())
return b64encode(encrypted).decode()
def eaes(self, data, key):
key = key.encode('utf-8')
cipher = AES.new(key, AES.MODE_ECB)
padded = pad(data.encode('utf-8'), AES.block_size)
encrypted = cipher.encrypt(padded)
word = b64encode(encrypted).decode('utf-8')
return word
def daes(self, encrypted_data, key):
key = key.encode('utf-8')
cipher = AES.new(key, AES.MODE_ECB)
encrypted = b64decode(encrypted_data)
decrypted = cipher.decrypt(encrypted)
unpadded = unpad(decrypted, AES.block_size)
return unpadded.decode('utf-8')
def getbody(self,params=None):
body = {
"requestId": self.uuid(),
"timeStamp": str(int(time.time()*1000)),
"version": "1.0.3",
"package": "com.hjmore.wallpaper",
"userLoginToken": "",
"app_id": "534",
"appName": 2131951658,
"device_id": "3507f394e83d2424",
"device-id": "3507f394e83d2424",
"oaid": "",
"imei": "",
"referer_shop": "边缘影视",
"referer-shop": "边缘影视",
"access_fine_location": 0,
"access-fine-location": 0
}
if params:
body.update(params)
return body
def getdata(self, path, body,host=None):
jdata=json.dumps(body)
msign = self.md5(jdata)
skey = self.getskey()
jsign={'key': skey,'sign': msign}
Sign=self.ersa(json.dumps(jsign))
header=self.headers.copy()
header['Sign']=Sign
dbody=self.eaes(jdata, skey)
response = self.post(f'{host or self.host}{path}', headers=header, data=dbody)
rdata=response.text
if response.headers.get('Sign'):
dkey=self.drsa(response.headers['Sign'])
rdata=self.daes(rdata, dkey)
return json.loads(rdata)
def e64(self, text):
try:
text_bytes = text.encode('utf-8')
encoded_bytes = b64encode(text_bytes)
return encoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64编码错误: {str(e)}")
return ""
def d64(self,encoded_text):
try:
encoded_bytes = encoded_text.encode('utf-8')
decoded_bytes = b64decode(encoded_bytes)
return decoded_bytes.decode('utf-8')
except Exception as e:
print(f"Base64解码错误: {str(e)}")
return ""
def md5(self,text):
h = MD5.new()
h.update(text.encode('utf-8'))
return h.hexdigest()
def uuid(self):
return str(uuid.uuid4())
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1729 -1176
View File
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
BIN
View File
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

-25
View File
@@ -1,25 +0,0 @@
{
"请求头": "User-Agent$MOBILE_UA",
"主页url": "https://www.aiwodj.com",
"数组": "lazy lazyloaded&&</a[替换:amp;>>]",
"图片": "data-src=\"&&\"",
"标题": "title=\"&&\"",
"链接": "href=\"&&\"",
"副标题": "+module-item-caption\">&&</div",
"简介": "description\" content=\"&&,这里",
"线路数组": "module-tab-item tab-item&&</div",
"线路标题": "+span>&&</span",
"播放数组": "module-blocklist&&</div>",
"播放列表": "<a&&</a>",
"播放标题": "span>&&</span>",
"播放链接": "href=\"&&\"",
"跳转播放链接": "urlDecode(var player_*\"url\":\"&&\")",
"搜索url": "https://www.aiwodj.com/vodsearch/{wd}----------{pg}---.html",
"搜索数组": "lazy lazyload&&</a[替换:amp;>>]",
"搜索图片": "data-src=\"&&\"",
"搜索标题": "+title=\"&&\"",
"搜索链接": "href=\"&&\"",
"分类url": "https://www.aiwodj.com/vodshow/{cateId}--{by}-{class}-{lang}----{catePg}---{year}.html",
"分类": "穿越&战神&重生&爱情&萌娃&神医&古代&玄幻&言情",
"分类值": "fenle&fenlei2&fenlei3&fenlei4&guda&shenyi&gudai&xuanhuan&yanqing"
}
+105 -37
View File
@@ -89,6 +89,29 @@
"filterable": 1,
"ext": "http://cmsyt114.lyyytv.cn/api.php/app/"
},
{
"key": "乐享影视",
"name": "乐享|影视",
"type": 3,
"api": "csp_AppYsV2",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": "http://114.66.55.28:8818/api.php/app/"
},
{
"key": "金牌影视",
"name": "金牌|影视",
"type": 3,
"api": "./py/金牌影视.py",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2,
"ext": {
"site": "https://www.hkybqufgh.com,https://www.sizhengxt.com,https://0996zp.com,https://9zhoukj.com/,https://www.sizhengxt.com,https://www.tjrongze.com,https://www.jiabaide.cn,https://cqzuoer.com"
}
},
{
"key": "哔哩视频",
"name": "哔哩|视频",
@@ -195,17 +218,6 @@
"changeable": 1,
"ext": "./json/lb.json?"
},
{
"key": "小米",
"name": "小米|4K弹幕",
"type": 3,
"api": "csp_PanWebShare",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"changeable": 1,
"ext": "./json/xm.json?"
},
{
"key": "至臻",
"name": "至臻|4K弹幕",
@@ -415,10 +427,23 @@
"key": "河马短剧",
"name": "河马|短剧",
"type": 3,
"api": "csp_AppHMDJ",
"api": "./py/河马短剧.py",
"searchable": 1,
"quickSearch": 0,
"filterable": 0
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "偷乐短剧",
"name": "偷乐|短剧",
"type": 3,
"api": "./py/偷乐短剧.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "爱看短剧",
@@ -431,16 +456,6 @@
"filterable": 1,
"playerType": 2
},
{
"key": "爱我短剧",
"name": "爱我|短剧",
"type": 3,
"api": "csp_XBPQ",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": "./XBPQ/爱我短剧.json"
},
{
"key": "短剧网",
"name": "短剧网|短剧",
@@ -468,19 +483,6 @@
"filterable": 1,
"ext": "https://cs.hgyx.vip/api2/api.php/app/"
},
{
"key": "金牌影视",
"name": "金牌|影视",
"type": 3,
"api": "./py/金牌影视.py",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2,
"ext": {
"site": "https://www.hkybqufgh.com,https://www.sizhengxt.com,https://0996zp.com,https://9zhoukj.com/,https://www.sizhengxt.com,https://www.tjrongze.com,https://www.jiabaide.cn,https://cqzuoer.com"
}
},
{
"key": "猎手影视",
"name": "猎手|APP",
@@ -1782,6 +1784,64 @@
}
}
},
{
"name": "钓鱼",
"type": "1",
"url": "http://8.129.30.117:8117/diaoyu.php?url=",
"ext": {
"flag": [
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺",
"youku",
"优酷",
"sohu",
"搜狐",
"letv",
"乐视",
"mgtv",
"芒果",
"tnmb",
"seven",
"bilibili",
"1905"
],
"header": {
"User-Agent": "okhttp/4.9.1"
}
}
},
{
"name": "无上",
"type": "1",
"url": "https://mfjx.iwsyy.xyz/?url=",
"ext": {
"flag": [
"qq",
"腾讯",
"qiyi",
"爱奇艺",
"奇艺",
"youku",
"优酷",
"sohu",
"搜狐",
"letv",
"乐视",
"mgtv",
"芒果",
"tnmb",
"seven",
"bilibili",
"1905"
],
"header": {
"User-Agent": "okhttp/4.9.1"
}
}
},
{
"name": "臻享",
"type": "1",
@@ -2064,6 +2124,14 @@
"playerType": 2,
"timeout": 10
},
{
"name": "Guovin",
"type": 0,
"url": "https://gitee.com/mytv-android/iptv-api/raw/master/output/result.m3u",
"epg": "http://cdn.1678520.xyz/epg/?ch={name}&date={date}",
"playerType": 2,
"timeout": 10
},
{
"name": "虎牙一起看",
"type": 3,
-1457
View File
File diff suppressed because it is too large. Load diff
+790
View File
@@ -0,0 +1,790 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 偷乐短剧爬虫
import sys
import json
import re
import time
import urllib.parse
import requests
from bs4 import BeautifulSoup
# 导入基础类
sys.path.append('../../')
try:
from base.spider import Spider
except ImportError:
# 本地调试时的替代实现
class Spider:
def init(self, extend=""):
pass
class Spider(Spider):
def __init__(self):
# 网站主URL
self.siteUrl = "https://www.toule.top"
# 根据网站实际结构,分类链接格式为: /index.php/vod/show/class/分类名/id/1.html
# 分类ID映射 - 从网站中提取的分类
self.cateManual = {
"男频": "/index.php/vod/show/class/%E7%94%B7%E9%A2%91/id/1.html",
"女频": "/index.php/vod/show/class/%E5%A5%B3%E9%A2%91/id/1.html",
"都市": "/index.php/vod/show/class/%E9%83%BD%E5%B8%82/id/1.html",
"赘婿": "/index.php/vod/show/class/%E8%B5%98%E5%A9%BF/id/1.html",
"战神": "/index.php/vod/show/class/%E6%88%98%E7%A5%9E/id/1.html",
"古代言情": "/index.php/vod/show/class/%E5%8F%A4%E4%BB%A3%E8%A8%80%E6%83%85/id/1.html",
"现代言情": "/index.php/vod/show/class/%E7%8E%B0%E4%BB%A3%E8%A8%80%E6%83%85/id/1.html",
"历史": "/index.php/vod/show/class/%E5%8E%86%E5%8F%B2/id/1.html",
"玄幻": "/index.php/vod/show/class/%E7%8E%84%E5%B9%BB/id/1.html",
"搞笑": "/index.php/vod/show/class/%E6%90%9E%E7%AC%91/id/1.html",
"甜宠": "/index.php/vod/show/class/%E7%94%9C%E5%AE%A0/id/1.html",
"励志": "/index.php/vod/show/class/%E5%8A%B1%E5%BF%97/id/1.html",
"逆袭": "/index.php/vod/show/class/%E9%80%86%E8%A2%AD/id/1.html",
"穿越": "/index.php/vod/show/class/%E7%A9%BF%E8%B6%8A/id/1.html",
"古装": "/index.php/vod/show/class/%E5%8F%A4%E8%A3%85/id/1.html"
}
# 请求头
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36",
"Referer": "https://www.toule.top/",
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
"Accept-Encoding": "gzip, deflate, br",
"Connection": "keep-alive",
}
# 缓存
self.cache = {}
self.cache_timeout = {}
def getName(self):
return "偷乐短剧"
def init(self, extend=""):
# 初始化方法,可以留空
return
def isVideoFormat(self, url):
"""判断是否为视频格式"""
video_formats = ['.mp4', '.m3u8', '.ts', '.flv', '.avi', '.mkv', '.mov', '.rmvb', '.3gp']
for format in video_formats:
if format in url.lower():
return True
return False
def manualVideoCheck(self):
"""是否需要手动检查视频"""
return False
# 工具方法 - 网络请求
def fetch(self, url, headers=None, data=None, method="GET"):
"""统一的网络请求方法"""
try:
if headers is None:
headers = self.headers.copy()
if method.upper() == "GET":
response = requests.get(url, headers=headers, params=data, timeout=10,verify=False)
else: # POST
response = requests.post(url, headers=headers, data=data, timeout=10,verify=False)
response.raise_for_status()
response.encoding = response.apparent_encoding or 'utf-8'
return response
except Exception as e:
self.log(f"请求失败: {url}, 错误: {str(e)}", "ERROR")
return None
# 缓存方法
def getCache(self, key, timeout=3600):
"""获取缓存数据"""
if key in self.cache and key in self.cache_timeout:
if time.time() < self.cache_timeout[key]:
return self.cache[key]
else:
del self.cache[key]
del self.cache_timeout[key]
return None
def setCache(self, key, value, timeout=3600):
"""设置缓存数据"""
self.cache[key] = value
self.cache_timeout[key] = time.time() + timeout
# 日志方法
def log(self, msg, level='INFO'):
"""记录日志"""
levels = {
'DEBUG': 0,
'INFO': 1,
'WARNING': 2,
'ERROR': 3
}
current_level = 'INFO' # 可以设置为DEBUG以获取更多信息
if levels.get(level, 4) >= levels.get(current_level, 1):
print(f"[{level}] {time.strftime('%Y-%m-%d %H:%M:%S')} - {msg}")
# 辅助方法 - 从URL中提取视频ID
def extractVodId(self, url):
"""从URL中提取视频ID"""
# 路径格式: /index.php/vod/play/id/9024/sid/1/nid/1.html
match = re.search(r'/id/(\d+)/', url)
if match:
return match.group(1)
return ""
# 辅助方法 - 从网页内容中提取分类
def extractCategories(self, text):
"""从网页内容中提取分类标签"""
cats = []
# 匹配标签字符串,例如: "男频,逆袭,亲情,短剧"
if "," in text:
parts = text.split(",")
for part in parts:
part = part.strip()
if part and part != "短剧":
cats.append(part)
return cats
# 主要接口实现
def homeContent(self, filter):
"""获取首页分类及内容"""
result = {}
classes = []
# 从缓存获取
cache_key = 'home_classes'
cached_classes = self.getCache(cache_key)
if cached_classes:
classes = cached_classes
else:
# 使用预定义的分类
for k, v in self.cateManual.items():
classes.append({
'type_id': v, # 使用完整URL路径作为type_id
'type_name': k
})
# 保存到缓存
self.setCache(cache_key, classes, 24*3600) # 缓存24小时
result['class'] = classes
# 获取首页推荐视频
videos = self.homeVideoContent().get('list', [])
result['list'] = videos
return result
def homeVideoContent(self):
"""获取首页推荐视频内容"""
result = {'list': []}
videos = []
# 从缓存获取
cache_key = 'home_videos'
cached_videos = self.getCache(cache_key)
if cached_videos:
return {'list': cached_videos}
try:
response = self.fetch(self.siteUrl)
if response and response.status_code == 200:
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 查找最新更新区域
latest_section = soup.find('h2', text=lambda t: t and '最新更新' in t)
if latest_section:
container = latest_section.parent # 获取容器
if container:
# 查找所有 li.item 元素
items = container.find_all('li', class_='item')
for item in items:
try:
# 获取链接和标题
title_link = item.find('h3')
if not title_link:
continue
title = title_link.text.strip()
# 获取第一个链接作为详情页链接
link_tag = item.find('a')
if not link_tag:
continue
link = link_tag.get('href', '')
if not link.startswith('http'):
link = urllib.parse.urljoin(self.siteUrl, link)
# 提取ID
vid = self.extractVodId(link)
if not vid:
continue
# 获取图片
img_tag = item.find('img')
img_url = ""
if img_tag:
img_url = img_tag.get('src', img_tag.get('data-src', ''))
if img_url and not img_url.startswith('http'):
img_url = urllib.parse.urljoin(self.siteUrl, img_url)
# 获取备注信息
remarks = ""
remarks_tag = item.find('span', class_='remarks')
if remarks_tag:
remarks = remarks_tag.text.strip()
# 获取标签信息
tags = ""
tags_tag = item.find('span', class_='tags')
if tags_tag:
tags = tags_tag.text.strip()
# 合并备注和标签
if remarks and tags:
remarks = f"{remarks} | {tags}"
elif tags:
remarks = tags
# 构建视频项
videos.append({
'vod_id': vid,
'vod_name': title,
'vod_pic': img_url,
'vod_remarks': remarks
})
except Exception as e:
self.log(f"处理视频项时出错: {str(e)}", "ERROR")
continue
# 保存到缓存
self.setCache(cache_key, videos, 3600) # 缓存1小时
except Exception as e:
self.log(f"获取首页视频内容发生错误: {str(e)}", "ERROR")
result['list'] = videos
return result
def categoryContent(self, tid, pg, filter, extend):
"""获取分类内容"""
result = {}
videos = []
# 处理页码
if pg is None:
pg = 1
else:
pg = int(pg)
# 构建分类URL - tid是完整的URL路径
if tid.startswith("/"):
# 替换页码,URL格式可能像: /index.php/vod/show/class/男频/id/1.html
if pg > 1:
if "html" in tid:
category_url = tid.replace(".html", f"/page/{pg}.html")
else:
category_url = f"{tid}/page/{pg}.html"
else:
category_url = tid
full_url = urllib.parse.urljoin(self.siteUrl, category_url)
else:
# 如果tid不是URL路径,可能是旧版分类ID,尝试查找对应URL
category_url = ""
for name, url in self.cateManual.items():
if name == tid:
category_url = url
break
if not category_url:
self.log(f"未找到分类ID对应的URL: {tid}", "ERROR")
result['list'] = []
result['page'] = pg
result['pagecount'] = 1
result['limit'] = 0
result['total'] = 0
return result
# 处理页码
if pg > 1:
if "html" in category_url:
category_url = category_url.replace(".html", f"/page/{pg}.html")
else:
category_url = f"{category_url}/page/{pg}.html"
full_url = urllib.parse.urljoin(self.siteUrl, category_url)
# 请求分类页
try:
response = self.fetch(full_url)
if response and response.status_code == 200:
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 查找视频项,根据实际HTML结构调整
items = soup.find_all('li', class_='item')
for item in items:
try:
# 获取链接和标题
title_tag = item.find('h3')
if not title_tag:
continue
title = title_tag.text.strip()
# 获取链接
link_tag = item.find('a')
if not link_tag:
continue
link = link_tag.get('href', '')
if not link.startswith('http'):
link = urllib.parse.urljoin(self.siteUrl, link)
# 提取ID
vid = self.extractVodId(link)
if not vid:
continue
# 获取图片
img_tag = item.find('img')
img_url = ""
if img_tag:
img_url = img_tag.get('src', img_tag.get('data-src', ''))
if img_url and not img_url.startswith('http'):
img_url = urllib.parse.urljoin(self.siteUrl, img_url)
# 获取备注信息
remarks = ""
remarks_tag = item.find('span', class_='remarks')
if remarks_tag:
remarks = remarks_tag.text.strip()
# 获取标签信息
tags = ""
tags_tag = item.find('span', class_='tags')
if tags_tag:
tags = tags_tag.text.strip()
# 合并备注和标签
if remarks and tags:
remarks = f"{remarks} | {tags}"
elif tags:
remarks = tags
# 构建视频项
videos.append({
'vod_id': vid,
'vod_name': title,
'vod_pic': img_url,
'vod_remarks': remarks
})
except Exception as e:
self.log(f"处理分类视频项时出错: {str(e)}", "ERROR")
continue
# 查找分页信息
# 默认值
total = len(videos)
pagecount = 1
limit = 20
# 尝试查找分页元素
pagination = soup.find('ul', class_='page')
if pagination:
# 查找最后一页的链接
last_page_links = pagination.find_all('a')
for link in last_page_links:
page_text = link.text.strip()
if page_text.isdigit():
pagecount = max(pagecount, int(page_text))
except Exception as e:
self.log(f"获取分类内容发生错误: {str(e)}", "ERROR")
result['list'] = videos
result['page'] = pg
result['pagecount'] = pagecount
result['limit'] = limit
result['total'] = total
return result
def detailContent(self, ids):
"""获取详情内容"""
result = {}
if not ids or len(ids) == 0:
return result
# 视频ID
vid = ids[0]
# 构建播放页URL
play_url = f"{self.siteUrl}/index.php/vod/play/id/{vid}/sid/1/nid/1.html"
try:
response = self.fetch(play_url)
if not response or response.status_code != 200:
return result
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 提取视频基本信息
# 标题
title = ""
title_tag = soup.find('h1', class_='items-title')
if title_tag:
title = title_tag.text.strip()
# 图片
pic = ""
pic_tag = soup.find('img', class_='thumb')
if pic_tag:
pic = pic_tag.get('src', '')
if pic and not pic.startswith('http'):
pic = urllib.parse.urljoin(self.siteUrl, pic)
# 简介
desc = ""
desc_tag = soup.find('div', class_='text-content')
if desc_tag:
desc = desc_tag.text.strip()
# 标签/分类
tags = []
tags_container = soup.find('span', class_='items-tags')
if tags_container:
tag_links = tags_container.find_all('a')
for tag in tag_links:
tag_text = tag.text.strip()
if tag_text:
tags.append(tag_text)
# 提取播放列表
play_from = "偷乐短剧"
play_list = []
# 查找播放列表区域
play_area = soup.find('div', class_='swiper-wrapper')
if play_area:
# 查找所有剧集链接
episode_links = play_area.find_all('a')
for ep in episode_links:
ep_title = ep.text.strip()
ep_url = ep.get('href', '')
if ep_url:
# 直接使用URL作为ID
if not ep_url.startswith('http'):
ep_url = urllib.parse.urljoin(self.siteUrl, ep_url)
# 提取集数信息
ep_num = ep_title
if ep_num.isdigit():
ep_num = f"第{ep_num}集"
play_list.append(f"{ep_num}${ep_url}")
# 如果没有找到播放列表,查找播放按钮
if not play_list:
play_btn = soup.find('a', class_='btn-play')
if play_btn:
play_url = play_btn.get('href', '')
if play_url:
if not play_url.startswith('http'):
play_url = urllib.parse.urljoin(self.siteUrl, play_url)
play_list.append(f"播放${play_url}")
# 如果仍然没有找到播放链接,使用播放页URL
if not play_list:
play_url = f"{self.siteUrl}/index.php/vod/play/id/{vid}/sid/1/nid/1.html"
play_list.append(f"播放${play_url}")
# 提取更多信息(导演、演员等)
director = ""
actor = ""
year = ""
area = ""
remarks = ""
# 查找备注信息
meta_items = soup.find_all('div', class_='meta-item')
for item in meta_items:
item_title = item.find('span', class_='item-title')
item_content = item.find('span', class_='item-content')
if item_title and item_content:
title_text = item_title.text.strip()
content_text = item_content.text.strip()
if "导演" in title_text:
director = content_text
elif "主演" in title_text:
actor = content_text
elif "年份" in title_text:
year = content_text
elif "地区" in title_text:
area = content_text
elif "简介" in title_text:
if not desc:
desc = content_text
elif "状态" in title_text:
remarks = content_text
# 如果没有从meta-item中获取到remarks
if not remarks:
remarks_tag = soup.find('span', class_='remarks')
if remarks_tag:
remarks = remarks_tag.text.strip()
# 构建标准数据结构
vod = {
"vod_id": vid,
"vod_name": title,
"vod_pic": pic,
"vod_year": year,
"vod_area": area,
"vod_remarks": remarks,
"vod_actor": actor,
"vod_director": director,
"vod_content": desc,
"type_name": ",".join(tags),
"vod_play_from": play_from,
"vod_play_url": "#".join(play_list)
}
result = {
'list': [vod]
}
except Exception as e:
self.log(f"获取详情内容时出错: {str(e)}", "ERROR")
return result
def searchContent(self, key, quick, pg=1):
"""搜索功能"""
result = {}
videos = []
# 构建搜索URL和参数
search_url = f"{self.siteUrl}/index.php/vod/search.html"
params = {"wd": key}
try:
response = self.fetch(search_url, data=params)
if response and response.status_code == 200:
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 查找搜索结果项
search_items = soup.find_all('li', class_='item')
for item in search_items:
try:
# 获取标题
title_tag = item.find('h3')
if not title_tag:
continue
title = title_tag.text.strip()
# 获取链接
link_tag = item.find('a')
if not link_tag:
continue
link = link_tag.get('href', '')
if not link.startswith('http'):
link = urllib.parse.urljoin(self.siteUrl, link)
# 提取视频ID
vid = self.extractVodId(link)
if not vid:
continue
# 获取图片
img_tag = item.find('img')
img_url = ""
if img_tag:
img_url = img_tag.get('src', img_tag.get('data-src', ''))
if img_url and not img_url.startswith('http'):
img_url = urllib.parse.urljoin(self.siteUrl, img_url)
# 获取备注信息
remarks = ""
remarks_tag = item.find('span', class_='remarks')
if remarks_tag:
remarks = remarks_tag.text.strip()
# 获取标签信息
tags = ""
tags_tag = item.find('span', class_='tags')
if tags_tag:
tags = tags_tag.text.strip()
# 合并备注和标签
if remarks and tags:
remarks = f"{remarks} | {tags}"
elif tags:
remarks = tags
# 构建视频项
videos.append({
'vod_id': vid,
'vod_name': title,
'vod_pic': img_url,
'vod_remarks': remarks
})
except Exception as e:
self.log(f"处理搜索结果时出错: {str(e)}", "ERROR")
continue
except Exception as e:
self.log(f"搜索功能发生错误: {str(e)}", "ERROR")
result['list'] = videos
return result
def searchContentPage(self, key, quick, pg=1):
return self.searchContent(key, quick, pg)
def playerContent(self, flag, id, vipFlags):
"""获取播放内容"""
result = {}
try:
# 判断是否已经是视频URL
if self.isVideoFormat(id):
result["parse"] = 0
result["url"] = id
result["playUrl"] = ""
result["header"] = json.dumps(self.headers)
return result
# 判断是否是完整的页面URL
if id.startswith(('http://', 'https://')):
play_url = id
# 尝试作为相对路径处理
elif id.startswith('/'):
play_url = urllib.parse.urljoin(self.siteUrl, id)
# 假设是视频ID,构建播放页面URL
else:
# 检查是否是"视频ID_集数"格式
parts = id.split('_')
if len(parts) > 1 and parts[0].isdigit():
vid = parts[0]
nid = parts[1]
play_url = f"{self.siteUrl}/index.php/vod/play/id/{vid}/sid/1/nid/{nid}.html"
else:
# 直接当作视频ID处理
play_url = f"{self.siteUrl}/index.php/vod/play/id/{id}/sid/1/nid/1.html"
# 访问播放页获取真实播放地址
try:
self.log(f"正在解析播放页面: {play_url}")
response = self.fetch(play_url)
if response and response.status_code == 200:
html = response.text
# 查找player_aaaa变量
player_match = re.search(r'var\s+player_aaaa\s*=\s*({.*?});', html, re.DOTALL)
if player_match:
try:
player_data = json.loads(player_match.group(1))
if 'url' in player_data:
video_url = player_data['url']
if not video_url.startswith('http'):
video_url = urllib.parse.urljoin(self.siteUrl, video_url)
self.log(f"从player_aaaa获取到视频地址: {video_url}")
result["parse"] = 0
result["url"] = video_url
result["playUrl"] = ""
result["header"] = json.dumps(self.headers)
return result
except json.JSONDecodeError as e:
self.log(f"解析player_aaaa JSON出错: {str(e)}", "ERROR")
# 如果player_aaaa解析失败,尝试其他方式
# 1. 查找video标签
video_match = re.search(r'<video[^>]*src=["\'](.*?)["\']', html)
if video_match:
video_url = video_match.group(1)
if not video_url.startswith('http'):
video_url = urllib.parse.urljoin(self.siteUrl, video_url)
self.log(f"从video标签找到视频地址: {video_url}")
result["parse"] = 0
result["url"] = video_url
result["playUrl"] = ""
result["header"] = json.dumps(self.headers)
return result
# 2. 查找iframe
iframe_match = re.search(r'<iframe[^>]*src=["\'](.*?)["\']', html)
if iframe_match:
iframe_url = iframe_match.group(1)
if not iframe_url.startswith('http'):
iframe_url = urllib.parse.urljoin(self.siteUrl, iframe_url)
self.log(f"找到iframe,正在解析: {iframe_url}")
# 访问iframe内容
iframe_response = self.fetch(iframe_url)
if iframe_response and iframe_response.status_code == 200:
iframe_html = iframe_response.text
# 在iframe内容中查找视频地址
iframe_video_match = re.search(r'(https?://[^\'"]+\.(mp4|m3u8|ts))', iframe_html)
if iframe_video_match:
video_url = iframe_video_match.group(1)
self.log(f"从iframe中找到视频地址: {video_url}")
result["parse"] = 0
result["url"] = video_url
result["playUrl"] = ""
result["header"] = json.dumps({
"User-Agent": self.headers["User-Agent"],
"Referer": iframe_url
})
return result
# 3. 查找任何可能的视频URL
url_match = re.search(r'(https?://[^\'"]+\.(mp4|m3u8|ts))', html)
if url_match:
video_url = url_match.group(1)
self.log(f"找到可能的视频地址: {video_url}")
result["parse"] = 0
result["url"] = video_url
result["playUrl"] = ""
result["header"] = json.dumps(self.headers)
return result
except Exception as e:
self.log(f"解析播放地址时出错: {str(e)}", "ERROR")
# 如果所有方式都失败,返回外部解析标志
self.log("未找到直接可用的视频地址,需要外部解析", "WARNING")
result["parse"] = 1 # 表示需要外部解析
result["url"] = play_url # 返回播放页面URL
result["playUrl"] = ""
result["header"] = json.dumps(self.headers)
except Exception as e:
self.log(f"获取播放内容时出错: {str(e)}", "ERROR")
return result
def localProxy(self, param):
"""本地代理"""
return [404, "text/plain", {}, "Not Found"]
+581
View File
@@ -0,0 +1,581 @@
# -*- coding: utf-8 -*-
import requests
import re
import json
import traceback
import sys
sys.path.append('../../')
try:
from base.spider import Spider
except ImportError:
# 定义一个基础接口类,用于本地测试
class Spider:
def init(self, extend=""):
pass
class Spider(Spider):
def __init__(self):
self.siteUrl = "https://www.kuaikaw.cn"
self.nextData = None # 缓存NEXT_DATA数据
self.cateManual = {
"甜宠": "462",
"古装仙侠": "1102",
"现代言情": "1145",
"青春": "1170",
"豪门恩怨": "585",
"逆袭": "417-464",
"重生": "439-465",
"系统": "1159",
"总裁": "1147",
"职场商战": "943"
}
def getName(self):
# 返回爬虫名称
return "河马短剧"
def init(self, extend=""):
return
def fetch(self, url, headers=None):
"""统一的网络请求接口"""
if headers is None:
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0",
"Referer": self.siteUrl,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8"
}
try:
response = requests.get(url, headers=headers, timeout=10, allow_redirects=True)
response.raise_for_status()
return response
except Exception as e:
print(f"请求异常: {url}, 错误: {str(e)}")
return None
def isVideoFormat(self, url):
# 检查是否为视频格式
video_formats = ['.mp4', '.mkv', '.avi', '.wmv', '.m3u8', '.flv', '.rmvb']
for format in video_formats:
if format in url.lower():
return True
return False
def manualVideoCheck(self):
# 不需要手动检查
return False
def homeContent(self, filter):
"""获取首页分类及筛选"""
result = {}
# 分类列表,使用已初始化的cateManual
classes = []
for k in self.cateManual:
classes.append({
'type_name': k,
'type_id': self.cateManual[k]
})
result['class'] = classes
# 获取首页推荐视频
try:
result['list'] = self.homeVideoContent()['list']
except:
result['list'] = []
return result
def homeVideoContent(self):
"""获取首页推荐视频内容"""
videos = []
try:
response = self.fetch(self.siteUrl)
html_content = response.text
# 提取NEXT_DATA JSON数据
next_data_pattern = r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>'
next_data_match = re.search(next_data_pattern, html_content, re.DOTALL)
if next_data_match:
next_data_json = json.loads(next_data_match.group(1))
page_props = next_data_json.get("props", {}).get("pageProps", {})
# 获取轮播图数据 - 这些通常是推荐内容
if "bannerList" in page_props and isinstance(page_props["bannerList"], list):
banner_list = page_props["bannerList"]
for banner in banner_list:
book_id = banner.get("bookId", "")
book_name = banner.get("bookName", "")
cover_url = banner.get("coverWap", banner.get("wapUrl", ""))
# 获取状态和章节数
status = banner.get("statusDesc", "")
total_chapters = banner.get("totalChapterNum", "")
if book_id and book_name:
videos.append({
"vod_id": f"/drama/{book_id}",
"vod_name": book_name,
"vod_pic": cover_url,
"vod_remarks": f"{status} {total_chapters}集" if total_chapters else status
})
# SEO分类下的推荐
if "seoColumnVos" in page_props and isinstance(page_props["seoColumnVos"], list):
for column in page_props["seoColumnVos"]:
book_infos = column.get("bookInfos", [])
for book in book_infos:
book_id = book.get("bookId", "")
book_name = book.get("bookName", "")
cover_url = book.get("coverWap", "")
status = book.get("statusDesc", "")
total_chapters = book.get("totalChapterNum", "")
if book_id and book_name:
videos.append({
"vod_id": f"/drama/{book_id}",
"vod_name": book_name,
"vod_pic": cover_url,
"vod_remarks": f"{status} {total_chapters}集" if total_chapters else status
})
# # 去重
# seen = set()
# unique_videos = []
# for video in videos:
# if video["vod_id"] not in seen:
# seen.add(video["vod_id"])
# unique_videos.append(video)
# videos = unique_videos
except Exception as e:
print(f"获取首页推荐内容出错: {e}")
result = {
"list": videos
}
return result
def categoryContent(self, tid, pg, filter, extend):
"""获取分类内容"""
result = {}
videos = []
url = f"{self.siteUrl}/browse/{tid}/{pg}"
response = self.fetch(url)
html_content = response.text
# 提取NEXT_DATA JSON数据
next_data_pattern = r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>'
next_data_match = re.search(next_data_pattern, html_content, re.DOTALL)
if next_data_match:
next_data_json = json.loads(next_data_match.group(1))
page_props = next_data_json.get("props", {}).get("pageProps", {})
# 获取总页数和当前页
current_page = page_props.get("page", 1)
total_pages = page_props.get("pages", 1)
# 获取书籍列表
book_list = page_props.get("bookList", [])
# 转换为通用格式
for book in book_list:
book_id = book.get("bookId", "")
book_name = book.get("bookName", "")
cover_url = book.get("coverWap", "")
status_desc = book.get("statusDesc", "")
total_chapters = book.get("totalChapterNum", "")
if book_id and book_name:
videos.append({
"vod_id": f"/drama/{book_id}",
"vod_name": book_name,
"vod_pic": cover_url,
"vod_remarks": f"{status_desc} {total_chapters}集" if total_chapters else status_desc
})
# 构建返回结果
result = {
"list": videos,
"page": int(current_page),
"pagecount": total_pages,
"limit": len(videos),
"total": total_pages * len(videos) if videos else 0
}
return result
def switch(self, key, pg):
# 搜索功能
search_results = []
# 获取第一页结果,并检查总页数
url = f"{self.siteUrl}/search?searchValue={key}&page={pg}"
response = self.fetch(url)
html_content = response.text
# 提取NEXT_DATA JSON数据
next_data_pattern = r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>'
next_data_match = re.search(next_data_pattern, html_content, re.DOTALL)
if next_data_match:
next_data_json = json.loads(next_data_match.group(1))
page_props = next_data_json.get("props", {}).get("pageProps", {})
# 获取总页数
total_pages = page_props.get("pages", 1)
# 处理所有页的数据
all_book_list = []
# 添加第一页的书籍列表
book_list = page_props.get("bookList", [])
all_book_list.extend(book_list)
# 如果有多页,获取其他页的数据
if total_pages > 1 : # quick模式只获取第一页
for page in range(2, total_pages + 1):
next_page_url = f"{self.siteUrl}/search?searchValue={key}&page={page}"
next_page_response = self.fetch(next_page_url)
next_page_html = next_page_response.text
next_page_match = re.search(next_data_pattern, next_page_html, re.DOTALL)
if next_page_match:
next_page_json = json.loads(next_page_match.group(1))
next_page_props = next_page_json.get("props", {}).get("pageProps", {})
next_page_books = next_page_props.get("bookList", [])
all_book_list.extend(next_page_books)
# 转换为统一的搜索结果格式
for book in all_book_list:
book_id = book.get("bookId", "")
book_name = book.get("bookName", "")
cover_url = book.get("coverWap", "")
total_chapters = book.get("totalChapterNum", "0")
status_desc = book.get("statusDesc", "")
# 构建视频项
vod = {
"vod_id": f"/drama/{book_id}",
"vod_name": book_name,
"vod_pic": cover_url,
"vod_remarks": f"{status_desc} {total_chapters}集"
}
search_results.append(vod)
result = {
"list": search_results,
"page": pg
}
return result
def searchContent(self, key, quick, pg=1):
result = self.switch(key, pg=pg)
result['page'] = pg
return result
def searchContentPage(self, key, quick, pg=1):
return self.searchContent(key, quick, pg)
def detailContent(self, ids):
# 获取剧集信息
vod_id = ids[0]
episode_id = None
chapter_id = None
if not vod_id.startswith('/drama/'):
if vod_id.startswith('/episode/'):
episode_info = vod_id.replace('/episode/', '').split('/')
if len(episode_info) >= 2:
episode_id = episode_info[0]
chapter_id = episode_info[1]
vod_id = f'/drama/{episode_id}'
else:
vod_id = '/drama/' + vod_id
drama_url = self.siteUrl + vod_id
print(f"请求URL: {drama_url}")
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0",
"Referer": self.siteUrl,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8"
}
rsp = self.fetch(drama_url, headers=headers)
if not rsp or rsp.status_code != 200:
print(f"请求失败,状态码: {getattr(rsp, 'status_code', 'N/A')}")
return {}
html = rsp.text
next_data_match = re.search(r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', html, re.DOTALL)
if not next_data_match:
print("未找到NEXT_DATA内容")
return {}
try:
next_data = json.loads(next_data_match.group(1))
page_props = next_data.get("props", {}).get("pageProps", {})
print(f"找到页面属性,包含 {len(page_props.keys())} 个键")
book_info = page_props.get("bookInfoVo", {})
chapter_list = page_props.get("chapterList", [])
title = book_info.get("title", "")
sub_title = f"{book_info.get('totalChapterNum', '')}集"
categories = []
for category in book_info.get("categoryList", []):
categories.append(category.get("name", ""))
vod_content = book_info.get("introduction", "")
vod = {
"vod_id": vod_id,
"vod_name": title,
"vod_pic": book_info.get("coverWap", ""),
"type_name": ",".join(categories),
"vod_year": "",
"vod_area": book_info.get("countryName", ""),
"vod_remarks": sub_title,
"vod_actor": ", ".join([p.get("name", "") for p in book_info.get("performerList", [])]),
"vod_director": "",
"vod_content": vod_content
}
# 处理播放列表
play_url_list = []
episodes = []
if chapter_list:
print(f"找到 {len(chapter_list)} 个章节")
# 先检查是否有可以直接使用的MP4链接作为模板
mp4_template = None
first_mp4_chapter_id = None
# 先搜索第一个章节的MP4链接
# 为提高成功率,尝试直接请求第一个章节的播放页
if chapter_list and len(chapter_list) > 0:
first_chapter = chapter_list[0]
first_chapter_id = first_chapter.get("chapterId", "")
drama_id_clean = vod_id.replace('/drama/', '')
if first_chapter_id and drama_id_clean:
first_episode_url = f"{self.siteUrl}/episode/{drama_id_clean}/{first_chapter_id}"
print(f"请求第一集播放页: {first_episode_url}")
first_rsp = self.fetch(first_episode_url, headers=headers)
if first_rsp and first_rsp.status_code == 200:
first_html = first_rsp.text
# 直接从HTML提取MP4链接
mp4_pattern = r'(https?://[^"\']+\.mp4)'
mp4_matches = re.findall(mp4_pattern, first_html)
if mp4_matches:
mp4_template = mp4_matches[0]
first_mp4_chapter_id = first_chapter_id
print(f"找到MP4链接模板: {mp4_template}")
print(f"模板对应的章节ID: {first_mp4_chapter_id}")
# 如果未找到模板,再检查章节对象中是否有MP4链接
if not mp4_template:
for chapter in chapter_list[:5]: # 只检查前5个章节以提高效率
if "chapterVideoVo" in chapter and chapter["chapterVideoVo"]:
chapter_video = chapter["chapterVideoVo"]
mp4_url = chapter_video.get("mp4", "") or chapter_video.get("mp4720p", "") or chapter_video.get("vodMp4Url", "")
if mp4_url and ".mp4" in mp4_url:
mp4_template = mp4_url
first_mp4_chapter_id = chapter.get("chapterId", "")
print(f"从chapterVideoVo找到MP4链接模板: {mp4_template}")
print(f"模板对应的章节ID: {first_mp4_chapter_id}")
break
# 遍历所有章节处理播放信息
for chapter in chapter_list:
chapter_id = chapter.get("chapterId", "")
chapter_name = chapter.get("chapterName", "")
# 1. 如果章节自身有MP4链接,直接使用
if "chapterVideoVo" in chapter and chapter["chapterVideoVo"]:
chapter_video = chapter["chapterVideoVo"]
mp4_url = chapter_video.get("mp4", "") or chapter_video.get("mp4720p", "") or chapter_video.get("vodMp4Url", "")
if mp4_url and ".mp4" in mp4_url:
episodes.append(f"{chapter_name}${mp4_url}")
continue
# 2. 如果有MP4模板,尝试替换章节ID构建MP4链接
if mp4_template and first_mp4_chapter_id and chapter_id:
# 替换模板中的章节ID部分
if first_mp4_chapter_id in mp4_template:
new_mp4_url = mp4_template.replace(first_mp4_chapter_id, chapter_id)
episodes.append(f"{chapter_name}${new_mp4_url}")
continue
# 3. 如果上述方法都不可行,回退到使用chapter_id构建中间URL
if chapter_id and chapter_name:
url = f"{vod_id}${chapter_id}${chapter_name}"
episodes.append(f"{chapter_name}${url}")
if not episodes and vod_id:
# 尝试构造默认的集数
total_chapters = int(book_info.get("totalChapterNum", "0"))
if total_chapters > 0:
print(f"尝试构造 {total_chapters} 个默认集数")
# 如果知道章节ID的模式,可以构造
if chapter_id and episode_id:
for i in range(1, total_chapters + 1):
chapter_name = f"第{i}集"
url = f"{vod_id}${chapter_id}${chapter_name}"
episodes.append(f"{chapter_name}${url}")
else:
# 使用普通的构造方式
for i in range(1, total_chapters + 1):
chapter_name = f"第{i}集"
url = f"{vod_id}${chapter_name}"
episodes.append(f"{chapter_name}${url}")
if episodes:
play_url_list.append("#".join(episodes))
vod['vod_play_from'] = '河马剧场'
vod['vod_play_url'] = '$$$'.join(play_url_list)
result = {
'list': [vod]
}
return result
except Exception as e:
print(f"解析详情页失败: {str(e)}")
print(traceback.format_exc())
return {}
def playerContent(self, flag, id, vipFlags):
result = {}
print(f"调用playerContent: flag={flag}, id={id}")
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0",
"Referer": self.siteUrl,
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8"
}
# 解析id参数
parts = id.split('$')
drama_id = None
chapter_id = None
if len(parts) >= 2:
drama_id = parts[0]
chapter_id = parts[1]
chapter_name = parts[2] if len(parts) > 2 else "第一集"
print(f"解析参数: drama_id={drama_id}, chapter_id={chapter_id}")
else:
# 处理旧数据格式
print(f"使用原始URL格式: {id}")
result["parse"] = 0
result["url"] = id
result["header"] = json.dumps(headers)
return result
# 直接检查chapter_id是否包含http(可能已经是视频链接)
if 'http' in chapter_id and '.mp4' in chapter_id:
print(f"已经是MP4链接: {chapter_id}")
result["parse"] = 0
result["url"] = chapter_id
result["header"] = json.dumps(headers)
return result
# 构建episode页面URL
drama_id_clean = drama_id.replace('/drama/', '')
episode_url = f"{self.siteUrl}/episode/{drama_id_clean}/{chapter_id}"
print(f"请求episode页面: {episode_url}")
try:
rsp = self.fetch(episode_url, headers=headers)
if not rsp or rsp.status_code != 200:
print(f"请求失败,状态码: {getattr(rsp, 'status_code', 'N/A')}")
result["parse"] = 0
result["url"] = id
result["header"] = json.dumps(headers)
return result
html = rsp.text
print(f"获取页面大小: {len(html)} 字节")
# 尝试从NEXT_DATA提取视频链接
mp4_url = None
# 方法1: 从NEXT_DATA提取
next_data_match = re.search(r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', html, re.DOTALL)
if next_data_match:
try:
print("找到NEXT_DATA")
next_data = json.loads(next_data_match.group(1))
page_props = next_data.get("props", {}).get("pageProps", {})
# 从chapterList中查找当前章节
chapter_list = page_props.get("chapterList", [])
print(f"找到章节列表,长度: {len(chapter_list)}")
for chapter in chapter_list:
if chapter.get("chapterId") == chapter_id:
print(f"找到匹配的章节: {chapter.get('chapterName')}")
chapter_video = chapter.get("chapterVideoVo", {})
mp4_url = chapter_video.get("mp4", "") or chapter_video.get("mp4720p", "") or chapter_video.get("vodMp4Url", "")
if mp4_url:
print(f"从chapterList找到MP4链接: {mp4_url}")
break
# 如果未找到,尝试从当前章节获取
if not mp4_url:
current_chapter = page_props.get("chapterInfo", {})
if current_chapter:
print("找到当前章节信息")
chapter_video = current_chapter.get("chapterVideoVo", {})
mp4_url = chapter_video.get("mp4", "") or chapter_video.get("mp4720p", "") or chapter_video.get("vodMp4Url", "")
if mp4_url:
print(f"从chapterInfo找到MP4链接: {mp4_url}")
except Exception as e:
print(f"解析NEXT_DATA失败: {str(e)}")
print(traceback.format_exc())
# 方法2: 直接从HTML中提取MP4链接
if not mp4_url:
mp4_pattern = r'(https?://[^"\']+\.mp4)'
mp4_matches = re.findall(mp4_pattern, html)
if mp4_matches:
# 查找含有chapter_id的链接
matched_mp4 = False
for url in mp4_matches:
if chapter_id in url:
mp4_url = url
matched_mp4 = True
print(f"从HTML直接提取章节MP4链接: {mp4_url}")
break
# 如果没找到包含chapter_id的链接,使用第一个
if not matched_mp4 and mp4_matches:
mp4_url = mp4_matches[0]
print(f"从HTML直接提取MP4链接: {mp4_url}")
if mp4_url and ".mp4" in mp4_url:
print(f"最终找到的MP4链接: {mp4_url}")
result["parse"] = 0
result["url"] = mp4_url
result["header"] = json.dumps(headers)
return result
else:
print(f"未找到有效的MP4链接,尝试再次解析页面内容")
# 再尝试一次从HTML中广泛搜索所有可能的MP4链接
all_mp4_pattern = r'(https?://[^"\']+\.mp4)'
all_mp4_matches = re.findall(all_mp4_pattern, html)
if all_mp4_matches:
mp4_url = all_mp4_matches[0]
print(f"从HTML广泛搜索找到MP4链接: {mp4_url}")
result["parse"] = 0
result["url"] = mp4_url
result["header"] = json.dumps(headers)
return result
print(f"未找到视频链接,返回原episode URL: {episode_url}")
result["parse"] = 0
result["url"] = episode_url
result["header"] = json.dumps(headers)
return result
except Exception as e:
print(f"请求或解析失败: {str(e)}")
print(traceback.format_exc())
result["parse"] = 0
result["url"] = id
result["header"] = json.dumps(headers)
return result
def localProxy(self, param):
# 本地代理处理,此处简单返回传入的参数
return [200, "video/MP2T", {}, param]
def destroy(self):
# 资源回收
pass
BIN
View File
Binary file not shown.
+64 -32
View File
@@ -628,6 +628,70 @@
"json": "./txt/bilisong.txt"
}
},
{
"key": "少儿教育",
"name": "📚少儿┃教育📚",
"type": 3,
"api": "csp_BiliGuard",
"style": {
"type": "rect",
"ratio": 1.597
},
"searchable": 0,
"quickSearch": 0,
"changeable": 0,
"ext": {
"json": "https://im.feelec.com.cn/res/file.html?id=2c9a91099584ed4901963ec8251e772b"
}
},
{
"key": "小学课堂",
"name": "📚小学┃课堂📚",
"type": 3,
"api": "csp_BiliGuard",
"style": {
"type": "rect",
"ratio": 1.597
},
"searchable": 0,
"quickSearch": 0,
"changeable": 0,
"ext": {
"json": "https://im.feelec.com.cn/res/file.html?id=2c9a91099584ed4901963ec82537772c"
}
},
{
"key": "初中课堂",
"name": "📚初中┃课堂📚",
"type": 3,
"api": "csp_BiliGuard",
"style": {
"type": "rect",
"ratio": 1.597
},
"searchable": 0,
"quickSearch": 0,
"changeable": 0,
"ext": {
"json": "https://im.feelec.com.cn/res/file.html?id=2c9a91099584ed4901963ec824cc7729"
}
},
{
"key": "高中教育",
"name": "📚高中┃课堂📚",
"type": 3,
"api": "csp_BiliGuard",
"style": {
"type": "rect",
"ratio": 1.597
},
"searchable": 0,
"quickSearch": 0,
"changeable": 0,
"ext": {
"json": "https://im.feelec.com.cn/res/file.html?id=2c9a91099584ed4901963ec824fd772a"
}
},
{
"key": "Wexqingfengdj",
"name": "🎼舞曲┃摇头🎼",
@@ -693,38 +757,6 @@
"type": "list"
}
},
{
"key": "Wexmiso",
"name": "🎠米搜┃综合🎠",
"type": 3,
"api": "csp_WexmisoGuard",
"searchable": 1,
"changeable": 0
},
{
"key": "Wexed3000",
"name": "🎠易迪┃综合🎠",
"type": 3,
"api": "csp_Wexed3000Guard",
"searchable": 1,
"changeable": 0
},
{
"key": "易搜",
"name": "🎠易搜┃综合🎠",
"type": 3,
"api": "csp_YiSoGuard",
"searchable": 1,
"changeable": 0
},
{
"key": "Wexyingso",
"name": "🎠影子┃综合🎠",
"type": 3,
"api": "csp_WexyingsoGuard",
"searchable": 1,
"changeable": 0
},
{
"key": "WexTJso",
"name": "🎠TJ┃综合🎠",
Binary file not shown.
File diff suppressed because it is too large. Load diff
+23 -2
View File
@@ -785,7 +785,7 @@
".cdnlz"
],
"regex": [
"#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF.*?66667,[\\s\\S]*?#EXT-X-DISCONTINUITY",
"#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:7\\.166667,[\\s\\S]*?#EXT-X-DISCONTINUITY",
"#EXTINF.*?\\s+.*?08646.*?\\.ts",
"17.19",
"19.63"
@@ -800,7 +800,8 @@
"cachem3u8.2s0"
],
"regex": [
"#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF.*?66667,[\\s\\S]*?#EXT-X-DISCONTINUITY",
"#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6\\.400000,[\\s\\S]*?#EXT-X-DISCONTINUITY",
"#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6\\.666667,[\\s\\S]*?#EXT-X-DISCONTINUITY",
"#EXTINF.*?\\s+.*?1171(057).*?\\.ts",
"#EXTINF.*?\\s+.*?6d7b(077).*?\\.ts",
"#EXTINF.*?\\s+.*?6718a(403).*?\\.ts",
@@ -861,6 +862,26 @@
"#EXTINF.*?\\s+.*?XR8pDxQk.*?\\.ts"
]
},
{
"name": "黑木耳hmr",
"hosts": [
"hmrvideo"
],
"regex": [
"#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:3\\.366667,[\\s\\S]*?#EXT-X-DISCONTINUITY"
]
},
{
"name": "ryplay",
"hosts": [
"cdn.ryplay"
],
"regex": [
"#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:6\\.633333,[\\s\\S]*?#EXT-X-DISCONTINUITY",
"#EXT-X-DISCONTINUITY\\r*\\n*#EXTINF:8\\.333333,[\\s\\S].*?\\.ts",
"#EXTINF:2\\.933333,[\\s\\S].*?\\.ts"
]
},
{
"name": "555DM",
"hosts": [
+1740 -1330
View File
File diff suppressed because it is too large. Load diff
+296 -245
View File
@@ -1,125 +1,158 @@
# IPv4 Streams
AMC电影,http://61.221.215.25:8800/hls/43/index.m3u8
AMC电影,http://122.117.71.103:8559/http/61.222.53.250:8092/upload/115/AMC_TS-1111_1.m3u8
AMC电影,http://104.244.79.187:5050/litv/4gtv-4gtv017
AXN,http://122.117.71.103:8557/http/61.222.53.250:8081/hls/71/813/ch43.m3u8
CCTV-4K 超高清,http://27.222.3.214/liveali-tp4k.cctv.cn/live/4K10M.stream/playlist.m3u8
CCTV10,http://36.105.100.208:35455/gaoma/cctv10.m3u8
CCTV10,http://39.164.160.249:9901/tsfile/live/0010_1.m3u8
CCTV10,http://129.146.6.71:35455/gaoma/cctv10.m3u8
CCTV10,http://220.164.192.48:50085/tsfile/live/0011_1.m3u8
CCTV11,http://39.164.160.249:9901/tsfile/live/0011_1.m3u8
CCTV11,http://129.146.6.71:35455/gaoma/cctv11.m3u8
CCTV1,http://58.57.40.22:9901/tsfile/live/0001_1.m3u8
CCTV1,http://218.13.14.6:60050/tsfile/live/1001_1.m3u8
CCTV1,http://8.138.7.223/【公众号:榴芒电视】/cctv1.m3u8
CCTV1,http://60.29.124.66:6080/hls/12/index.m3u8
CCTV10,http://58.57.40.22:9901/tsfile/live/1010_1.m3u8
CCTV10,http://218.13.14.6:60050/tsfile/live/1010_1.m3u8
CCTV10,http://60.29.124.66:6080/hls/21/index.m3u8
CCTV10,http://110.53.52.63:8888/newlive/live/hls/12/live.m3u8
CCTV11,http://58.57.40.22:9901/tsfile/live/1011_1.m3u8
CCTV12,http://39.164.160.249:9901/tsfile/live/0012_1.m3u8
CCTV12,http://36.105.100.208:35455/gaoma/cctv12.m3u8
CCTV13,http://36.105.100.208:35455/gaoma/cctv13.m3u8
CCTV13,http://129.146.6.71:35455/gaoma/cctv13.m3u8
CCTV13,http://39.164.160.249:9901/tsfile/live/0013_1.m3u8
CCTV14,http://39.164.160.249:9901/tsfile/live/0014_1.m3u8
CCTV14,http://36.105.100.208:35455/gaoma/cctv14.m3u8
CCTV15,http://39.164.160.249:9901/tsfile/live/0015_1.m3u8
CCTV15,http://117.14.55.26:35455/gaoma/cctv15.m3u8
CCTV15,http://36.105.100.208:35455/gaoma/cctv15.m3u8
CCTV15,http://129.146.6.71:35455/gaoma/cctv15.m3u8
CCTV16,http://36.105.100.208:35455/gaoma/cctv16.m3u8
CCTV16,http://129.146.6.71:35455/gaoma/cctv16.m3u8
CCTV17,http://129.146.6.71:35455/gaoma/cctv17.m3u8
CCTV17,http://36.105.100.208:35455/gaoma/cctv17.m3u8
CCTV2,http://39.164.160.249:9901/tsfile/live/0002_1.m3u8
CCTV2,http://36.105.100.208:35455/gaoma/cctv2.m3u8
CCTV5,http://129.146.6.71:35455/gaoma/cctv5.m3u8
CCTV5,http://36.105.100.208:35455/gaoma/cctv5.m3u8
CCTV11,http://218.13.14.6:60050/tsfile/live/1011_1.m3u8
CCTV11,http://60.29.124.66:6080/hls/22/index.m3u8
CCTV11,http://110.53.52.63:8888/newlive/live/hls/13/live.m3u8
CCTV11,http://183.11.239.36:808/hls/29/index.m3u8
CCTV12,http://58.57.40.22:9901/tsfile/live/1012_1.m3u8
CCTV12,http://218.13.14.6:60050/tsfile/live/1012_1.m3u8
CCTV12,http://110.53.52.63:8888/newlive/live/hls/14/live.m3u8
CCTV12,http://183.11.239.36:808/hls/30/index.m3u8
CCTV13,http://58.57.40.22:9901/tsfile/live/1013_1.m3u8
CCTV13,http://218.13.14.6:60050/tsfile/live/1013_1.m3u8
CCTV14,http://58.57.40.22:9901/tsfile/live/1014_1.m3u8
CCTV14,http://218.13.14.6:60050/tsfile/live/1014_1.m3u8
CCTV14,http://110.53.52.63:8888/newlive/live/hls/16/live.m3u8
CCTV14,http://183.11.239.36:808/hls/32/index.m3u8
CCTV15,http://58.57.40.22:9901/tsfile/live/1015_1.m3u8
CCTV15,http://218.13.14.6:60050/tsfile/live/1015_1.m3u8
CCTV15,http://110.53.52.63:8888/newlive/live/hls/17/live.m3u8
CCTV15,http://183.11.239.36:808/hls/102/index.m3u8
CCTV15,http://120.76.248.139/live/bfgd/4200000133.m3u8
CCTV16,http://183.11.239.36:808/hls/169/index.m3u8
CCTV16,http://47.122.125.40:6666/hls/cctv16hd.m3u8
CCTV16,http://171.120.110.203:9003//hls/17/index.m3u8
CCTV17,http://58.57.40.22:9901/tsfile/live/0019_1.m3u8
CCTV17,http://183.11.239.36:808/hls/35/index.m3u8
CCTV17,http://120.76.248.139/live/bfgd/4200000204.m3u8
CCTV17,http://113.57.111.4:1111/tsfile/live/1014_1.m3u8
CCTV2,http://218.13.14.6:60050/tsfile/live/1002_1.m3u8
CCTV2,http://60.29.124.66:6080/hls/13/index.m3u8
CCTV2,http://110.53.52.63:8888/newlive/live/hls/3/live.m3u8
CCTV2,http://120.76.248.139/live/bfgd/4200000061.m3u8
CCTV3,http://58.57.40.22:9901/tsfile/live/1002_1.m3u8
CCTV3,http://218.13.14.6:60050/tsfile/live/1003_1.m3u8
CCTV3,http://60.29.124.66:6080/hls/14/index.m3u8
CCTV3,http://110.53.52.63:8888/newlive/live/hls/4/live.m3u8
CCTV4,http://218.13.14.6:60050/tsfile/live/1004_1.m3u8
CCTV4,http://60.29.124.66:6080/hls/15/index.m3u8
CCTV4,http://110.53.52.63:8888/newlive/live/hls/5/live.m3u8
CCTV4,http://183.11.239.36:808/hls/77/index.m3u8
CCTV5,http://58.57.40.22:9901/tsfile/live/1004_1.m3u8
CCTV5,http://218.13.14.6:60050/tsfile/live/1005_1.m3u8
CCTV5,http://60.29.124.66:6080/hls/16/index.m3u8
CCTV5,http://110.53.52.63:8888/newlive/live/hls/6/live.m3u8
CCTV5+,http://117.169.124.46:6410/ysten-businessmobile/live/hdcctv05plus/1.m3u8
CCTV5+,http://36.105.100.208:35455/gaoma/cctv5p.m3u8
CCTV5+,http://129.146.6.71:35455/gaoma/cctv5p.m3u8
CCTV5+,http://58.57.40.22:9901/tsfile/live/1005_1.m3u8
CCTV5+,http://110.53.52.63:8888/newlive/live/hls/7/live.m3u8
CCTV5+,http://120.76.248.139/live/bfgd/4200000246.m3u8
CCTV5+,http://182.37.169.94:352/tsfile/live/0016_1.m3u8
CCTV6,http://117.169.124.36:6610/ysten-businessmobile/live/cctv-6/1.m3u8
CCTV6,http://58.57.40.22:9901/tsfile/live/1006_1.m3u8
CCTV6,http://218.13.14.6:60050/tsfile/live/1006_1.m3u8
CCTV6,http://113.140.12.230:8888/newlive/live/hls/7/live.m3u8
CCTV7,http://36.105.100.208:35455/gaoma/cctv7.m3u8
CCTV7,http://129.146.6.71:35455/gaoma/cctv7.m3u8
CCTV6,http://60.29.124.66:6080/hls/17/index.m3u8
CCTV7,http://58.57.40.22:9901/tsfile/live/1007_1.m3u8
CCTV7,http://218.13.14.6:60050/tsfile/live/1007_1.m3u8
CCTV7,http://8.138.7.223/tv/cctv7.m3u8
CCTV7,http://8.138.7.223/【公众号:榴芒电视】/cctv7.m3u8
CCTV7,http://60.29.124.66:6080/hls/18/index.m3u8
CCTV8,http://117.169.124.36:6610/ysten-businessmobile/live/cctv-8/1.m3u8
CCTV8,http://36.105.100.208:35455/gaoma/cctv8k_36m.m3u8
CCTV8,http://129.146.6.71:35455/gaoma/cctv8.m3u8
CCTV9,http://39.164.160.249:9901/tsfile/live/0009_1.m3u8
CCTV9,http://36.105.100.208:35455/gaoma/cctv9.m3u8
CCTV8,http://58.57.40.22:9901/tsfile/live/1008_1.m3u8
CCTV8,http://218.13.14.6:60050/tsfile/live/1008_1.m3u8
CCTV8,http://60.29.124.66:6080/hls/19/index.m3u8
CCTV8,http://110.53.52.63:8888/newlive/live/hls/10/live.m3u8
CCTV9,http://58.57.40.22:9901/tsfile/live/1009_1.m3u8
CCTV9,http://218.13.14.6:60050/tsfile/live/1009_1.m3u8
CCTV9,http://60.29.124.66:6080/hls/20/index.m3u8
CCTV9,http://110.53.52.63:8888/newlive/live/hls/11/live.m3u8
CCTV9,http://183.11.239.36:808/hls/27/index.m3u8
CCTV世界地理,http://183.11.239.36:808/hls/11/index.m3u8
CCTV世界地理,http://111.61.236.247:9081/hls/62/index.m3u8
CCTV世界地理,http://120.76.248.139/live/bfgd/4200000177.m3u8
CCTV世界地理,http://36.129.204.117:9003//hls/78/index.m3u8
CCTV世界地理,http://180.213.174.225:9901/tsfile/live/1052_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV世界地理,http://60.2.190.206:4000/udp/239.253.92.113:8066
CCTV兵器科技,http://60.2.190.206:4000/udp/239.253.93.47:6435
CCTV央视台球,http://183.11.239.36:808/hls/73/index.m3u8
CCTV央视台球,http://36.129.204.117:9003//hls/71/index.m3u8
CCTV女性时尚,http://120.76.248.139/live/bfgd/4200000176.m3u8
CCTV女性时尚,http://111.61.236.247:9081/hls/59/index.m3u8
CCTV少儿,http://119.163.60.181:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV少儿,http://123.138.22.30:9901/tsfile/live/0014_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV怀旧剧场,http://120.76.248.139/live/bfgd/4200000224.m3u8
CCTV怀旧剧场,http://111.61.236.247:9081/hls/67/index.m3u8
CCTV怀旧剧场,http://60.2.190.206:4000/udp/239.253.93.252:6430
CCTV怀旧剧场,http://121.19.134.200:808/tsfile/live/1035_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV电视指南,http://120.76.248.139/live/bfgd/4200000164.m3u8
CCTV第一剧场,http://180.213.174.225:9901/tsfile/live/1050_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV第一剧场,http://121.19.134.200:808/tsfile/live/1033_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV音乐,http://123.138.22.30:9901/tsfile/live/0015_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV风云剧场,http://121.19.134.200:808/tsfile/live/1034_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV风云足球,http://111.61.236.247:9081/hls/58/index.m3u8
CCTV风云足球,http://183.11.239.36:808/hls/133/index.m3u8
CCTV风云足球,http://111.61.236.247:9081/hls/58/index.m3u8
CCTV风云足球,http://120.76.248.139/live/bfgd/4200000225.m3u8
CCTV风云音乐,http://121.19.134.200:808/tsfile/live/1036_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV风云足球,http://120.238.94.10:9901/tsfile/live/1087_1.m3u8
CETV1,http://120.198.95.220:9901/tsfile/live/1039_1.m3u8?key=txiptv
CETV4,http://183.11.239.36:808/hls/73/index.m3u8
CHC动作电影,http://110.53.52.63:8888/newlive/live/hls/53/live.m3u8
CHC动作电影,http://218.15.183.23:9901/tsfile/live/23039_1.m3u8
CHC动作电影,http://120.238.94.82:9901/tsfile/live/1052_1.m3u8
CHC动作电影,http://119.32.12.17:2901/udp/224.1.100.131:11111
CHC动作电影,http://39.135.133.167:80/PLTV/88888888/224/3221225555/1.m3u8
CHC华诚影视,http://120.76.248.139/live/bfgd/4200000289.m3u8
CHC家庭影院,http://110.53.52.63:8888/newlive/live/hls/51/live.m3u8
CHC家庭影院,http://61.162.52.6:8088/newlive/live/hls/60/live.m3u8
CHC家庭影院,http://58.19.38.162:9901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=1&authid=0
CHC影迷电影,http://110.53.52.63:8888/newlive/live/hls/52/live.m3u8
CHC影迷电影,http://58.19.38.162:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0
CHC电影,http://218.15.183.23:9901/tsfile/live/23044_1.m3u8
CHC电影,http://183.237.95.108:9901/tsfile/live/1008_1.m3u8?key=txiptv&playlive=0&authid=0
CHC电影,http://120.198.95.220:9901/tsfile/live/1038_1.m3u8?key=txiptv
CHC电影,http://120.198.101.106:9901/tsfile/live/1053_1.m3u8?key=txiptv
CINEMAX,http://122.117.71.103:8558/http/61.222.53.250:8081/hls/71/813/ch42.m3u8
HBO,http://122.117.71.103:8556/http/61.222.53.250:8081/hls/71/813/ch41.m3u8
HBO家庭,http://50.7.234.10:8278/fyi_twn/playlist.m3u8?tid=18186902&ct=17988&&tsum=7a21abab0a5912afb0ebc01db111e59f
NewTV东北热剧,http://39.134.64.87:6610/PLTV/88888888/224/3221225741/index.m3u8?IASHttpSessionId=
NewTV军旅剧场,http://39.134.64.87:6610/PLTV/88888888/224/3221225676/index.m3u8?IASHttpSessionId=
HITs电影,http://37.27.111.214:8080/live/28/hls.m3u8
NewTV东北热剧,http://39.134.65.175/PLTV/88888888/224/3221225679/1.m3u8
NewTV中国功夫,http://39.134.64.87:6610/PLTV/88888888/224/3221225681/index.m3u8?IASHttpSessionId=
NewTV哒啵电竞,http://39.134.64.87:6610/PLTV/88888888/224/3221225675/index.m3u8?IASHttpSessionId=
NewTV武搏世界,http://39.134.64.87:6610/PLTV/88888888/224/3221225680/index.m3u8?IASHttpSessionId=
NewTV欢乐剧场,http://39.134.65.175/PLTV/88888888/224/3221225682/1.m3u8
NewTV超级电影,http://39.134.65.175/PLTV/88888888/224/3221225644/1.m3u8
NewTV超级电影,http://39.134.64.87:6610/PLTV/88888888/224/3221225717/index.m3u8?IASHttpSessionId=
NewTV黑莓动画,http://39.134.65.175/PLTV/88888888/224/3221225529/1.m3u8
NewTV黑莓电影,http://39.134.65.175/PLTV/88888888/224/3221225681/1.m3u8
NewTV黑莓电竞,http://39.134.65.175/PLTV/88888888/224/3221225559/1.m3u8
iHOT爱体育,http://146.56.165.66:7788/TVOD/2000000004000000060/hnbblive/index.m3u8
万州三峡移民,http://123.146.162.24:8013/tslslive/PU2vzMI/hls/live_sd.m3u8
万州三峡移民,http://123.146.162.24:8017/c2F0hmi/1000/live.m3u8
万州三峡移民,http://123.146.162.24:8013/tslslive/PU2vzMI/hls/live_sd.m3u8?zzhongqd
万州三峡移民,http://123.146.162.24:8017/c2F0hmi/1000/live.m3u8?zzhongqd
万州影视,http://123.146.162.24:8013/tslslive/vWlnEzU/hls/live_sd.m3u8
万州影视文艺,http://123.146.162.24:8017/d4ceB1a/1000/live.m3u8
万州综合,http://123.146.162.24:8017/iTXwrGs/800/live.m3u8
万州综合,http://123.146.162.24:8013/tslslive/noEX9SG/hls/live_sd.m3u8
万州综合,http://123.146.162.24:8017/iTXwrGs/800/live.m3u8?zzhongqd
万荣综合,http://60.222.246.220:19433/hls1.m3u8
三沙卫视,http://111.160.17.2:59901/tsfile/live/0001_45.m3u8
三沙卫视,http://61.138.128.226:19901/tsfile/live/1020_1.m3u8
三沙卫视,http://119.36.148.115:59901/tsfile/live/1009_1.m3u8
东南卫视,http://117.169.124.37:6610/ysten-businessmobile/live/dongnanstv/yst.m3u8
东南卫视,http://58.57.40.22:9901/tsfile/live/1037_1.m3u8
东南卫视,http://110.53.52.63:8888/newlive/live/hls/47/live.m3u8
东南卫视,http://120.76.248.139/live/bfgd/4200000483.m3u8
东南卫视,http://36.32.174.67:60080/newlive/live/hls/33/live.m3u8
东方卫视,http://39.164.160.249:9901/tsfile/live/0107_1.m3u8
东方卫视,http://58.57.40.22:9901/tsfile/live/1030_1.m3u8
东方卫视,http://60.223.224.176:8888/newlive/live/hls/19/live.m3u8
东方财经,http://61.133.118.228:5001/douyu/9548279
东方财经,http://124.248.69.76:26781/douyu/9548279
东森幼幼,http://122.117.71.103:8515/http/61.222.53.250:8081/hls/63/805/ch09.m3u8
东森戏剧,http://122.117.71.103:8529/http/61.222.53.250:8081/hls/64/806/ch13.m3u8
东森戏剧,http://122.117.71.103:8529/http/61.222.53.250:8081/hls/64/803/ch13.m3u8
东森戏剧,http://122.117.71.103:8529/东森戏剧.m3u8
东森戏剧,http://122.117.71.103:8529/http/61.222.53.250:8081/hls/64/803/ch13.m3u8
东森戏剧,http://122.117.71.103:8529/http/61.222.53.250:8081/hls/64/806/ch13.m3u8
东营综合,http://61.133.118.228:5001/yy/1354930954
中华小当家,http://61.221.215.25:8800/hls/40/index.m3u8
乐至综合,http://175.155.106.72:89/live1/live1.m3u8
乐至综合,http://175.155.106.72:89/live1/live1.m3u8?zsicd
乐至综合,http://175.155.106.72:89/live1/live1.m3u8?zsicd;http://rmlive.lzxrmtzx.com/live1/live1.m3u8?zsicd
云南卫视,http://39.164.160.249:9901/tsfile/live/0119_1.m3u8
云南卫视,http://220.164.192.48:50085/tsfile/live/0019_1.m3u8
云南卫视,http://58.57.40.22:9901/tsfile/live/1047_1.m3u8
云南卫视,http://110.53.52.63:8888/newlive/live/hls/26/live.m3u8
云南卫视,http://183.11.239.36:808/hls/52/index.m3u8
云南卫视,http://120.76.248.139/live/bfgd/4200000482.m3u8
云南卫视,http://36.32.174.67:60080/newlive/live/hls/45/live.m3u8
云浮综合,http://125.89.163.44:8888/udp/239.77.0.253:5146
五星体育,http://36.105.100.208:35455/itv/5000000010000017540.m3u8?cdn=bestzb
人间卫视,http://61.216.67.119:1935/bltvhd/bltv1/chunklistw1266569526.m3u
@@ -131,208 +164,206 @@ iHOT爱体育,http://146.56.165.66:7788/TVOD/2000000004000000060/hnbblive/index.
伊犁经济法制,http://110.153.180.106:55555/out_4/index.m3u8?zxinjd
伊犁维吾尔,http://110.153.180.106:55555/out_2/index.m3u8
伊犁维吾尔,http://110.153.180.106:55555/out_2/index.m3u8?zxinjd
优漫卡通,http://123.138.22.30:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
优漫卡通,http://221.226.4.10:9901/tsfile/live/1026_1.m3u8?key=txiptv&playlive=1&authid=0
优漫卡通,http://119.32.12.32:2901/udp/224.1.100.119:11111
优漫卡通,http://36.105.100.208:35455/itv/1000000002000010063.m3u8?cdn=ystenlive
优漫卡通,http://58.221.214.82:9901/tsfile/live/0008_2.m3u8
优漫卡通,http://119.32.12.17:2901/udp/224.1.100.119:11111
优漫卡通,http://110.53.218.182:9902/tsfile/live/1006_1.m3u8
优漫卡通,http://106.118.70.46:9901/tsfile/live/1013_1.m3u8?key=txiptv&playlive=1&authid=0
优漫卡通,http://58.221.214.82:9901/tsfile/live/0008_2.m3u8?key=txiptv
佛山公共,http://125.89.163.44:8888/udp/239.253.43.53:5146
佛山影视,http://125.89.163.44:8888/udp/239.253.43.56:5146
佛山综合,http://125.89.163.44:8888/udp/239.253.43.57:5146
佳木斯新闻综合,http://39.134.65.106/PLTV/88888888/224/3221225993/1.m3u8?
兵团八师石河子教育,http://124.88.144.73:1935/live/jiaoyu/playlist.m3u8
兵团八师石河子教育,http://124.88.144.73:1935/live/jiaoyu/playlist.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
兵团八师石河子教育,http://124.88.144.73:1935/live/jiaoyu/playlist.m3u8?zxinjd
兵团八师石河子新闻综合,http://124.88.144.73:1935/live/xwzh/playlist.m3u8?zxinjd
兵团八师石河子经济生活,http://124.88.144.73:1935/live/dywt/playlist.m3u8?zxinjd
兵团卫视,http://183.11.239.36:808/hls/7/index.m3u8
兵团卫视,http://120.76.248.139/live/bfgd/4200000124.m3u8
兵团卫视,http://123.132.233.194:352/tsfile/live/0113_1.m3u8
兵团卫视,http://110.80.17.38:9901/tsfile/live/0015_1.m3u8
兵团卫视,http://218.89.240.144:59901/tsfile/live/0115_1.m3u8
兵团卫视,http://61.138.128.226:19901/tsfile/live/0115_1.m3u8
兵团卫视,http://121.33.239.242:9901/tsfile/live/1000_1.m3u8
内蒙古卫视,http://110.53.52.63:8888/newlive/live/hls/45/live.m3u8
内蒙古卫视,http://183.11.239.36:808/hls/60/index.m3u8
内蒙古卫视,http://120.76.248.139/live/bfgd/4200000110.m3u8
内蒙古卫视,http://124.128.73.58:9901/tsfile/live/0109_1.m3u8
内蒙古卫视,http://183.66.15.146:60901/tsfile/live/0109_1.m3u8
内蒙古卫视,http://101.19.84.8:9901/tsfile/live/0109_1.m3u8
内蒙古卫视,http://121.33.239.242:9901/tsfile/live/0109_1.m3u8
农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8
农林卫视,http://124.116.183.146:9901/tsfile/live/1004_1.m3u8
农林卫视,http://8.138.7.223/【公众号:榴芒电视】/农林卫视.m3u8
农林卫视,http://112.46.85.60:8009/hls/27/index.m3u8
凤凰卫视,http://221.7.175.154:8445/tsfile/live/1020_1.m3u8
凤凰卫视,http://221.7.175.154:8445/tsfile/live/1020_1.m3u8?key=txiptv&playlive=1&authid=0
凤凰卫视,http://120.198.101.106:9901/tsfile/live/1062_1.m3u8?key=txiptv
凤凰卫视,http://119.32.12.32:2901/udp/224.1.100.3:11111
凤凰卫视,http://119.32.12.17:2901/udp/224.1.100.3:11111
凤凰卫视,http://218.202.220.2:5000/nn_live.ts?id=NEWSASIA
凤凰影视,http://221.7.175.154:8445/tsfile/live/1022_1.m3u8?key=txiptv&playlive=1&authid=0
动漫秀场,http://36.129.204.117:9003//hls/67/index.m3u8
动漫秀场,http://60.29.124.66:6080/hls/62/index.m3u8
动漫秀场,http://60.2.190.206:4000/udp/239.253.93.225:6403
动漫秀场,http://36.105.100.208:35455/itv/5000000011000031113.m3u8?cdn=bestzb
动漫秀场,http://60.2.190.206:4000/udp/239.253.93.225:6403
动漫秀场,http://60.29.124.66:6080/hls/62/index.m3u8
动漫秀场,http://183.237.95.108:9901/tsfile/live/1104_1.m3u8?key=txiptv&playlive=0&authid=0
动物星球,http://122.117.71.103:8512/动物星球.m3u8
动物星球,http://61.221.215.25:8800/hls/57/index.m3u8
劲爆体育,http://120.238.94.82:9901/tsfile/live/1086_1.m3u8
劲爆体育,http://150.230.250.89:50001/TVOD/5000000002000029972/bestzb/index.m3u8
劲爆体育,http://146.56.165.66:7788/TVOD/5000000002000029972/bestzb/index.m3u8
劲爆体育,http://36.105.100.208:35455/itv/5000000002000029972.m3u8?cdn=bestzb
劲爆体育,http://183.237.95.108:9901/tsfile/live/1074_1.m3u8?key=txiptv&playlive=0&authid=0
劲爆体育,http://120.198.101.106:9901/tsfile/live/1086_1.m3u8?key=txiptv
北京中华特产,http://120.76.248.139/live/bfgd/4200000158.m3u8
北京优优宝贝,http://120.76.248.139/live/bfgd/4200000153.m3u8
北京北京卡酷少儿,http://120.76.248.139/live/bfgd/4200000106.m3u8
北京北京纪实科教,http://120.76.248.139/live/bfgd/4200000113.m3u8
北京卫视,http://39.164.160.249:9901/tsfile/live/0122_1.m3u8
北京卫视,http://58.57.40.22:9901/tsfile/live/1032_1.m3u8
北京卫视,http://60.223.224.176:8888/newlive/live/hls/18/live.m3u8
北京卫视,http://110.53.52.63:8888/newlive/live/hls/18/live.m3u8
北京四海钓鱼,http://120.76.248.139/live/bfgd/4200000229.m3u8
北京环球旅游,http://120.76.248.139/live/bfgd/4200000147.m3u8
北京生态环境频道,http://120.76.248.139/live/bfgd/4200000149.m3u8
北京车迷频道,http://120.76.248.139/live/bfgd/4200000146.m3u8
南京少儿,http://221.226.51.220:50080/newlive/live/hls/46/live.m3u8
南方卫视,http://182.91.124.224:9901/tsfile/live/1059_1.m3u8?key=txiptv&playlive=0&authid=0
卡酷卡通,http://60.172.130.146:352/tsfile/live/1008_1.m3u8?key=txiptv&playlive=1&authid=0
卡酷少儿,http://58.57.40.22:9901/tsfile/live/1060_1.m3u8
卡酷少儿,http://61.138.128.226:19901/tsfile/live/1017_1.m3u8
卡酷少儿,http://60.29.124.66:6080/hls/58/index.m3u8
卡酷少儿,http://218.13.170.98:9901/tsfile/live/1021_1.m3u8
卡酷少儿,http://61.138.128.226:19901/tsfile/live/1017_1.m3u8
卡酷少儿,http://61.157.139.15:9901/tsfile/live/2418_1.m3u8
厦门卫视,http://183.11.239.36:808/hls/17/index.m3u8
厦门卫视,http://110.80.17.38:9901/tsfile/live/0128_1.m3u8
卡酷少儿,http://60.29.124.66:6080/hls/58/index.m3u8
厦门卫视,http://47.122.125.40:6666/hls/xmtv.m3u8
厦门卫视,http://36.105.100.208:35455/itv/1000000005000266006.m3u8?cdn=ystenlive
厦门卫视,http://60.209.125.254:352/tsfile/live/0119_1.m3u8?ace
可克达拉综合,http://218.84.12.186:8001/hls/main/playlist.m3u8?zxinjd;http://218.84.12.186:8001/hls/main/playlist.m3u8zxinjd
吉林乡村,http://36.129.204.117:9003//hls/23/index.m3u8
吉林卫视,http://220.164.192.48:50085/tsfile/live/0118_1.m3u8
吉林卫视,http://58.57.40.22:9901/tsfile/live/1050_1.m3u8
吉林卫视,http://111.160.17.2:59901/tsfile/live/0001_37.m3u8
吉林卫视,http://110.53.52.63:8888/newlive/live/hls/34/live.m3u8
吉林卫视,http://183.11.239.36:808/hls/10/index.m3u8
吉林卫视,http://120.76.248.139/live/bfgd/4200000097.m3u8
吉林卫视,http://47.122.125.40:6666/hls/jlhd.m3u8
吉林生活,http://36.129.204.117:9003//hls/22/index.m3u8
吉林都市,http://36.129.204.117:9003//hls/20/index.m3u8
咪咕体育,http://39.134.67.108/PLTV/88888888/224/3221225897/1.m3u8
咪咕体育,http://39.134.67.108/PLTV/88888888/224/3221226031/1.m3u8
哈哈炫动,http://58.57.40.22:9901/tsfile/live/1061_1.m3u8
哈哈炫动,http://120.238.94.10:9901/tsfile/live/1037_1.m3u8
哈哈炫动,http://61.138.128.226:19901/tsfile/live/1016_1.m3u8
哈哈炫动,http://39.134.65.106/PLTV/88888888/224/3221225534/1.m3u8?
哈哈炫动,http://36.105.100.208:35455/itv/5000000011000031123.m3u8?cdn=bestzb
哈哈炫动,http://120.238.94.10:9901/tsfile/live/1037_1.m3u8
哈尔滨新闻综合,http://39.134.65.106/PLTV/88888888/224/3221226093/1.m3u8?
哈尔滨生活,http://39.134.65.106/PLTV/88888888/224/3221226095/1.m3u8?
喜剧影院,http://183.66.15.146:60901/tsfile/live/0109_2.m3u8?key=txiptv&playlive=1&authid=0
嘉佳卡通,http://183.11.239.36:808/hls/8/index.m3u8
嘉佳卡通,http://61.138.128.226:19901/tsfile/live/1019_1.m3u8
嘉佳卡通,http://61.157.139.15:9901/tsfile/live/2420_1.m3u8
嘉佳卡通,http://183.11.239.36:808/hls/8/index.m3u8
嘉佳卡通,http://218.89.240.144:59901/tsfile/live/1003_1.m3u8
嘉佳卡通,http://125.89.163.44:8888/udp/239.77.0.179:5146
四川卫视,http://58.57.40.22:9901/tsfile/live/1046_1.m3u8
四川卫视,http://111.160.17.2:59901/tsfile/live/0001_34.m3u8
四川卫视,http://110.53.52.63:8888/newlive/live/hls/31/live.m3u8
四川卫视,http://183.11.239.36:808/hls/50/index.m3u8
四川卫视,http://120.76.248.139/live/bfgd/4200000103.m3u8
四川科教,http://182.150.115.21:8030/pcgacg/pcgacg_0.m3u8
四川科教,http://8.138.7.223/【公众号:榴芒电视】/四川科教.m3u8
垫江综合,http://123.146.162.24:8013/tslslive/noEX9SG/hls/live_sd.m3u8?zzhongqd
大庆新闻综合,http://39.134.65.106/PLTV/88888888/224/3221226052/1.m3u8?
大湾区卫视,http://183.11.239.36:808/hls/132/index.m3u8
大湾区卫视,http://222.128.55.152:9080/live/dwq.m3u8
大湾区卫视,http://36.105.100.208:35455/itv/1000000002000011619.m3u8?cdn=ystenlive
天元围棋,http://120.76.248.139/live/bfgd/4200000633.m3u8
天津卫视,http://110.53.52.63:8888/newlive/live/hls/42/live.m3u8
天津卫视,http://183.11.239.36:808/hls/42/index.m3u8
天津卫视,http://123.123.74.59:9003//hls/22/index.m3u8
天津卫视,http://113.57.111.4:1111/tsfile/live/1024_1.m3u8
天津卫视,http://110.80.17.38:9901/tsfile/live/0135_1.m3u8
天津新闻,http://111.160.17.2:59901/tsfile/live/0001_22.m3u8?key=txiptv&playlive=1&authid=0
奎屯哈萨克语,http://218.84.12.186:8002/hls/main/playlist.m3u8
奎屯哈萨克语,http://218.84.12.186:8002/hls/main/playlist.m3u8?zxinjd
好莱坞电影,http://50.7.234.10:8278/hollywoodmovies_twn/playlist.m3u8?tid=MA8A4005638840056388&ct=18392&tsum=a1f1517d4ea64fd01267905f21d83859
宁夏卫视,http://58.57.40.22:9901/tsfile/live/1054_1.m3u8
宁夏卫视,http://110.53.52.63:8888/newlive/live/hls/39/live.m3u8
宁夏卫视,http://183.11.239.36:808/hls/106/index.m3u8
宁夏卫视,http://120.76.248.139/live/bfgd/4200000118.m3u8
宁夏卫视,http://123.132.233.194:352/tsfile/live/0112_1.m3u8
宁夏卫视,http://182.37.169.94:352/tsfile/live/0112_1.m3u8
安多卫视,http://39.134.65.166/PLTV/88888888/224/3221225531/1.m3u8
安多卫视,http://36.105.100.208:35455/itv/1000000005000266001.m3u8?cdn=ystenlive
安徽卫视,http://39.164.160.249:9901/tsfile/live/0130_1.m3u8
安多卫视,http://39.134.66.66/PLTV/88888888/224/3221225531/1.m3u8
安徽卫视,http://58.57.40.22:9901/tsfile/live/1033_1.m3u8
安徽卫视,http://110.53.52.63:8888/newlive/live/hls/24/live.m3u8
安徽卫视,http://183.11.239.36:808/hls/40/index.m3u8
安徽影视,http://112.30.194.221:20080/live/d18ff95cb1fb4bbcb56215e189fc12be/hls.m3u8
安徽影视,http://112.30.194.221:20080/live/d18ff95cb1fb4bbcb56215e189fc12be/hls.m3u8?zanhd#http://112.30.194.221:20080/live/d18ff95cb1fb4bbcb56215e189fc12be/hls.m3u8#http://112.30.194.221:20080/live/d18ff95cb1fb4bbcb56215e189fc12be.flv
安徽影视,http://112.30.194.221:20080/live/d18ff95cb1fb4bbcb56215e189fc12be/hls.m3u8?zanhd
安徽影视,http://112.30.194.221:20080/live/d18ff95cb1fb4bbcb56215e189fc12be.flv
安徽影院,http://112.30.194.221:20080/live/d18ff95cb1fb4bbcb56215e189fc12be/hls.m3u8?zanhd,
安徽经济生活,http://112.30.194.221:20080/live/eac499adad7b49ff9cfa79ba84693959/hls.m3u8
安徽经济生活,http://112.30.194.221:20080/live/eac499adad7b49ff9cfa79ba84693959/hls.m3u8#http://112.30.194.221:20080/live/eac499adad7b49ff9cfa79ba84693959/hls.m3u8?zanhd#http://112.30.194.221:20080/live/eac499adad7b49ff9cfa79ba84693959.flv
安徽经济生活,http://112.30.194.221:20080/live/eac499adad7b49ff9cfa79ba84693959/hls.m3u8?zanhd
安徽经济生活,http://112.30.194.221:20080/live/eac499adad7b49ff9cfa79ba84693959.flv
安徽综艺体育,http://112.30.194.221:20080/live/c41f112b83f644ddb082669501c8ecd3/hls.m3u8
安徽综艺体育,http://112.30.194.221:20080/live/c41f112b83f644ddb082669501c8ecd3.flv
安徽综艺体育,http://112.30.194.221:20080/live/c41f112b83f644ddb082669501c8ecd3/hls.m3u8?zanhd%EF%BC%9F%E4%B8%96%E7%95%8C%E6%9D%AF%E4%B8%96%E7%95%8C%E6%9D%AF
安徽综艺体育,http://112.30.194.221:20080/live/c41f112b83f644ddb082669501c8ecd3/hls.m3u8?zanhd
安徽卫视,http://120.76.248.139/live/bfgd/4200000096.m3u8
家庭影院,http://60.172.130.146:352/tsfile/live/1010_1.m3u8?key=txiptv&playlive=1&authid=0
少儿动画,http://218.15.183.23:9901/tsfile/live/23045_1.m3u8
少儿动画,http://61.138.128.226:19901/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0
山东体育,http://58.57.40.22:9901/tsfile/live/1020_1.m3u8
山东体育,http://61.156.228.12:8154/tsfile/live/1006_1.m3u8
山东体育,http://124.128.73.58:9901/tsfile/live/1001_1.m3u8
山东体育,http://123.130.84.106:8154/tsfile/live/1006_1.m3u8
山东农科,http://58.57.40.22:9901/tsfile/live/1022_1.m3u8
山东卫视,http://39.164.160.249:9901/tsfile/live/0131_1.m3u8
山东卫视,http://110.53.52.63:8888/newlive/live/hls/29/live.m3u8
山东卫视,http://183.11.239.36:808/hls/43/index.m3u8
山东少儿,http://111.14.181.15:9901/tsfile/live/1005_1.m3u8
山东少儿,http://58.57.40.22:9901/tsfile/live/1024_1.m3u8
山东少儿,http://123.132.233.194:352/tsfile/live/1002_1.m3u8
山东少儿,http://123.132.233.194:352/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0
山东少儿,http://123.129.70.178:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0
山东教育,http://120.238.94.10:9901/tsfile/live/1062_1.m3u8
山东教育,http://121.19.134.222:808/tsfile/live/1033_1.m3u8
山东影视,http://124.128.73.58:9901/tsfile/live/1009_1.m3u8
山东影视,http://124.128.73.58:9901/tsfile/live/1009_1.m3u8?key=txiptv&playlive=1&authid=0
山东教育,http://183.11.239.36:808/hls/72/index.m3u8
山东教育,http://121.19.134.222:808/tsfile/live/1033_1.m3u8
山东教育卫视,http://58.57.40.22:9901/tsfile/live/1026_1.m3u8
山东教育卫视,http://120.76.248.139/live/bfgd/4200000112.m3u8
山东教育卫视,http://123.132.233.194:352/tsfile/live/1003_1.m3u8
山东教育卫视,http://39.134.64.87:6610/PLTV/88888888/224/3221225655/index.m3u8?IASHttpSessionId=
山东文旅,http://58.57.40.22:9901/tsfile/live/1023_1.m3u8
山东文旅,http://60.209.125.254:352/tsfile/live/1004_1.m3u8?ace
山东文旅,http://221.2.148.205:8154/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0
山东新闻,http://221.2.148.205:8154/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0
山东新闻,http://123.129.70.178:9901/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0
山东生活,http://58.57.40.22:9901/tsfile/live/1018_1.m3u8
山东生活,http://123.129.70.178:9901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0
山东生活,http://221.2.148.205:8154/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0
山东综艺,http://123.129.70.178:9901/tsfile/live/1001_1.m3u8
山东综艺,http://58.57.40.22:9901/tsfile/live/1021_1.m3u8
山东综艺,http://123.129.70.178:9901/tsfile/live/1001_1.m3u8
山东综艺,http://124.128.73.58:9901/tsfile/live/1002_1.m3u8
山东综艺,http://123.132.233.194:352/tsfile/live/1000_1.m3u8
山东综艺,http://221.2.148.205:8154/tsfile/live/1003_1.m3u8?key=txiptv&playlive=1&authid=0
山东综艺,http://124.128.73.58:9901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0
山东齐鲁,http://61.156.228.12:8154/tsfile/live/1001_1.m3u8
山东齐鲁,http://111.14.181.15:9901/tsfile/live/1000_1.m3u8
山东齐鲁,http://123.130.84.106:8154/tsfile/live/1001_1.m3u8
山东齐鲁,http://123.132.233.194:352/tsfile/live/1019_1.m3u8
山东齐鲁,http://124.128.73.58:9901/tsfile/live/1000_1.m3u8
山东齐鲁,http://61.156.228.12:8154/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
山东齐鲁,http://123.130.84.106:8154/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
山西卫视,http://110.53.52.63:8888/newlive/live/hls/43/live.m3u8
山西卫视,http://183.11.239.36:808/hls/59/index.m3u8
山西卫视,http://120.76.248.139/live/bfgd/4200000109.m3u8
山西影视,http://60.223.224.176:8888/newlive/live/hls/54/live.m3u8
巴音郭楞州,http://124.88.144.73:1935/live/jjsh/playlist.m3u8#@http://202.107.188.141:5002/shiheziyinshiwenti_hdgq.m3u8?token=guoziyun#@http://202.107.188.139:5002/shiheziyinshiwenti_hdcq.m3u8?token=guoziyun
广东体育,http://120.238.94.10:9901/tsfile/live/1012_1.m3u8
广东体育,http://121.33.239.242:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
广东体育,http://218.13.14.6:60050/tsfile/live/1021_1.m3u8
广东体育,http://218.13.170.98:9901/tsfile/live/0019_1.m3u8
广东体育,http://218.15.183.23:9901/tsfile/live/23012_1.m3u8
广东体育,http://183.237.95.108:9901/tsfile/live/1033_1.m3u8?key=txiptv&playlive=0&authid=0
广东体育,http://183.11.239.36:808/hls/2/index.m3u8
广东体育,http://120.238.94.82:9901/tsfile/live/1012_1.m3u8
广东体育,http://218.15.183.23:9901/tsfile/live/23012_1.m3u8
广东体育,http://218.13.170.98:9901/tsfile/live/0019_1.m3u8
广东体育,http://119.32.12.17:2901/udp/224.1.100.34:11111
广东体育,http://120.198.101.106:9901/tsfile/live/1012_1.m3u8?key=txiptv
广东公共,http://218.13.14.6:60050/tsfile/live/1020_1.m3u8
广东卫视,http://39.164.160.249:9901/tsfile/live/0125_1.m3u8
广东卫视,http://58.57.40.22:9901/tsfile/live/1039_1.m3u8
广东卫视,http://60.223.224.176:8888/newlive/live/hls/20/live.m3u8
广东卫视,http://110.53.52.63:8888/newlive/live/hls/20/live.m3u8
广东卫视,http://183.11.239.36:808/hls/80/index.m3u8
广东卫视,http://218.13.14.6:60050/tsfile/live/1017_1.m3u8
广东少儿,http://183.11.239.36:808/hls/175/index.m3u8
广东影视,http://183.11.239.36:808/hls/6/index.m3u8
广东新闻,http://218.13.14.6:60050/tsfile/live/1019_1.m3u8
广东新闻,http://120.238.94.10:9901/tsfile/live/1010_1.m3u8
广东新闻,http://183.11.239.36:808/hls/5/index.m3u8
广东新闻,http://218.15.183.23:9901/tsfile/live/23010_1.m3u8
广东民生,http://119.32.12.32:2901/udp/224.1.100.4:11111
广东民生,http://183.237.95.108:9901/tsfile/live/1032_1.m3u8?key=txiptv&playlive=0&authid=0
广东民生,http://183.11.239.36:808/hls/18/index.m3u8
广东民生,http://119.32.12.17:2901/udp/224.1.100.4:11111
广东民生,http://121.11.160.7:9901/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
广东民生,http://14.212.185.146:9901/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0
广东民生,http://183.237.95.108:9901/tsfile/live/1032_1.m3u8?key=txiptv&playlive=0&authid=0
广东珠江,http://218.13.14.6:60050/tsfile/live/1018_1.m3u8
广东珠江,http://218.15.183.23:9901/tsfile/live/23009_1.m3u8
广州影视,http://125.89.163.44:8888/udp/239.253.43.73:5146
广州新闻,http://119.32.12.32:2901/udp/224.1.100.38:11111
广东珠江,http://183.11.239.36:808/hls/83/index.m3u8
广东珠江,http://120.238.94.10:9901/tsfile/live/1009_1.m3u8
广州新闻,http://125.89.163.44:8888/udp/239.253.43.72:5146
广州新闻,http://119.32.12.17:2901/udp/224.1.100.38:11111
广州竞赛,http://119.32.12.32:2901/udp/224.1.100.105:11111
广州综合,http://125.89.163.44:8888/udp/239.253.43.71:5146
广州综合,http://119.32.12.32:2901/udp/224.1.100.36:11111
广州竞赛,http://119.32.12.17:2901/udp/224.1.100.105:11111
广州竞赛,http://125.89.163.44:8888/udp/239.253.43.75:5146
广州综合,http://119.32.12.17:2901/udp/224.1.100.36:11111
广西卫视,http://58.57.40.22:9901/tsfile/live/1049_1.m3u8
广西卫视,http://111.160.17.2:59901/tsfile/live/0001_44.m3u8
广西卫视,http://110.53.52.63:8888/newlive/live/hls/25/live.m3u8
广西卫视,http://183.11.239.36:808/hls/56/index.m3u8
广西影视,http://116.9.204.242:9901/tsfile/live/0124_1.m3u8
广西影视,http://116.9.204.242:9901/tsfile/live/0124_1.m3u8?key=txiptv&playlive=1&authid=0
广西新闻,http://116.9.204.242:9901/tsfile/live/1001_1.m3u8
康巴卫视,http://218.89.240.144:59901/tsfile/live/1010_1.m3u8
广西新闻,http://182.91.124.224:9901/tsfile/live/1006_1.m3u8?key=txiptv&playlive=0&authid=0
康巴卫视,http://39.134.66.66/PLTV/88888888/224/3221225527/1.m3u8
康巴卫视,http://39.134.65.166/PLTV/88888888/224/3221225527/1.m3u8
康巴卫视,http://61.157.139.15:9901/tsfile/live/2415_1.m3u8?key=txiptv&playlive=1&authid=0
康巴卫视,http://36.105.100.208:35455/itv/1000000005000266002.m3u8?cdn=ystenlive
延边卫视,http://120.76.248.139/live/bfgd/4200000117.m3u8
延边卫视,http://61.138.128.226:19901/tsfile/live/1008_1.m3u8
延边卫视,http://39.134.67.108/PLTV/88888888/224/3221226040/1.m3u8
延边卫视,http://36.105.100.208:35455/itv/1000000005000266008.m3u8?cdn=ystenlive
当涂新闻综合,http://112.30.194.221:20080/live/4f38ef59c79e4d4bac1a995681102573/hls.m3u8
延边卫视,http://39.134.64.87:6610/PLTV/88888888/224/3221226516/index.m3u8?IASHttpSessionId=
延边卫视,http://120.76.248.139/live/bfgd/4200000117.m3u8
快乐垂钓,http://36.105.100.208:35455/itv/5000000011000031206.m3u8?cdn=bestzb
新疆卫视,http://39.164.160.249:9901/tsfile/live/0110_1.m3u8
新疆卫视,http://58.57.40.22:9901/tsfile/live/1055_1.m3u8
新疆卫视,http://110.53.52.63:8888/newlive/live/hls/37/live.m3u8
新疆卫视,http://183.11.239.36:808/hls/65/index.m3u8
@@ -342,19 +373,19 @@ iHOT爱体育,http://146.56.165.66:7788/TVOD/2000000004000000060/hnbblive/index.
新疆玛纳斯综合,http://218.84.127.245:1026/hls/main1/playlist.m3u8?zxinjd
新疆石河子影视文体,http://124.88.144.73:1935/live/jjsh/playlist.m3u8
新疆石河子新闻综合,http://124.88.144.73:1935/live/xwzh/playlist.m3u8
新疆石河子经济生活,http://124.88.144.73:1935/live/dywt/playlist.m3u8
新视觉,http://120.76.248.139/live/bfgd/4200000249.m3u8
星空卫视,http://218.202.220.2:5000/nn_live.ts?id=STARTV#rtmp://58.200.131.2:1935/livetv/startv#rtmp://ivi.bupt.edu.cn:1935/livetv/startv
朝阳新闻综合,http://120.76.248.139/live/bfgd/4200000282.m3u8
旅游卫视,http://124.128.73.58:9901/tsfile/live/0114_1.m3u8?key=txiptv&playlive=1&authid=0
星空卫视,http://122.224.58.42:85/tsfile/live/1024_1.m3u8?key=txiptv&playlive=1&authid=0
杭州明珠,http://120.198.101.106:9901/tsfile/live/1008_1.m3u8?key=txiptv
梨园频道,http://61.163.181.78:9901/tsfile/live/1006_1.m3u8
梨园,http://61.163.181.78:9901/tsfile/live/1006_1.m3u8
梨园频道,http://60.2.190.206:4000/udp/239.253.92.152:8086
梨园频道,http://60.2.190.206:4000/udp/239.253.93.133:6441
武乡新闻综合,http://60.220.198.84:81/0.m3u8
求索动物,http://39.134.65.106/PLTV/88888888/224/3221225730/1.m3u8?
求索生活,http://39.134.65.106/PLTV/88888888/224/3221225715/1.m3u8?
求索科学,http://39.134.65.106/PLTV/88888888/224/3221225728/1.m3u8?
求索纪录,http://60.2.190.206:4000/udp/239.253.93.236:6414
求索纪录,http://39.134.65.106/PLTV/88888888/224/3221225713/1.m3u8?
求索纪录,http://60.2.190.206:4000/udp/239.253.93.236:6414
汕头文旅,http://125.89.163.44:8888/udp/239.77.1.132:5146
汕头经济,http://125.89.163.44:8888/udp/239.77.1.131:5146
汕头综合,http://125.89.163.44:8888/udp/239.77.1.130:5146
@@ -362,31 +393,37 @@ iHOT爱体育,http://146.56.165.66:7788/TVOD/2000000004000000060/hnbblive/index.
江夏新闻综合,http://59.175.226.142:280/gb28181/xwzh.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
江津新闻综合,http://222.179.155.21:1935/ch1.m3u8
江津新闻综合,http://222.179.155.21:1935/ch1.m3u8?zzhongqd
江苏卫视,http://39.164.160.249:9901/tsfile/live/0127_1.m3u8
江苏卫视,http://58.57.40.22:9901/tsfile/live/1031_1.m3u8
江苏卫视,http://60.223.224.176:8888/newlive/live/hls/21/live.m3u8
江西卫视,http://39.164.160.249:9901/tsfile/live/0138_1.m3u8
江苏卫视,http://110.53.52.63:8888/newlive/live/hls/21/live.m3u8
江苏卫视,http://183.11.239.36:808/hls/38/index.m3u8
江苏城市,http://58.210.168.86:10800/newlive/live/hls/52/live.m3u8
江苏城市,http://58.213.65.146:352/tsfile/live/0120_3.m3u8?key=txiptv
江苏城市,http://221.226.215.162:352/tsfile/live/0120_3.m3u8?key=txiptv&playlive=1&authid=0
江苏城市,http://58.220.219.14:9901/tsfile/live/0120_3.m3u8?key=txiptv&playlive=1&authid=0
江苏影视,http://221.226.215.162:352/tsfile/live/0109_1.m3u8?key=txiptv&playlive=1&authid=0
江苏教育,http://58.221.214.82:9901/tsfile/live/0012_2.m3u8?key=txiptv
江西卫视,http://58.57.40.22:9901/tsfile/live/1043_1.m3u8
江西卫视,http://111.160.17.2:59901/tsfile/live/0001_43.m3u8
江西卫视,http://110.53.52.63:8888/newlive/live/hls/41/live.m3u8
江西卫视,http://120.76.248.139/live/bfgd/4200000098.m3u8
江西卫视,http://47.122.125.40:6666/hls/jxhd.m3u8
江西教育,http://58.17.48.228:808/hls/24/index.m3u8
江门侨乡生活,http://125.89.163.44:8888/udp/239.77.0.202:5146
江门综合,http://125.89.163.44:8888/udp/239.77.0.201:5146
河北农民,http://121.19.134.222:808/tsfile/live/1005_1.m3u8
河北农民,http://124.239.135.194:11080/live/hbnm/index.m3u8
河北卫视,http://39.164.160.249:9901/tsfile/live/0117_1.m3u8
河北农民,http://121.19.134.222:808/tsfile/live/1005_1.m3u8
河北卫视,http://58.57.40.22:9901/tsfile/live/1044_1.m3u8
河北卫视,http://111.160.17.2:59901/tsfile/live/0001_39.m3u8
河北卫视,http://183.11.239.36:808/hls/54/index.m3u8
河北卫视,http://120.76.248.139/live/bfgd/4200000108.m3u8
河北少儿科教,http://124.239.135.194:11080/live/sekj/index.m3u8
河北都市,http://124.239.135.194:11080/live/hbds/index.m3u8
河北都市,http://121.19.134.222:808/tsfile/live/1001_1.m3u8
河北都市,http://121.19.134.222:808/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
河南卫视,http://39.164.160.249:9901/tsfile/live/0139_1.m3u8
河南卫视,http://58.57.40.22:9901/tsfile/live/1048_1.m3u8
河南卫视,http://60.223.224.176:8888/newlive/live/hls/32/live.m3u8
河南卫视,http://111.160.17.2:59901/tsfile/live/0001_47.m3u8
河南卫视,http://110.53.52.63:8888/newlive/live/hls/32/live.m3u8
河南卫视,http://183.11.239.36:808/hls/51/index.m3u8
河南民生,http://61.163.181.78:85/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0
河南都市,http://61.163.181.78:9901/tsfile/live/1004_1.m3u8
河源公共,http://125.89.163.44:8888/udp/239.253.43.214:5146
河源综合,http://125.89.163.44:8888/udp/239.253.43.213:5146
津南一套,http://61.147.106.103/play.jinnantv.top/live/JNTV1.m3u8?ztianjd&wsSession=4e59297ef5846f4a7cf02eb3-172672213891355&wsIPSercert=6d426cba8b106cdec9147b1e2a9ace7c&wsiphost=local&wsBindIP=1
济南影视,http://124.128.73.58:9901/tsfile/live/1005_1.m3u8
济南影视,http://124.128.73.58:9901/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0
@@ -394,123 +431,125 @@ iHOT爱体育,http://146.56.165.66:7788/TVOD/2000000004000000060/hnbblive/index.
济南综合,http://124.128.73.58:9901/tsfile/live/1003_1.m3u8?key=txiptv&playlive=1&authid=0
济南都市,http://124.128.73.58:9901/tsfile/live/1004_1.m3u8
济南都市,http://124.128.73.58:9901/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0
济宁公共,http://111.14.181.15:9901/tsfile/live/1009_1.m3u8?key=tvbox6_com&playlive=1&authid=0
济宁综合,http://111.14.181.15:9901/tsfile/live/1007_1.m3u8
济宁综合,http://111.14.181.15:9901/tsfile/live/1007_1.m3u8?key=tvbox6_com&playlive=1&authid=0
浙江卫视,http://60.223.224.176:8888/newlive/live/hls/23/live.m3u8
海南卫视,http://220.164.192.48:50085/tsfile/live/1003_1.m3u8
浙江卫视,http://58.57.40.22:9901/tsfile/live/1029_1.m3u8
海南卫视,http://58.57.40.22:9901/tsfile/live/1000_1.m3u8
海南卫视,http://183.11.239.36:808/hls/124/index.m3u8
海南卫视,http://120.76.248.139/live/bfgd/4200000473.m3u8
海南卫视,http://58.210.168.86:10800/newlive/live/hls/28/live.m3u8
海南卫视,http://36.32.174.67:60080/newlive/live/hls/46/live.m3u8
海峡卫视,http://38.64.72.148:80/hls/modn/list/4009/chunklist0.m3u8
海南卫视,http://113.57.111.4:1111/tsfile/live/1031_1.m3u8
海峡卫视,http://38.64.72.148:80/hls/modn/list/4009/playlist.m3u8
涡阳新闻综合,http://220.180.124.18:888/live/ch0.m3u8
淮南公共,http://112.30.194.221:20080/live/6e43da3335a640b3a73c948fccf935c5/hls.m3u8
深圳卫视,http://58.57.40.22:9901/tsfile/live/1036_1.m3u8
深圳卫视,http://111.160.17.2:59901/tsfile/live/0001_49.m3u8
深圳卫视,http://110.53.52.63:8888/newlive/live/hls/27/live.m3u8
深圳卫视,http://183.11.239.36:808/hls/45/index.m3u8
深圳少儿,http://183.11.239.36:808/hls/157/index.m3u8
深圳少儿,http://125.89.163.44:8888/udp/239.77.1.244:5146
深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8
深圳移动电视,http://125.89.163.44:8888/udp/239.77.1.175:5146
深圳财经生活,http://183.11.239.36:808/hls/151/index.m3u8
游戏风云,http://36.105.100.208:35455/itv/5000000011000031114.m3u8?cdn=bestzb
湖北卫视,http://58.57.40.22:9901/tsfile/live/1038_1.m3u8
湖北卫视,http://60.223.224.176:8888/newlive/live/hls/33/live.m3u8
湖北卫视,http://110.53.52.63:8888/newlive/live/hls/33/live.m3u8
湖北卫视,http://120.76.248.139/live/bfgd/4200000102.m3u8
湖北卫视,http://47.122.125.40:6666/hls/hbhd.m3u8
湖北卫视,http://223.241.247.214:9901/tsfile/live/0132_1.m3u8
湖北垄上,http://58.19.43.46:9901/tsfile/live/1015_1.m3u8
湖北垄上,http://113.57.20.158:9901/tsfile/live/1015_1.m3u8
湖北垄上,http://119.36.148.115:59901/tsfile/live/1006_1.m3u8
湖北垄上,http://113.57.20.158:9901/tsfile/live/1015_1.m3u8?key=txiptv&playlive=1&authid=0
湖北影视,http://113.57.20.158:9901/tsfile/live/1016_1.m3u8
湖北影视,http://58.19.43.46:9901/tsfile/live/1016_1.m3u8
湖北影视,http://113.57.20.158:9901/tsfile/live/1016_1.m3u8?key=txiptv&playlive=1&authid=0
湖北经视,http://58.19.43.46:9901/tsfile/live/1017_1.m3u8
湖北经视,http://113.57.93.165:9900/tsfile/live/1017_1.m3u8
湖北经视,http://119.36.148.115:59901/tsfile/live/1004_1.m3u8?key=txiptv
湖北经视,http://113.57.93.165:9900/tsfile/live/1017_1.m3u8?key=txiptv&playlive=1&authid=0
湖北综合,http://58.19.133.144:9901
湖南公共,http://116.128.242.83:9901/tsfile/live/0117_1.m3u8
湖南公共,http://116.128.242.83:9901/tsfile/live/0117_1.m3u8?key=txiptv&playlive=1&authid=0
湖南卫视,http://39.164.160.249:9901/tsfile/live/0128_1.m3u8
湖南卫视,http://58.57.40.22:9901/tsfile/live/1028_1.m3u8
湖南卫视,http://60.223.224.176:8888/newlive/live/hls/22/live.m3u8
湖南卫视,http://110.53.52.63:8888/newlive/live/hls/22/live.m3u8
湖南娱乐,http://116.128.243.121:85/tsfile/live/1002_1.m3u8?key=txiptv&playlive=1&authid=0
湖南娱乐,http://116.128.242.83:9901/tsfile/live/0125_1.m3u8?key=txiptv&playlive=1&authid=0
湖南电影,http://110.53.52.63:8888/newlive/live/hls/50/live.m3u8
湖南电影,http://116.128.242.83:9901/tsfile/live/1009_1.m3u8
湖南电视剧,http://116.128.242.83:9901/tsfile/live/0120_1.m3u8
湖南电视剧,http://116.128.242.83:9901/tsfile/live/0120_1.m3u8?key=txiptv&playlive=1&authid=0
湖南经视,http://110.53.218.182:9902/tsfile/live/1004_1.m3u8
湖南经视,http://116.128.242.83:9901/tsfile/live/0131_1.m3u8
湖南经视,http://116.128.242.83:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0
湖南经视,http://116.128.243.121:85/tsfile/live/1000_1.m3u8?key=txiptv&playlive=1&authid=0
湖南经视,http://116.128.242.83:9901/tsfile/live/0131_1.m3u8?key=txiptv&playlive=1&authid=0
湖南都市,http://110.53.218.182:9902/tsfile/live/0127_1.m3u8
湖南都市,http://116.128.243.121:85/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
湖南都市,http://116.128.242.83:9901/tsfile/live/0139_1.m3u8?key=txiptv&playlive=1&authid=0
漫画解说,http://124.248.69.76:26781/douyu/5907076
漫画解说,http://61.133.118.228:5001/yy/1382735568
漳浦综合,http://220.161.87.62:8090/hls/0/index.m3u8
漳浦综合,http://220.161.87.62:8800/hls/0/index.m3u8
漳浦综合,http://220.161.87.62:8090/hls/0/index.m3u8?zfud
炫动卡通,http://218.15.183.23:9901/tsfile/live/23042_1.m3u8
炫动卡通,http://120.198.95.220:9901/tsfile/live/1034_1.m3u8?key=txiptv
炫动卡通,http://183.237.95.108:9901/tsfile/live/1100_1.m3u8?key=txiptv&playlive=0&authid=0
炫动卡通,http://120.198.95.220:9901/tsfile/live/1034_1.m3u8?key=txiptv
玛纳斯综合,http://218.84.127.245:1026/hls/main1/playlist.m3u8
玛纳斯综合,http://218.84.127.245:1026/hls/main1/playlist.m3u8?zxinjd,
璧山综合,http://222.179.42.129:8181/hls1.m3u8
甘肃卫视,http://58.57.40.22:9901/tsfile/live/1056_1.m3u8
甘肃卫视,http://110.53.52.63:8888/newlive/live/hls/35/live.m3u8
甘肃卫视,http://120.76.248.139/live/bfgd/4200000119.m3u8
甘肃卫视,http://223.241.247.214:9901/tsfile/live/0141_1.m3u8
生活时尚,http://146.56.165.66:7788/TVOD/5000000002000019634/bestzb/index.m3u8
睛彩广场舞,http://36.105.100.208:35455/itv/2000000003000000062.m3u8?cdn=hnbblive
睛彩河北,http://124.239.135.194:11080/live/qchb/index.m3u8
睛彩竞技,http://138.2.61.159:5000/2000000003000000060/hnbblive/index.m3u8
睛彩竞技,http://138.2.61.159:5000/1000000006000270001/ystenlive/index.m3u8
睛彩竞技,http://39.134.65.106/PLTV/88888888/224/3221225897/1.m3u8?
睛彩篮球,http://138.2.61.159:5000/2000000003000000061/hnbblive/index.m3u8
睛彩篮球,http://138.2.61.159:5000/2000000003000000065/hnbblive/index.m3u8
睛彩篮球,http://138.2.61.159:5000/1000000006000270002/ystenlive/index.m3u8
睛彩篮球,http://138.2.61.159:5000/1000000006000270006/ystenlive/index.m3u8
睛彩篮球,http://36.105.100.208:35455/itv/2000000003000000061.m3u8?cdn=hnbblive
石家庄新闻综合,http://124.239.135.194:11080/live/sjzxwzh/index.m3u8
石河子教育,http://124.88.144.73:1935/live/xwzh/playlist.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
石河子新闻综合,http://124.88.144.73:1935/live/dywt/playlist.m3u8
福建少儿,http://110.81.206.138:49231/tsfile/live/23030_1.m3u8?key=txiptv&playlive=1&authid=0
福建新闻,http://110.80.17.38:9901/tsfile/live/0122_1.m3u8
福建新闻,http://110.81.206.138:49231/tsfile/live/23025_1.m3u8?key=txiptv&playlive=1&authid=0
精品体育,http://146.56.165.66:7788/TVOD/2000000003000000021/hnbblive/index.m3u8
纪实科教8K,http://111.31.106.140/downflv.brtvcloud.com/8klive/8kliveok.m3u8
福建电视剧,http://110.81.206.138:49231/tsfile/live/23026_1.m3u8?key=txiptv&playlive=1&authid=0
福建综合,http://110.81.206.138:49231/tsfile/live/23023_1.m3u8?key=txiptv&playlive=1&authid=0
精品体育,http://39.135.133.155:80/PLTV/88888888/224/3221225526/1.m3u8
精品体育,http://39.135.133.154:80/PLTV/88888888/224/3221225526/1.m3u8
纬来体育,http://122.117.71.103:8562/纬来体育.m3u8
纬来体育,http://122.117.71.103:8562/http/61.222.53.250:8081/hls/75/817/ch59.m3u8
纬来电影台,http://122.117.71.103:8554/http/61.222.53.250:8081/hls/69/811/ch35.m3u8
经典动漫,http://61.133.118.228:5001/yy/24180320
经典电影,http://120.238.94.10:9901/tsfile/live/1040_1.m3u8
经典电影,http://61.163.181.78:9901/tsfile/live/1059_1.m3u8
经典电影,http://61.133.118.228:5001/yy/1356363815
经典电影,http://120.238.94.10:9901/tsfile/live/1040_1.m3u8
经典电影,http://60.172.130.146:352/tsfile/live/1006_1.m3u8?key=txiptv&playlive=1&authid=0
绵阳综合,http://119.6.59.216:60033/tsfile/live/1007_1.m3u8?key=txiptv
美亚电影,http://50.7.234.10:8278/meiyamovie_twn/playlist.m3u8?tid=MD3D6323299363232993&ct=18392&tsum=3f73f541d33abe71140d28ada99a071b
苏州文化生活,http://61.155.203.93:5021/live_hls/3/.m3u8
苏州新闻综合,http://61.155.203.93:5021/live_hls/1/.m3u8
苏州生活资讯,http://61.155.203.93:5021/live_hls/4/.m3u8
苏州社会经济,http://61.155.203.93:5021/live_hls/2/.m3u8
茂名公共,http://125.89.163.44:8888/udp/239.77.0.207:5146
茂名综合,http://125.89.163.44:8888/udp/239.77.0.206:5146
荣昌综合,http://183.64.181.25:40023/rongchang01.m3u8
西安1套,http://112.46.85.60:8009/hls/28/index.m3u8
西藏卫视,http://110.53.52.63:8888/newlive/live/hls/36/live.m3u8
西藏卫视,http://183.11.239.36:808/hls/64/index.m3u8
西藏卫视,http://120.76.248.139/live/bfgd/4200000121.m3u8
西藏卫视,http://123.132.233.194:352/tsfile/live/0111_1.m3u8
西藏卫视,http://221.2.148.205:8154/tsfile/live/0111_1.m3u8
贵州卫视,http://220.164.192.48:50085/tsfile/live/0125_1.m3u8
西藏卫视,http://101.19.84.8:9901/tsfile/live/0111_1.m3u8
西藏卫视,http://120.238.94.10:9901/tsfile/live/1077_1.m3u8
贵州卫视,http://58.57.40.22:9901/tsfile/live/1042_1.m3u8
贵州卫视,http://110.53.52.63:8888/newlive/live/hls/28/live.m3u8
贵州卫视,http://183.11.239.36:808/hls/49/index.m3u8
贵州卫视,http://120.76.248.139/live/bfgd/4200000101.m3u8
贵州卫视,http://123.132.233.194:352/tsfile/live/0120_1.m3u8
贵州卫视,http://111.14.181.15:9901/tsfile/live/0120_1.m3u8
超级体育,http://36.105.100.208:35455/itv/1000000001000009601.m3u8?cdn=ystenlive
贵州卫视,http://113.57.111.4:1111/tsfile/live/1029_1.m3u8
超级体育,http://39.134.65.106/PLTV/88888888/224/3221225635/1.m3u8?
超级体育,http://36.105.100.208:35455/itv/1000000001000009601.m3u8?cdn=ystenlive
超级影视,http://39.134.65.65:80/TVOD/88888888/224/3221225637/main.m3u8
超级电影,http://39.135.133.154:80/PLTV/88888888/224/3221225644/1.m3u8
超级电影,http://39.135.133.155:80/PLTV/88888888/224/3221225644/1.m3u8
超级电影,http://39.135.133.157:80/PLTV/88888888/224/3221225644/1.m3u8
超级电影,http://39.134.65.73:80/PLTV/88888888/224/3221225644/1.m3u8
超级电影,http://39.134.65.106/PLTV/88888888/224/3221225644/1.m3u8?
超级综艺,http://39.134.65.73:80/PLTV/88888888/224/3221225550/1.m3u8
超级综艺,http://39.135.133.157:80/PLTV/88888888/224/3221225550/1.m3u8
超级综艺,http://39.135.133.157:80/PLTV/88888888/224/3221225642/1.m3u8
超级综艺,http://39.135.133.174:80/PLTV/88888888/224/3221225550/1.m3u8
超级综艺,http://39.134.65.106/PLTV/88888888/224/3221225642/1.m3u8?
辽宁体育,http://120.76.248.139/live/bfgd/4200000611.m3u8
辽宁公共,http://120.76.248.139/live/bfgd/4200000481.m3u8
辽宁公共,http://120.76.248.139/live/bfgd/4200000077.m3u8
辽宁北方,http://120.76.248.139/live/bfgd/4200000071.m3u8
辽宁卫视,http://39.164.160.249:9901/tsfile/live/0121_1.m3u8
辽宁卫视,http://58.57.40.22:9901/tsfile/live/1035_1.m3u8
辽宁卫视,http://111.160.17.2:59901/tsfile/live/0001_41.m3u8
辽宁卫视,http://110.53.52.63:8888/newlive/live/hls/46/live.m3u8
辽宁卫视,http://183.11.239.36:808/hls/47/index.m3u8
辽宁卫视,http://120.76.248.139/live/bfgd/4200000141.m3u8
辽宁卫视,http://120.76.248.139/live/bfgd/4200000185.m3u8
辽宁影视剧,http://120.76.248.139/live/bfgd/4200000070.m3u8
辽宁教育青少,http://120.76.248.139/live/bfgd/4200000075.m3u8
辽宁生活,http://120.76.248.139/live/bfgd/4200000073.m3u8
@@ -518,74 +557,79 @@ iHOT爱体育,http://146.56.165.66:7788/TVOD/2000000004000000060/hnbblive/index.
辽宁经济,http://120.76.248.139/live/bfgd/4200000480.m3u8
辽宁都市,http://120.76.248.139/live/bfgd/4200000068.m3u8
辽宁都市,http://120.76.248.139/live/bfgd/4200000610.m3u8
都市剧场,http://222.179.42.129:8181/hls1.m3u8?zzhongqd
都市剧场,http://183.237.95.108:9901/tsfile/live/1069_1.m3u8?key=txiptv&playlive=0&authid=0
都市剧场,http://60.172.130.146:352/tsfile/live/1005_1.m3u8?key=txiptv&playlive=1&authid=0
都市剧场,http://222.179.155.21:1935/ch1.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
鄂托克旗电视台,http://110.19.181.138:10080/hls/F509Rh7GR/F509Rh7GR_live.m3u8?zneimd
重庆卫视,http://58.57.40.22:9901/tsfile/live/0142_1.m3u8
重庆卫视,http://111.160.17.2:59901/tsfile/live/0001_31.m3u8
重庆卫视,http://110.53.52.63:8888/newlive/live/hls/30/live.m3u8
重庆卫视,http://183.11.239.36:808/hls/53/index.m3u8
重庆卫视,http://120.76.248.139/live/bfgd/4200000107.m3u8
重庆汽摩,http://120.76.248.139/live/bfgd/4200000168.m3u8
重庆汽摩,http://183.64.181.25:40023/rongchang01.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
重庆汽摩,http://183.230.184.51:65500/tntv1.m3u8?zzhongqd
重庆汽摩,http://218.89.240.144:59901/tsfile/live/1010_1.m3u8?key=txiptv
重庆璧山综合,http://222.179.42.129:8181/hls1.m3u8?zzhongqd
重温经典,http://120.76.248.139/live/bfgd/4200000635.m3u8
重温经典,http://120.76.248.139/live/bfgd/4200000636.m3u8
金川乡村,http://139.203.180.9:90/live/jcxc.m3u8
金川新闻综合,http://139.203.180.9:90/live/zhxw.m3u8
金牌综艺,http://39.134.65.106/PLTV/88888888/224/3221225525/1.m3u8?
金牌综艺,http://39.134.65.175/PLTV/88888888/224/3221225525/1.m3u8
金牌综艺,http://39.134.65.73:80/PLTV/88888888/224/3221225525/1.m3u8
金牌综艺,http://39.135.133.154:80/PLTV/88888888/224/3221225525/1.m3u8
金牌综艺,http://39.135.133.154:80/TVOD/88888888/224/3221225525/main.m3u8
金牌综艺,http://39.135.133.155:80/PLTV/88888888/224/3221225525/1.m3u8
金鹰卡通,http://58.57.40.22:9901/tsfile/live/1059_1.m3u8
金鹰卡通,http://110.80.17.38:9901/tsfile/live/0016_2.m3u8
金鹰卡通,http://183.66.15.146:60901/tsfile/live/0117_2.m3u8
金鹰卡通,http://218.15.183.23:9901/tsfile/live/23041_1.m3u8
金鹰卡通,http://110.53.52.63:8888/newlive/live/hls/49/live.m3u8
金鹰卡通,http://111.160.17.2:59901/tsfile/live/0001_33.m3u8
金鹰卡通,http://116.128.242.83:9901/tsfile/live/1002_1.m3u8
金鹰卡通,http://58.19.43.46:9901/tsfile/live/1000_1.m3u8
金鹰纪实,http://58.57.40.22:9901/tsfile/live/1070_1.m3u8
金鹰纪实,http://120.238.94.10:9901/tsfile/live/1059_1.m3u8
金鹰纪实,http://183.11.239.36:808/hls/171/index.m3u8
金鹰纪实,http://121.19.134.222:808/tsfile/live/1037_1.m3u8
铜梁综合,http://183.64.174.171:40123/ch1.m3u8
陕西1套,http://123.138.22.30:9901/tsfile/live/1000_1.m3u8
铜梁综合,http://183.64.174.171:40123/ch1.m3u8?zzhongqd
陕西1套,http://112.46.85.60:8009/hls/18/index.m3u8
陕西1套,http://124.116.183.146:9901/tsfile/live/1000_1.m3u8
陕西2套,http://123.138.22.30:9901/tsfile/live/1001_1.m3u8
陕西2套,http://124.116.183.146:9901/tsfile/live/1001_1.m3u8
陕西3套,http://124.116.183.146:9901/tsfile/live/1002_1.m3u8
陕西6套,http://112.46.85.60:8009/hls/23/index.m3u8
陕西卫视,http://39.164.160.249:9901/tsfile/live/0136_1.m3u8
陕西卫视,http://110.53.52.63:8888/newlive/live/hls/40/live.m3u8
陕西卫视,http://183.11.239.36:808/hls/58/index.m3u8
陕西卫视,http://124.116.183.146:9901/tsfile/live/0136_1.m3u8
陕西新闻资讯,http://113.200.148.203:85/tsfile/live/1011_1.m3u8?key=txiptv&playlive=1&authid=0
青海卫视,http://220.164.192.48:50085/tsfile/live/0140_1.m3u8
陕西卫视,http://223.241.247.214:9901/tsfile/live/0136_1.m3u8
青海卫视,http://110.53.52.63:8888/newlive/live/hls/38/live.m3u8
青海卫视,http://120.76.248.139/live/bfgd/4200000111.m3u8
青海卫视,http://47.122.125.40:6666/hls/qhtv.m3u8
青海卫视,http://61.157.139.15:9901/tsfile/live/2402_1.m3u8
靖江新闻综合,http://120.76.248.139/live/bfgd/4200000282.m3u8
魅力足球,http://120.76.248.139/live/bfgd/4200000633.m3u8
魅力足球,http://146.56.165.66:7788/TVOD/5000000011000031207/bestzb/index.m3u8
鹤岗新闻综合,http://39.134.65.106/PLTV/88888888/224/3221226043/1.m3u8?
鹤岗新闻综合,http://39.134.65.106/PLTV/88888888/224/3221226073/1.m3u8?
黎城综合,http://111.53.96.67:8081/live/1/index.m3u8
黎城综合,http://111.53.96.67:8081/live/1/index.m3u8?%E5%85%B3%E6%B3%A8%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7[%E6%99%B4%E5%9B%AD]
黑莓动画,http://36.105.100.208:35455/itv/1000000004000021734.m3u8?cdn=ystenlive
黑莓动画,http://39.134.65.106/PLTV/88888888/224/3221225529/1.m3u8?
黑莓动画,http://39.134.64.87:6610/PLTV/88888888/224/3221225662/index.m3u8?IASHttpSessionId=
黑莓电影,http://146.56.165.66:7788/TVOD/2000000003000000001/hnbblive/index.m3u8
黑莓电影,http://36.105.100.208:35455/itv/1000000004000019624.m3u8?cdn=ystenlive
黑莓电影,http://39.134.65.106/PLTV/88888888/224/3221225681/1.m3u8?
黑龙江卫视,http://39.164.160.249:9901/tsfile/live/0143_1.m3u8
黑龙江卫视,http://58.57.40.22:9901/tsfile/live/1040_1.m3u8
黑龙江卫视,http://111.160.17.2:59901/tsfile/live/0001_36.m3u8
黑龙江少儿,http://112.99.193.34:9901/tsfile/live/1030_1.m3u8?key=txiptv&playlive=1&authid=0
黑龙江卫视,http://110.53.52.63:8888/newlive/live/hls/44/live.m3u8
黑龙江卫视,http://183.11.239.36:808/hls/48/index.m3u8
黑龙江少儿,http://39.134.67.108/PLTV/88888888/224/3221225979/1.m3u8
黑龙江少儿,http://39.134.65.106/PLTV/88888888/224/3221225979/1.m3u8?
黑龙江少儿,http://39.134.65.106/PLTV/88888888/224/3221226002/1.m3u8?
黑龙江影视,http://112.99.193.34:9901/tsfile/live/1025_1.m3u8?key=txiptv&amp;playlive=1&amp;authid=0
黑龙江影视,http://39.134.67.108/PLTV/88888888/224/3221225973/1.m3u8
黑龙江影视,http://39.134.65.106/PLTV/88888888/224/3221225971/1.m3u8?
黑龙江影视,http://39.134.65.106/PLTV/88888888/224/3221225973/1.m3u8?
黑龙江文体,http://112.99.193.34:9901/tsfile/live/1022_1.m3u8?
黑龙江文体,http://39.134.65.106/PLTV/88888888/224/3221225965/1.m3u8?
黑龙江文体,http://39.134.65.106/PLTV/88888888/224/3221226012/1.m3u8?
黑龙江新闻,http://112.99.193.34:9901/tsfile/live/1024_1.m3u8?
黑龙江新闻法治,http://112.99.193.34:9901/tsfile/live/1028_1.m3u8?key=txiptv&amp;playlive=1&amp;authid=0
黑龙江都市,http://112.99.193.34:9901/tsfile/live/1027_1.m3u8?key=txiptv&amp;playlive=1&amp;authid=0
黑龙江都市,http://39.134.65.106/PLTV/88888888/224/3221225969/1.m3u8?
黑龙江都市,http://39.134.65.106/PLTV/88888888/224/3221225990/1.m3u8?
龙华卡通,http://122.117.71.103:8516/http/61.222.53.250:8068/hls/14/80/cstv14.m3u8
龙华戏剧,http://122.117.71.103:8533/http/61.222.53.250:8068/hls/13/80/cstv13.m3u8
龙华戏剧,http://122.117.71.103:8533/龙华戏剧.m3u8
龙华戏剧,http://122.117.71.103:8533/http/61.222.53.250:8081/hls/75/817/ch59.m3u8
龙华洋片,http://50.7.234.10:8278/lunghuawestern_twn/playlist.m3u8?tid=MC1C3944472239444722&ct=19226&tsum=99c0c7c82e2fc48b16605865c3eaeb82
龙华电影,http://37.27.111.214:8080/live/19/hls.m3u8
龙华电影,http://122.117.71.103:8555/http/61.222.53.250:8068/hls/10/80/cstv10.m3u8
龙华电影,http://122.117.71.103:8555/龙华电影.m3u8
@@ -600,6 +644,7 @@ CCTV-14 少儿,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLT
CCTV-15 音乐,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226476/index.m3u8
CCTV-16 奥林匹克,http://[2409:8087:1a01:df::4077]:80/PLTV/88888888/224/3221225893/index.m3u8
CCTV-17 农业农村,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225765/index.m3u8
CCTV-2 财经,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226540/index.m3u8
CCTV-3 综艺,http://[2409:8087:1a01:df::4077]:80/PLTV/88888888/224/3221225799/index.m3u8
CCTV-4 中文国际,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226428/index.m3u8
CCTV-5 体育,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226019/index.m3u8
@@ -609,32 +654,37 @@ CCTV-8 电视剧,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/P
CCTV-9 纪录,http://[2409:8087:1a01:df::4077]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225734/index.m3u8
CCTV1,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225642/2/index.m3u8
CCTV1,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225501/2/index.m3u8
CCTV10,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225636/2/index.m3u8
CCTV1,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225618/2/index.m3u8
CCTV10,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225627/2/index.m3u8
CCTV12,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225637/index.m3u8
CCTV12,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225629/2/index.m3u8
CCTV12,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225637/2/index.m3u8
CCTV12,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225495/2/index.m3u8
CCTV12,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225637/2/index.m3u8
CCTV15,http://[2409:8087:1a01:df::4033]:80/TVOD/88888888/224/3221226127/main.m3u8
CCTV17,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225909/2/index.m3u8
CCTV17,http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225708/main.m3u8
CCTV17,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225909/2/index.m3u8
CCTV17,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225908/2/index.m3u8
CCTV2,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225619/2/index.m3u8
CCTV2,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225643/index.m3u8
CCTV2,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225500/2/index.m3u8
CCTV3,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225634/2/index.m3u8
CCTV3,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225647/2/index.m3u8
CCTV3,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225634/index.m3u8
CCTV3,http://[2409:8087:1a01:df::4041]:80/TVOD/88888888/224/3221225799/main.m3u8
CCTV4,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225621/2/index.m3u8
CCTV4,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225621/index.m3u8
CCTV5,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225633/index.m3u8
CCTV5+,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225649/2/index.m3u8
上海纪实,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225655/index.m3u8
东北热剧,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8
东南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8
东南卫视,http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225950/main.m3u8
东南卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225585/index.m3u8?fmt=ts2hls
东方卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8
东方卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225489/2/index.m3u8
东方卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225658/2/index.m3u8
东方卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225659/2/index.m3u8
东方卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225659/index.m3u8
北京卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8
北京卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225674/2/index.m3u8
北京卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225674/index.m3u8
北京卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225673/2/index.m3u8
北京卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225600/2/index.m3u8
北京卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225673/2/index.m3u8
北京卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225674/index.m3u8
吉林卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8
咪咕,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221226240/2/index.m3u8
哒啵赛事,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225675/index.m3u8
@@ -642,9 +692,9 @@ CCTV5+,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225649/2
天津卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8
天津卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225698/2/index.m3u8
天津卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225739/2/index.m3u8
天津卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225698/index.m3u8
天津卫视,http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225972/main.m3u8
天津卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225485/2/index.m3u8
天津卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225698/index.m3u8
宁夏卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225726/2/index.m3u8
安徽卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8
山东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8
@@ -656,23 +706,25 @@ CCTV5+,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225649/2
旅游卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221226212/index.m3u8?fmt=ts2hls
梨园,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225581/2/index.m3u8
欢乐剧场,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8
武术世界,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225508/2/index.m3u8
江苏卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8
江西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8
江西卫视,http://[2409:8087:1a01:df::4027]:80/TVOD/88888888/224/3221225935/main.m3u8
江西卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225492/index.m3u8?fmt=ts2hls
河北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8
河北卫视,http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225961/main.m3u8
河南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8
浙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8
浙江卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225703/2/index.m3u8
浙江卫视,http://[2409:8087:1a01:df::4043]:80/TVOD/88888888/224/3221225959/main.m3u8
浙江卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225491/2/index.m3u8
浙江卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225703/index.m3u8
浙江卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225744/2/index.m3u8
海南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8
海南卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225722/2/index.m3u8
深圳卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8
深圳卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225598/index.m3u8?fmt=ts2hls
湖北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8
湖南卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8
湖南卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225704/2/index.m3u8
甘肃卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225724/2/index.m3u8
睛彩竞技,http://[2409:8087:1a01:df::4061]:80/TVOD/88888888/224/3221225899/main.m3u8
睛彩篮球,http://[2409:8087:1a01:df::4055]:80/TVOD/88888888/224/3221225901/main.m3u8
精品体育,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225709/2/index.m3u8
@@ -681,9 +733,8 @@ CCTV5+,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225649/2
纪实科教,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8
西藏卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225723/2/index.m3u8
贵州卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8
贵州卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225728/2/index.m3u8
贵州卫视,http://[2409:8087:1a01:df::4030]:80/TVOD/88888888/224/3221225974/main.m3u8
贵州卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225483/2/index.m3u8
贵州卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225483/index.m3u8?fmt=ts2hls
超级体育,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8
超级体育,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225622/2/index.m3u8
超级电影,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8
@@ -695,9 +746,9 @@ CCTV5+,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225649/2
金牌综艺,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8
金鹰纪实,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225595/index.m3u8?fmt=ts2hls
陕西卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225729/2/index.m3u8
青海卫视,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888910/224/3221225484/index.m3u8?fmt=ts2hls
鹤岗新闻综合,http://[2409:8087:1a01:df::4059]:80/TVOD/88888888/224/3221226073/main.m3u8
黑莓电影,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225764/2/index.m3u8
黑莓电影,http://[2409:8087:3869:8021:1001::e5]:6610/PLTV/88888888/224/3221225769/2/index.m3u8
黑龙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8
黑龙江文体,http://[2409:8087:1a01:df::4025]:80/TVOD/88888888/224/3221225965/main.m3u8
黑龙江都市,http://[2409:8087:1a01:df::4055]:80/TVOD/88888888/224/3221225969/main.m3u8