Compare commits

..

13 Commits

Author SHA1 Message Date
Liu 1ca1dc961e 更新线路
南风线路:v20250728
潇洒线路:v07.28(11)
2025-07-28 19:28:34 +08:00
Liu 905c84968b 更新线路
PG线路:20250727-1231
2025-07-27 15:12:56 +08:00
Liu bb920b4754 更新线路
整体线路:v20250726
潇洒线路:v07.27(11)
2025-07-27 15:04:33 +08:00
Liu d622b25c15 更新线路
潇洒线路:v07.26.1
南风线路:v20250726
2025-07-26 15:03:38 +08:00
Liu d8dcb3b0df 更新线路
潇洒线路:v07.25.4
PG线路:20250725-1527
2025-07-25 19:16:05 +08:00
Liu 5b3f6879d0 更新线路
PG线路:20250725-1146
2025-07-25 12:01:27 +08:00
Liu db9615a2db 更新线路
整体线路:v20250724
南风线路:v20250724
潇洒线路:v07.25.2
2025-07-25 10:17:18 +08:00
Liu 35ce9e10af 更新线路
PG线路:20250723-1908
2025-07-24 14:10:52 +08:00
Liu 993f56c921 更新线路
整体线路:v20250723
南风线路:v20250724
潇洒线路:v07.24.3
2025-07-24 14:00:50 +08:00
Liu 4b7f02622a 更新线路
南风线路:v07.21
潇洒线路:v07.21.3
2025-07-23 00:24:42 +08:00
Liu 4f8e42c1ac 更新线路
潇洒线路:v07.20.1
2025-07-20 15:02:20 +08:00
Liu 2f0c6cbad4 更新线路
整体线路:v20250718
南风线路:v20250718
潇洒线路:v07.18.2
2025-07-19 00:02:26 +08:00
Liu 6498218406 更新线路
整体线路:v20250716
南风线路:07.17
潇洒线路:v07.17.3
2025-07-18 01:03:55 +08:00
86 changed files with 18659 additions and 5168 deletions

View File

@ -199,6 +199,7 @@
}
},
{"key":"Guanying","name":"观影|网盘|磁力","type":3,"api":"csp_Guanying","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://www.gying.net$$$noproxy$$$1$$$./lib/guanying.txt$$$GUANYING"},
{"key":"FourKZN","name":"4K指南|网盘|磁力","type":3,"api":"csp_FourKZN","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://xuexizhinan.com/$$$noproxy$$$1$$$./lib/4kzn.txt$$$4KZN"},
{"key":"FourKFM","name":"4K影库|网盘|磁力","type":3,"api":"csp_FourKFM","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://4kfm.com/$$$noproxy$$$1$$$./lib/4kfm.txt$$$4KFM"},
{"key":"校长影视","name":"校长影视|网盘","type":3,"api":"csp_XiaoZhang", "quickSearch":1, "changeable":1, "filterable":1, "timeout":60,"ext":"./lib/tokenm.json$$$https://xzyshd.com$$$proxy$$$1"},
{"key":"Wogg","name":"玩偶哥哥|网盘","type":3,"api":"csp_Wogg","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://wogg.888484.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$WOGG"},

View File

@ -67,10 +67,10 @@
{"key":"Local","name":"本地","type":3,"api":"csp_Local"},
{"key":"WebDAV","name":"WebDAV[jar]","type":3,"api":"csp_WebDAV","searchable":1,"filterable":1,"changeable":1,"timeout":60,
"playerType": 2,
"ext":"./lib/webdav.example.json"},
"ext":"./lib/webdav.json"},
{"key":"AList","name":"网盘|Alist[jar]","type":3,"api":"csp_AList","searchable":1,"filterable":1,"changeable":1,"timeout":60,
"playerType": 2,
"ext":"./lib/alistjar.example.json"},
"ext":"./lib/alistjar.json"},
{"key":"PushShare","name":"我的资源分享","type":3, "api":"csp_PushShare","searchable":1,"quickSearch":1, "changeable":1, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/pushshare.txt$$$db$$$1",
"style": {
"type": "list",
@ -131,13 +131,13 @@
"ratio": 1.1
}
},
{"key":"PikPakShare","name":"PikPak分享","type":3,"api":"csp_PikPakShare","searchable":1,"quickSearch":1, "changeable":1, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/pikpakclass.json$$$./lib/pikpakclass.json.db.gz",
{"key":"PikPakShare","name":"PikPak分享","type":3,"api":"csp_PikPakShare","searchable":1,"quickSearch":1, "changeable":1, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/pikpakclass.json$$$./lib/pikpakclass.json.txt.gz",
"style": {
"type": "list",
"ratio": 1.1
}
},
{"key":"SambaShare","name":"Samba分享","type":3,"api":"csp_SambaShare","searchable":0,"quickSearch":0, "changeable":0, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/sambashare.template.txt"},
{"key":"SambaShare","name":"Samba分享","type":3,"api":"csp_SambaShare","searchable":0,"quickSearch":0, "changeable":0, "filterable":0, "timeout":60, "ext":"./lib/tokenm.json$$$./lib/sambashare.txt"},
{
"key": "FirstAid",
"name": "🚑 急救知识 ",
@ -199,6 +199,7 @@
}
},
{"key":"Guanying","name":"观影|网盘|磁力","type":3,"api":"csp_Guanying","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$https://www.gying.net$$$noproxy$$$1$$$./lib/guanying.txt$$$GUANYING"},
{"key":"FourKZN","name":"4K指南|网盘|磁力","type":3,"api":"csp_FourKZN","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://xuexizhinan.com/$$$noproxy$$$1$$$./lib/4kzn.txt$$$4KZN"},
{"key":"FourKFM","name":"4K影库|网盘|磁力","type":3,"api":"csp_FourKFM","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://4kfm.com/$$$noproxy$$$1$$$./lib/4kfm.txt$$$4KFM"},
{"key":"校长影视","name":"校长影视|网盘","type":3,"api":"csp_XiaoZhang", "quickSearch":1, "changeable":1, "filterable":1, "timeout":60,"ext":"./lib/tokenm.json$$$https://xzyshd.com$$$proxy$$$1"},
{"key":"Wogg","name":"玩偶哥哥|网盘","type":3,"api":"csp_Wogg","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://wogg.888484.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$WOGG"},

Binary file not shown.

View File

@ -1 +1 @@
8a3a79e39b2d2926a0f67bafcaad3baf
213184e84baa339b7858108368d7d82f

Binary file not shown.

View File

@ -1 +1 @@
f9197036a0cc465e839547f1ee5ccd37
6756a20c0bab5e28b16c17299a5d3b9c

View File

@ -11,17 +11,17 @@
"vip_thread_limit_night":"19-23=10",
"vod_flags":"4kz|auto",
"quark_thread_limit":32,
"quark_thread_limit_night":"19-23=10",
"quark_thread_limit_night":"19-23=8",
"quark_is_guest":false,
"quark_vip_thread_limit":32,
"quark_vip_thread_limit_night":"19-23=10",
"quark_vip_thread_limit_night":"19-23=8",
"quark_flags":"4kz|auto",
"uc_thread_limit":10,
"uc_is_vip":false,
"uc_vip_thread_limit":10,
"uc_flags":"4kz|auto",
"uc_thread_limit_night":"19-23=10",
"uc_vip_thread_limit_night":"19-23=10",
"uc_thread_limit_night":"19-23=8",
"uc_vip_thread_limit_night":"19-23=8",
"thunder_thread_limit":2,
"thunder_is_vip":false,
"thunder_vip_thread_limit":2,

View File

@ -11,17 +11,17 @@
"vip_thread_limit_night":"19-23=10",
"vod_flags":"4kz|auto",
"quark_thread_limit":32,
"quark_thread_limit_night":"19-23=10",
"quark_thread_limit_night":"19-23=8",
"quark_is_guest":false,
"quark_vip_thread_limit":32,
"quark_vip_thread_limit_night":"19-23=10",
"quark_vip_thread_limit_night":"19-23=8",
"quark_flags":"4kz|auto",
"uc_thread_limit":10,
"uc_is_vip":false,
"uc_vip_thread_limit":10,
"uc_flags":"4kz|auto",
"uc_thread_limit_night":"19-23=10",
"uc_vip_thread_limit_night":"19-23=10",
"uc_thread_limit_night":"19-23=8",
"uc_vip_thread_limit_night":"19-23=8",
"thunder_thread_limit":2,
"thunder_is_vip":false,
"thunder_vip_thread_limit":2,

BIN
PG/pg.jar

Binary file not shown.

View File

@ -1 +1 @@
7840d0b61f9641a47728e3a92020f35a
24ec7cfadef5e6b5b20da4dea8520364

View File

@ -1,5 +1,5 @@
# tvboxtg
#
整体更新25.07.14
整体更新25.07.26
#
The resources are sourced from the internet and are only used for learning purposes. Please delete them yourself 24 hours after using them for learning.

Binary file not shown.

View File

@ -9,36 +9,39 @@
{"key":"csp_Gz360","name":"🍉瓜子","type":3,"api":"csp_Gz360","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_LiteApple","name":"🍎苹果","type":3,"api":"csp_LiteApple","searchable":1,"quickSearch":1,"filterable":1},
{"key":"巧技二","name":"💢聚搜┃仅搜索","type":3,"api":"csp_qiao2","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i79425739i7jghj118797l4hj840gi18633331l4708g2h7145403549g44l8ii56i187681hkjj3hhgh1ih3l32j250lk1k786lj20j468hk3hli4l46gig4i3g7g2722328j0136h01i7g5183k22k7gg3i72hk81gl8k9839kl7i0707"},
{"key":"天天","name":"💢天天","type":3,"api":"csp_TTian","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg09397919456493i0h44j8681highi4"},
{"key":"热播","name":"💢热播","type":3,"api":"csp_TTian","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939791h1l3888jig44gi291li"},
{"key":"追剧","name":"💢追剧","type":3,"api":"csp_TTian","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939791h1l2681i6g94li291li"},
{"key":"lanyingys","name":"💢橘子","type":3,"api":"csp_Qiji","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939795i0678i481k40hi2i3ghlg840i9lj166700g1449g3k5244k2017h35698h4739ih31117kigil3k02hl2jk6i5155ih9kkgl311gl37g240g85111ggg2"},
{"key":"huomaoys","name":"💢火猫","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939790i413gi484k8058896highi4414h68l7g6hk8qiaojig9k2k289l9ik807i213k5j602"},
{"key":"yizys","name":"💢驿站","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i7942403h83i2h945858hljhji148i18k2837535112l2qiaojik9075l17028i49g192419i8g3245h3j1l9gi02h6k7732650h3h09jkg759j65hj39l50347k3gj97l4g12l7h6418h6k9j04l26i1glgj3631973hh280lkihjh"},
{"key":"永夜","name":"💢永夜","type":3,"api":"csp_Qiji","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i794240208hi3g05l8181highj909i7i7282k425j21ggg13i630l378272k58l71i2h42l18g1h9glg433jll14i6071h6g5k8gj169138kl3kll1j"},
{"key":"趣看","name":"💢趣看","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i7942463j9j9jg1499j87l9g9i413il8gqiaoji20g7g4919j3g019296lk9351hh3k5gg38lj0754il3jg"},
{"key":"公共","name":"💢公共","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i7942463ji4qiaojijjh456889il6k6i35kj995h4j18li7kl2870klhg8hi647j5707k4ki7ig6953kj"},
{"key":"主角","name":"💢主角","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i794247258k9jh6598585l3g6ij13il8g20g9qiaoji8j9i9k1g3k90h7i507i213k5j602"},
{"key":"kafeiys","name":"💢狂风","type":3,"api":"csp_Qiji","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i7942522k849kg4499i9hl1k5ik48i38l292l1l4l1klgl41255091i8313k2ik478h8j751kh28kh9gk56l3k874684ll3h7j9k83l9034li7lhi5g45k8k3j6hkk760276g8h5h295i9jk7597177g3kk7g3hh79ili"},
{"key":"天天","name":"⛅天天","type":3,"api":"csp_TTian","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg09397919456493i0h44j8681highi4"},
{"key":"热播","name":"♨热播","type":3,"api":"csp_TTian","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939791h1l3888jig44gi291li"},
{"key":"追剧","name":"✈追剧","type":3,"api":"csp_TTian","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939791h1l2681i6g94li291li"},
{"key":"巧技二","name":"💢聚搜┃仅搜索","type":3,"api":"csp_qiao2","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i79425739i7jghj118797l4hj840gi18633331l4708g2h7145403549g44l8ii56i187681hkjj3hhgh1ih3l32j250lk1k786lj20j468hk3hli4l46gig4i3g7g2722328j0136h01i7g5183k22k7gg3i72hk81gl8k9839kl7i0707"},
{"key":"lanyingys","name":"🍊橘子","type":3,"api":"csp_Qiji","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939795i0678i481k40hi2i3ghlg840i9lj166700g1449g3k5244k2017h35698h4739ih31117kigil3k02hl2jk6i5155ih9kkgl311gl37g240g85111ggg2"},
{"key":"yizys","name":"🚗驿站","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i7942403h83i2h945858hljhji148i18k2837535112l2qiaojik9075l17028i49g192419i8g3245h3j1l9gi02h6k7732650h3h09jkg759j65hj39l50347k3gj97l4g12l7h6418h6k9j04l26i1glgj3631973hh280lkihjh"},
{"key":"huomaoys","name":"😺火猫","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939790i413gi484k8058896highi4414h68l7g6hk8qiaojig9k2k289l9ik807i213k5j602"},
{"key":"趣看","name":"🥽趣看","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i7942463j9j9jg1499j87l9g9i413il8gqiaoji20g7g4919j3g019296lk9351hh3k5gg38lj0754il3jg"},
{"key":"公共","name":"🌈公共","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i7942463ji4qiaojijjh456889il6k6i35kj995h4j18li7kl2870klhg8hi647j5707k4ki7ig6953kj"},
{"key":"主角","name":"🍃主角","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i794247258k9jh6598585l3g6ij13il8g20g9qiaoji8j9i9k1g3k90h7i507i213k5j602"},
{"key":"云云","name":"☁云云","type":3,"api":"csp_Qiji","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i79425h2384j4g949j899hll9990i9kjl6l740h1342hjlg1848401g8610h9995i998j351gl38kklkj1hkhll757010k7hji6h377ih37k060g35161jhl3i5h0l2702g7299452l4297k5697g5390lk6935k2i9g48l8j2kh27l1g014k7j9475g8"},
{"key":"csp_Wwys","name":"👩‍🌾农民","type":3,"api":"csp_Wwys","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.wwgz.cn"},
{"key":"csp_SaoHuo","name":"🔥骚火","type":3,"api":"csp_SaoHuo","playerType":2,"searchable":1,"quickSearch":1,"filterable":1,"ext":"https://shdy5.us"},
{"key":"csp_FourK","name":"🌋绝对","type":3,"api":"csp_FourK","playerType":"2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.4kvm.tv"},
{"key":"csp_Qiyou","name":"🦌奇优","type":3,"api":"csp_Qiyou","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Jiaozi","name":"🥣饺子","type":3,"api":"csp_Jiaozi","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Czsapp","name":"🏭厂长","type":3,"api":"csp_Czsapp","playerType":2,"searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.czzymovie.com/"},
{"key":"农民","name":"👩‍🌾农民","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/农民影视.json"},
{"key":"骚火","name":"🔥骚火","type":3,"api":"csp_XBPQ","ext":{"简介":"p_txt show_part\">&&</p>","副标题":"v_note\">&&</div>","分类url":"https://saohuody.com/list/{cateId}-{catePg}.html;;d1","分类":"国产剧$12#港剧$13#台剧$14#日剧$15#韩剧$16#美剧$17#海外$18#泰剧$19#动作$5#喜剧$6#爱情$7#科幻$8#恐怖$9#剧情$10#战争$11#动画$33"}},
{"key":"csp_Tvyb","name":"☁TVB云播","type":3,"api":"csp_Tvyb","playerType":2,"searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_KmeiJu","name":"🍐鸭梨","type":3,"api":"csp_KmeiJu","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_baibai","name":"💯白白","type":3,"searchable":1,"quickSearch":1,"api":"csp_SuBaiBai","ext":"https://www.subaibai.com"},
{"key":"csp_Quanwk","name":"👀全看","type":3,"api":"csp_Quanwk","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.91qkw.com"},
{"key":"可可","name":"☕️可可","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/可可影视.json"},
{"key":"剧圈圈","name":"⭕剧圈圈","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/剧圈圈.json","click":"document.getElementById('playleft').children[0].contentWindow.document.getElementById('start').click()"},
{"key":"影视大全","name":"🎞影视大全","type":3,"api":"csp_XBPQ","ext":{"分类url":"https://www.iysdq.cc/vodshow/{cateId}-{area}-------{catePg}---.html","分类":"电影$1#电视剧$2#综艺$3#动漫$4#短剧$5"}},
{"key":"永乐","name":"🍰永乐","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"ext":{"请求头":"User-Agent$MOBILE_UA","编码":"UTF-8","分类":"电影$1#电视剧$2#综艺$3#动漫$4","类型":"动作片$6#喜剧片$7#爱情片$8#科幻片$9#奇幻片$10#恐怖片$11#剧情片$12#战争片$20#动画片$26#悬疑片$22#冒险片$23#犯罪片$24#惊悚片$45#歌舞片$46#灾难片$47#网络片$48||国产剧$13#港台剧$14#日剧$15#韩剧$33#欧美剧$16#泰剧$34#新马剧$35#其他剧$25||内地综艺$27#港台综艺$28#日本综艺$29#韩国综艺$36#欧美综艺$30#新马泰综艺$37#其他综艺$38||国产动漫$31#日本动漫$32#韩国动漫$39#港台动漫$40#新马泰动漫$41#欧美动漫$42#其他动漫$43","分类url":"https://www.ylys.tv/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html"}},
{"key":"面包","name":"🎁面包","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"ext":{"请求头":"User-Agent$MOBILE_UA","编码":"UTF-8","分类url":"https://v.aiwule.com/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html","分类":"电影$20#电视剧$21#动漫$23#综艺$22#短剧$47","简介":"简介:&&"}},
{"key":"西瓜","name":"🍉西瓜","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"ext":{"主页url":"https://sszzyy.com/","分类url":"https://sszzyy.com/index.php/vod/show/id/{cateId}/page/{catePg}.html","分类":"电影$20#剧集$37","标题":"title=\"*\">&&</div>","图片":"data-original=\"&&\"","链接":"href=\"&&\"","播放数组":"content_playlist&&</ul>","播放列表":"<a&&</a>","播放标题":">&&</a>","跳转播放链接":"src=\"&&\"","线路数组":"class=\"titleName cr3 swiper-slide&&</a>","线路标题":">&&</a>"}},
{"key":"百思派","name":"💯百思派","type":3,"api":"csp_XBPQ","searchable":1,"quickSearch":1,"filterable":1,"click":"document.querySelector(\"#playleft iframe\").contentWindow.document.querySelector(\"#start\").click();","ext":{"分类url":"https://www.bestpipe.cn/vodshow/{cateId}-{area}-------{catePg}---.html","分类":"电影$20#剧集$21#短剧$24#综艺$23#动漫$22"}},
{"key":"csp_Lkdy","name":"🏔️来看","type":3,"api":"csp_Lkdy","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Fantuan","name":"🍙饭团","type":3,"api":"csp_Fantuan","searchable":1,"quickSearch":1,"filterable":1,"click":"document.querySelector(\"#playleft iframe\").contentWindow.document.querySelector(\"#start\").click();","ext":"https://www.fantuan.vip"},
{"key":"ZXZJ","name":"🏠在线","api":"csp_Zxzj","type":3,"searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i7942463j9j9jgg449698khhh845ki38473"},
{"key":"csp_Jiaozi","name":"🥣饺子","type":3,"api":"csp_Jiaozi","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Ddys","name":"📺低端","type":3,"api":"csp_Ddys","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Kuaikan","name":"👀快看","type":3,"api":"csp_Kuaikan","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Ikanbot","name":"👾Ikanbot","type":3,"api":"csp_Ikanbot","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Jianpian","name":"🧲荐片","type":3,"api":"csp_Jianpian","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_xlys","name":"🧲修罗","type":3,"api":"csp_xlys","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://v.xlys.ltd.ua"},
{"key":"csp_Lkdy","name":"🏔️来看","type":3,"api":"csp_Lkdy","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://lkvod.com"},
{"key":"csp_Jianpian","name":"🧲荐片","type":3,"api":"csp_Jianpian","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/jianpian.json"},
{"key":"csp_xlys","name":"🧲修罗","type":3,"api":"csp_xlys","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://xl01.com.de/"},
{"key":"csp_New6v","name":"🧲新6V","type":3,"api":"csp_New6v","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_DyGod","name":"🧲电影天堂","type":3,"api":"csp_DyGod","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_QnMp4","name":"🧲七妹","type":3,"api":"csp_QnMp4","searchable":1,"quickSearch":1,"filterable":1},
@ -46,14 +49,12 @@
{"key":"csp_MeijuMi","name":"🧲美剧迷","type":3,"api":"csp_MeijuMi","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.meijumi.net/"},
{"key":"csp_BLSGod","name":"🧲80S影视","type":3,"api":"csp_BLSGod","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_SP360","name":"💘360","type":3,"api":"csp_SP360","searchable":1,"quickSearch":1,"filterable":1,"changeable":1},
{"key":"csp_Dm84","name":"🚌动漫巴士","type":3,"api":"csp_Dm84","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://dm84.net"},
{"key":"csp_Ysj","name":"📮异世界","type":3,"api":"csp_Ysj","searchable":1,"quickSearch":1,"filterable":1},
{"key":"樱花","name":"💮樱花","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/樱花动漫.json"},
{"key":"动漫巴士","name":"🚌动漫巴士","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":1,"ext":"./json/动漫巴士.json"},
{"key":"豆瓣","name":"🚀豆瓣预告","type":3,"api":"csp_YGP","playerType":2,"searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_AppXY","name":"🎀️星牙短剧","type":3,"api":"csp_AppXY","searchable":1,"quickSearch":1,"filterable":1},
{"key":"csp_Kanqiu","name":"⚾看球","type":3,"api":"csp_Kanqiu","searchable":1,"quickSearch":1,"changeable":0,"gridview":3,"style":{"type":"list"}},
{"key":"csp_Kugou","name":"🐶酷狗","type":3,"api":"csp_Kugou","playerType":2,"ext":{"classes":[{"type_name":"酷狗","type_id":"kugou"}]}},
{"key":"csp_BookTing","name":"📚听书","type":3,"playerType":2,"api":"csp_BookTing","searchable":0,"ext":"https://m.ting275.com","style":{"type":"rect","ratio":1.333}},
{"key":"csp_FirstAid","name":"🚑急救教学","type":3,"api":"csp_FirstAid","searchable":0,"quickSearch":0,"style":{"type":"rect","ratio":3.8}},
{"key":"玩偶gg","name":"👽玩偶","type":3,"api":"csp_Wogg","searchable":1,"changeable":0,"ext":{"commonConfig":"./json/peizhi.json","siteUrl":"https://wogg.xxooo.cf","filter":"./json/wogg.json"}},

View File

@ -12,16 +12,16 @@
{
"share_index": "夸克",
"share_name": "FM影视",
"share_id": "6caeac2e2b2c"
"share_id": "90ee86fd1738"
},
{
"share_index": "UC",
"share_name": "FM影视",
"share_id": "7227ad1d5e744"
"share_id": "9a79b2b1c5804"
},
{
"share_index": "UC",
"share_name": "影视仓",
"share_id": "b437317346a14"
}
]
]

522
南风/json/jianpian.json Normal file
View File

@ -0,0 +1,522 @@
{
"0": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
],
"1": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
],
"2": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
],
"3": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
],
"4": [
{
"key": "area",
"name": "地区",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "国产",
"v": "1"
},
{
"n": "中国香港",
"v": "3"
},
{
"n": "中国台湾",
"v": "6"
},
{
"n": "美国",
"v": "5"
},
{
"n": "韩国",
"v": "18"
},
{
"n": "日本",
"v": "2"
}
]
},
{
"key": "year",
"name": "年份",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "2025",
"v": "107"
},
{
"n": "2024",
"v": "119"
},
{
"n": "2023",
"v": "153"
},
{
"n": "2022",
"v": "101"
},
{
"n": "2021",
"v": "118"
},
{
"n": "2020",
"v": "16"
},
{
"n": "2019",
"v": "7"
},
{
"n": "2018",
"v": "2"
},
{
"n": "2017",
"v": "3"
},
{
"n": "2016",
"v": "22"
}
]
},
{
"key": "by",
"name": "排序",
"value": [
{
"n": "热门",
"v": "hot"
},
{
"n": "更新",
"v": "updata"
},
{
"n": "评分",
"v": "rating"
}
]
}
]
}

View File

@ -20,5 +20,5 @@
"tgPic": "true",
//tgsou
//jar
"exeMd5": "V05WYEYFDUnXwHjb/BtVpOg+HL1pVv9BhRfj/hirG0YINkMeLq4VL1LyH7XHwcNCnLXMoa021sQZ6xtuWVh6ukL6CB1zKlxyBZQrTBS7nVJ5o5OF9w5nFDhxiidyj2U3ctqa+Rmxt0jF6B3jwawMoaoLGhvfcwIPpUgGiC3I5RZ8YDtWZ7TAI2vXnCN97Mapergbad6vlfQ5r+NYMsoK1CkNMpxwiadd5hwaeVP+RPCuuBm1Krp8WvbxbabEPKc5xiRmFQVtMs/7YqaOIbU/fwfIttHqpJbfWl77OQASQJZpDOq9Z1Dsrhr1q5mMgF2vZCd660SJYIpk4nXjj+l2SL3uuhTiD6sYWBydG8Xzv3ukT3sme6ZoheVpxYe7ukcO8rBINi3BkKxSNnDV83jMGPXE/GKRKd7C3bZCaCQJClveYadmkzqogsFvfqbDL+LYIZ9MSJCMPikmYLAVeA=="
"exeMd5": "ubeoXWP83DY73dG7Or29czm5VwGxq/9YHQodehF30gUNWh+HJ31Kuq9YM4YsfiZenKQ/F3PelZgzcj1Sz0GjdfDT9ZjhpUTNExnB4ZHpLFGCSK2dkODnA/k4pSu6OpPFiE1sUA0QDBVqDBkGsqfPOUeKCzXjzbM7CNLHjY1WSfVQOok2xsgyJ5Yo5L5v2iJ2eALUKIoer8glYB17U73hm8yAmWxwXPZfSXS2NpYElP/LsH0tRMXzg11ZmuU8yVGk92P2iXBOVhQZqySd1DjIZudUWaf625WI2v2Jhvw6MT7pMQ7Dx6vEBcq0bM2luQhhLeEVey10K0St+HaT+aUANn+y2g2mx0woDY1vhkhNvdL3vbregqIB/e2B1Niknj56uH+f8lpLtF19GI3zvhei58ruB+pVB3ahuVAaXBoUn+NP+NOyJePDAbPPZsjYmpuxWgRRoeJ/A6MZNfbyuw=="
}

View File

@ -1,72 +0,0 @@
{
"规则名": "农民影视",
"规则作者": "香雅情",
"请求头参数": "User-Agent$手机#accept$text/html#Referer$https://www.wwgz.cn",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://www.wwgz.cn",
"首页列表数组规则": "body&&.globalPicList",
"首页片单列表数组规则": "li:has(img)",
"首页片单是否Jsoup写法": "1",
"首页片单标题": ".sTit&&Text",
"首页片单链接": "a&&href",
"首页片单图片": "img&&data-echo||data-src||src",
"首页片单副标题": ".sBottom&&Text",
"首页片单链接加前缀": "https://www.wwgz.cn",
"首页片单链接加后缀": "",
"分类起始页码": "1",
"分类链接": "https://www.wwgz.cn/vod-list-id-{cateId}-pg-{catePg}-order--by-{by}-class--year-{year}-letter--area-{area}-lang-.html",
"分类名称": "电影&电视剧&综艺&动漫&短剧",
"分类名称替换词": "1&2&3&4&26",
"筛选数据": "ext",
"筛选子分类名称": "动作片&喜剧片&爱情片&科幻片&恐怖片&剧情片&战争片&惊悚片&奇幻片||国产剧&港台泰&日韩剧&欧美剧||空||动漫剧&动漫片",
"筛选子分类替换词": "5&6&7&8&9&10&11&16&17||12&13&14&15||空||18&19",
"筛选地区名称": "大陆&香港&台湾&美国&韩国&日本&泰国&新加坡&马来西亚&印度&英国&法国&加拿大&西班牙&俄罗斯&其它",
"筛选地区替换词": "*",
"分类截取模式": "1",
"分类列表数组规则": ".globalPicList&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": ".sTit&&Text",
"分类片单链接": "a&&href",
"分类片单图片": "img&&data-echo||data-src||src",
"分类片单副标题": ".sBottom&&Text",
"分类片单链接加前缀": "https://www.wwgz.cn",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机#Referer$https://www.wwgz.cn",
"search_url": "https://www.wwgz.cn/index.php?m=vod-search;post",
"sea_PtBody": "wd={wd}",
"search_mode": "1",
"sea_arr_rule": "#data_list&&li",
"sea_is_jsoup": "1",
"sea_pic": ".lazyload&&data-src",
"sea_title": ".sTit&&Text",
"sea_url": "a&&href",
"搜索片单副标题": ".sDes,-1&&Text",
"搜索片单链接加前缀": "https://www.wwgz.cn",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "https://live.52sf.ga/huya/",
"直接播放链接加后缀": "#isVideo=true#",
"直接播放直链视频请求头": "authority$ku.peizq.online#Referer$https://play.peizq.online",
"详情是否Jsoup写法": "1",
"类型详情": ".type-title&&Text",
"年代详情": "body&&span:contains(年代:)&&Text!年代:",
"地区详情": "",
"演员详情": "body&&.sDes:contains(主演:)&&Text!主演:",
"简介详情": ".detail-con&&p&&Text!简介:",
"线路列表数组规则": "#leftTabBox&&ul&&li",
"线路标题": "Text[替换:默认=>农民专线]",
"播放列表数组规则": "#leftTabBox&&.numList",
"选集列表数组规则": "li",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "1",
"选集链接加前缀": "https://www.wwgz.cn",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "1",
"手动嗅探视频链接关键词": ".mp4#.m3u8#item/video#video_mp4#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

View File

@ -1,81 +0,0 @@
{
"规则名": "动漫巴士",
"规则作者": "",
"请求头参数": "User-Agent$MOBILE_UA#Accept$text/html#accept-language$zh-CN,zh;q=0.8",
"网页编码格式": "UTF-8",
"图片是否需要代理": "0",
"是否开启获取首页数据": "1",
"首页推荐链接": "https://dm84.net",
"首页列表数组规则": "body&&.v_list",
"首页片单列表数组规则": "li",
"首页片单是否Jsoup写法": "1",
"分类起始页码": "1",
"分类链接": "https://dm84.net/list-{cateId}-{catePg}.html[firstPage=https://dm84.net/list-{cateId}.html]",
"分类名称": "国产动漫&日本动漫&欧美动漫&动漫电影",
"分类名称替换词": "1&2&3&4",
"筛选数据": {},
//"筛选数据": "ext",
//{cateId}
"筛选子分类名称": "",
"筛选子分类替换词": "",
//{class}
"筛选类型名称": "",
"筛选类型替换词": "*",
//{area}
"筛选地区名称": "",
"筛选地区替换词": "*",
//{year}
"筛选年份名称": "",
"筛选年份替换词": "*",
//{lang}
"筛选语言名称": "",
"筛选语言替换词": "*",
//{by}
"筛选排序名称": "时间&人气&评分",
"筛选排序替换词": "time&hits&score",
"分类截取模式": "1",
"分类列表数组规则": ".v_list&&li",
"分类片单是否Jsoup写法": "1",
"分类片单标题": "a&&title!在线观看",
"分类片单链接": "a&&href",
"分类片单图片": ".lazy&&data-bg",
"分类片单副标题": ".desc&&Text",
"分类片单链接加前缀": "https://dm84.net",
"分类片单链接加后缀": "",
"搜索请求头参数": "User-Agent$手机#Accept$text/html#accept-language$zh-CN,zh;q=0.8",
"搜索链接": "https://dm84.net/s-{wd}---------{SearchPg}.html",
"POST请求数据": "",
"搜索截取模式": "1",
"搜索列表数组规则": ".v_list&&li",
"搜索片单是否Jsoup写法": "1",
"搜索片单图片": ".lazy&&data-bg",
"搜索片单标题": "a&&title!在线观看",
"搜索片单链接": "a&&href",
"搜索片单副标题": ".desc&&Text",
"搜索片单链接加前缀": "https://dm84.net",
"搜索片单链接加后缀": "",
"链接是否直接播放": "0",
"直接播放链接加前缀": "",
"直接播放链接加后缀": "",
"直接播放直链视频请求头": "",
"详情是否Jsoup写法": "1",
"类型详情": "",
"年代详情": "",
"地区详情": "",
"演员详情": "",
"简介详情": ".intro&&-p&&Text",
"线路列表数组规则": ".play_from&&li",
"线路标题": "Text",
"播放列表数组规则": ".tab_content&&.play_list",
"选集列表数组规则": "a",
"选集标题链接是否Jsoup写法": "1",
"选集标题": "a&&Text",
"选集链接": "a&&href",
"是否反转选集序列": "1",
"选集链接加前缀": "https://dm84.net",
"选集链接加后缀": "",
"分析MacPlayer": "0",
"是否开启手动嗅探": "0",
"手动嗅探视频链接关键词": ".mp4#.m3u8#.flv#video/tos",
"手动嗅探视频链接过滤词": ".html#=http"
}

Binary file not shown.

View File

@ -1 +1 @@
6a22ba713de17cb619635cfeaa852574
1c916eff0d2974c00fa84cedc7bbb96d

Binary file not shown.

View File

@ -1 +1 @@
e6014003fed8064fd4b9e70c1201474e
c4be9b45a799beea1eb893a34e398e88

Binary file not shown.

View File

@ -1 +1 @@
9380c3fce40e11c07195c8a4af71c38c
5b026cba64692923fea7a9608ee5326b

View File

@ -20,7 +20,6 @@ CCTV5,http://182.150.23.74:808/hls/5/index.m3u8
CCTV5,http://120.238.94.10:9901/tsfile/live/1022_1.m3u8
CCTV5+,http://58.57.40.22:9901/tsfile/live/1005_1.m3u8
CCTV5+,http://36.105.100.208:35455/gaoma/cctv5p.m3u8
CCTV5+,http://www.douzhicloud.site:35455/gaoma/cctv5p.m3u8
CCTV5+,http://123.129.70.178:9901/tsfile/live/0016_1.m3u8
CCTV5+,https://piccpndali.v.myalicdn.com/audio/cctv5plus_2.m3u8
CCTV6,http://58.57.40.22:9901/tsfile/live/1006_1.m3u8
@ -29,7 +28,6 @@ CCTV6,http://58.17.48.228:808/hls/6/index.m3u8
CCTV6,http://60.29.124.66:6080/hls/17/index.m3u8
CCTV6,http://183.11.239.36:808/hls/94/index.m3u8
CCTV7,http://58.57.40.22:9901/tsfile/live/1007_1.m3u8
CCTV7,http://1b6467f415.iok.la:9931/tsfile/live/1027_1.m3u8
CCTV7,http://8.138.7.223/tv/cctv7.m3u8
CCTV7,http://58.221.214.82:9901/tsfile/live/0007_1.m3u8
CCTV8,http://218.3.138.25:1111/tsfile/live/1007_1.m3u8
@ -50,7 +48,6 @@ CCTV11,http://36.105.100.208:35455/gaoma/cctv11.m3u8
CCTV11,http://120.76.248.139/live/bfgd/4200000130.m3u8
CCTV11,https://piccpndali.v.myalicdn.com/audio/cctv11_2.m3u8
CCTV12,http://36.105.100.208:35455/gaoma/cctv12.m3u8
CCTV12,http://1b6467f415.iok.la:9931/tsfile/live/1032_1.m3u8
CCTV12,http://116.128.242.83:9901/tsfile/live/0013_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV12,http://123.129.70.178:9901/tsfile/live/0012_1.m3u8?key=txiptv&playlive=1&authid=0
CCTV13,http://58.57.40.22:9901/tsfile/live/1013_1.m3u8
@ -184,7 +181,6 @@ CCTV2024,https://p2.bdstatic.com/rtmp.liveshow.lss-user.baidubce.com/live/stream
农林卫视,http://112.46.105.20:8009/hls/27/index.m3u8
农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8
农林卫视,http://112.46.85.60:8009/hls/27/index.m3u8
农林卫视,http://124.116.183.146:9901/tsfile/live/1004_1.m3u8
青海卫视,http://58.57.40.22:9901/tsfile/live/1057_1.m3u8
青海卫视,http://120.238.94.10:9901/tsfile/live/1073_1.m3u8
青海卫视,http://58.19.43.46:9901/tsfile/live/1014_1.m3u8
@ -201,7 +197,6 @@ CCTV2024,https://p2.bdstatic.com/rtmp.liveshow.lss-user.baidubce.com/live/stream
山西卫视,http://m3u8.channel.wsrtv.com.cn/cms/videos/nmip-media/channellive/channel7/playlist.m3u8
深圳卫视,http://58.57.40.22:9901/tsfile/live/1036_1.m3u8
深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.m3u8
深圳卫视,http://124.116.183.146:9901/tsfile/live/0126_1.m3u8
深圳卫视,http://183.11.239.36:808/hls/45/index.m3u8
深圳卫视,http://182.150.23.74:808/hls/20/index.m3u8
四川卫视,http://58.57.40.22:9901/tsfile/live/1046_1.m3u8
@ -225,7 +220,6 @@ CCTV2024,https://p2.bdstatic.com/rtmp.liveshow.lss-user.baidubce.com/live/stream
延边卫视,http://gmxw.7766.org:808/hls/15/index.m3u8
云南卫视,http://58.57.40.22:9901/tsfile/live/1047_1.m3u8
云南卫视,http://36.32.174.67:60080/newlive/live/hls/45/live.m3u8
云南卫视,http://111.61.236.247:9081/hls/32/index.m3u8
云南卫视,http://cssbyd.imwork.net:8082/hls/36/index.m3u8
浙江卫视,http://58.57.40.22:9901/tsfile/live/1029_1.m3u8
浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8
@ -248,7 +242,6 @@ CCTV2024,https://p2.bdstatic.com/rtmp.liveshow.lss-user.baidubce.com/live/stream
内蒙古卫视,http://183.11.239.36:808/hls/60/index.m3u8
内蒙古卫视,http://120.76.248.139/live/bfgd/4200000110.m3u8
山东教育,https://test1.live.sdetv.com.cn/live/dianshizhibo/playlist.m3u8
香港卫视,http://zhibo.hkstv.tv/livestream/mutfysrq/playlist.m3u8
香港卫视,http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8
安多卫视,https://liveout.xntv.tv/a65jur/96iln2.m3u8
北京卫视,http://183.215.134.239:19901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0

View File

@ -53,6 +53,8 @@
"filterable": 1,
"ext": {
"site_urls": [
"https://www.wexwp.cc",
"https://wexwp.cc",
"https://www.2xiaopan.fun/",
"https://2xiaopan.fun/",
"https://www.2xiaoyun.fun/",
@ -166,7 +168,7 @@
},
{
"key": "csp_nongmin",
"name": "💯农民┃影视",
"name": "💯农民┃极速",
"type": 3,
"api": "csp_Wwys",
"searchable": 1,
@ -192,6 +194,29 @@
"api": "csp_AppGet",
"ext": "rP+4azM8YFgp3eAhyeALtUUEFpbkqmzGj2V5VZryxRbpkSjlsHbarRCZPOInvId4s3WK9rZ2YJsDy8NvMqQKQXowVmh33j+qD55VxmvMzzfiJ2fHkCRZg4+8NFWs+b1X"
},
{
"key": "幕启",
"name": "🌉幕启┃影视",
"type": 3,
"api": "csp_AppSy",
"ext": "iUYplHbim/qVptUBrzCuqk72erYn+xHvZVGawkGUOqtLGtiWlDcWpUagYzdfPYeECbG+IjVf7Mhz2ZqZ70k6X72tkUhQDNEpIN/XScTGlUE="
},
{
"key": "追忆",
"name": "🍯追忆┃影视",
"type": 3,
"api": "csp_AppSy",
"ext": "9rfWRaAx60J+W5F+j6agt6AHU3NkRl7m8WqfWIBU/MebSZgzY2wnsXwmAIMEYVqMzsnqr46bOn1q4JV/UJAKUVF6NUo2Xg8qcHgXrA63RWM="
},
{
"key": "麻花",
"name": "🌸麻花┃影视",
"type": 3,
"quickSearch": 1,
"searchable": 1,
"api": "csp_AppGet",
"ext": "rP+4azM8YFgp3eAhyeALtUUEFpbkqmzGj2V5VZryxRbpkSjlsHbarRCZPOInvId4s3WK9rZ2YJsDy8NvMqQKQXowVmh33j+qD55VxmvMzzesNDM87sUul1Ii8NbP2XB5"
},
{
"key": "QD4K",
"name": "🐷猪猪┃影视",
@ -209,7 +234,25 @@
"quickSearch": 1,
"searchable": 1,
"api": "csp_AppGet",
"ext": "Koog6uPyOjHNZh8eY8CgUL+XGp1zR8d/K2NE9Ls6xomS8zNeZA6OEFwcZ27Zy0ZH9i0JczXR1zmcv9qIihz837BdnQrvJfE8QEyUmS3qKxs="
"ext": "kzWGWFofGVJ3C/RF+lgwJ225/vdiYNl/bMUZBlrk0nrC8OB1JmokCpa08vXuGowW"
},
{
"key": "顾我",
"name": "🎫顾我┃影视",
"type": 3,
"quickSearch": 1,
"searchable": 1,
"api": "csp_AppGet",
"ext": "anMxhJnIDc1c2tyG/e37xUzar6eMUg8rOlemrnxifa3xApTYq401x7vVwbCRPlgADD7zoKQvVffdAwprrKeNlQ=="
},
{
"key": "大豆",
"name": "✅大豆┃影视",
"type": 3,
"quickSearch": 1,
"searchable": 1,
"api": "csp_AppGet",
"ext": "Qrf5S6Si5oF7dQyuv+Srh3uh0lT3z1Y7u59ip9hRVeUKFHSUUbLyGMREENFjE1N9FXjZ6Z7tiLWs6P15Ol/g5Po80zDNWJPEEoj/nv3Yelo="
},
{
"key": "海豚",
@ -231,23 +274,6 @@
"jar": "./jars/巧技.jar",
"ext": "7lj763gg402i79425739i7jghj118797l4hj840gi18633331l4708g2h7145403549g44l8ii56i187681hkjj3hhgh1ih3l32j250lk1k786lj20j468hk3hli4l46gig4i3g7g2722328j0136h01i7g5183k22k7gg3i72hk81gl8k9839kl7i0707"
},
{
"key": "追忆5",
"name": "💭追忆┃影视",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "csp_AppSy",
"playerType": 2,
"ext": "9rfWRaAx60J+W5F+j6agt6AHU3NkRl7m8WqfWIBU/MebSZgzY2wnsXwmAIMEYVqMzsnqr46bOn1q4JV/UJAKUVF6NUo2Xg8qcHgXrA63RWM="
},
{
"key": "幕启",
"name": "🌉幕启┃影视",
"type": 3,
"api": "csp_AppSy",
"ext": "iUYplHbim/qVptUBrzCuqk72erYn+xHvZVGawkGUOqtLGtiWlDcWpUagYzdfPYeECbG+IjVf7Mhz2ZqZ70k6X72tkUhQDNEpIN/XScTGlUE="
},
{
"key": "huomaoys",
"name": "🎬️火猫┃影视",
@ -281,6 +307,23 @@
"playerType": 2,
"ext": "7lj763gg402i7942463ji4qiaojijjh456889il6k6i35kj995h4j18li7kl2870klhg8hi647j5707k4ki7ig6953kj"
},
{
"key": "DAY",
"name": "🧵UPUP┃影视",
"type": 3,
"quickSearch": 1,
"searchable": 1,
"api": "./api/tt.py"
},
{
"key": "步步",
"name": "👟步步┃影视",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "./api/drpy2.min.js",
"ext": "./js/测试.js"
},
{
"key": "牛牛",
"name": "🍁牛牛┃影视",
@ -295,7 +338,8 @@
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "csp_AppXY"
"api": "csp_AppXY",
"ext": "https://xvapp.xingya.com.cn"
},
{
"key": "csp_baibai",
@ -322,15 +366,6 @@
"quickSearch": 1,
"api": "csp_Gz360"
},
{
"key": "步步",
"name": "👟步步┃影视",
"type": 3,
"searchable": 1,
"quickSearch": 1,
"api": "./api/drpy2.min.js",
"ext": "./js/ceshi.js"
},
{
"key": "csp_Jpys",
"name": "🥇金牌┃影视",
@ -379,10 +414,11 @@
},
{
"key": "push_agent",
"name": "⚠️接口开源免费,仅供测试,请测试完删除!",
"name": "🛴推送┃播放接口免费,请测试完删除处理",
"type": 3,
"api": "csp_Push",
"searchable": 0,
"searchable": 1,
"quickSearch": 1,
"ext": ""
}
],

View File

@ -29,7 +29,7 @@ class Spider(Spider):
def destroy(self):
pass
host='http://zero.mitotv.com'
host='http://ldys.sq1005.top'
headers = {
'User-Agent': 'okhttp/4.12.0',

218
小米/api/tt.py Normal file
View File

@ -0,0 +1,218 @@
import json
import random
import sys
from base64 import b64encode, b64decode
from concurrent.futures import ThreadPoolExecutor
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
did=self.getdid()
self.headers.update({'deviceId': did})
token=self.gettk()
self.headers.update({'token': token})
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host='http://12234.top'
headers = {
'User-Agent': 'okhttp/4.12.0',
'client': 'app',
'deviceType': 'Android'
}
def homeContent(self, filter):
data=self.post(f"{self.host}/api/v1/app/screen/screenType", headers=self.headers).json()
result = {}
cate = {
"类型": "classify",
"地区": "region",
"年份": "year"
}
sort={
'key':'sreecnTypeEnum',
'name': '排序',
'value':[{'n':'最新','v':'NEWEST'},{'n':'人气','v':'POPULARITY'},{'n':'评分','v':'COLLECT'},{'n':'热搜','v':'HOT'}]
}
classes = []
filters = {}
for k in data['data']:
classes.append({
'type_name': k['name'],
'type_id': k['id']
})
filters[k['id']] = []
for v in k['children']:
filters[k['id']].append({
'name': v['name'],
'key': cate[v['name']],
'value':[{'n':i['name'],'v':i['name']} for i in v['children']]
})
filters[k['id']].append(sort)
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
jdata={"condition":64,"pageNum":1,"pageSize":40}
data=self.post(f"{self.host}/api/v1/app/recommend/recommendSubList", headers=self.headers, json=jdata).json()
return {'list':self.getlist(data['data']['records'])}
def categoryContent(self, tid, pg, filter, extend):
jdata = {
'condition': {
'sreecnTypeEnum': 'NEWEST',
'typeId': tid,
},
'pageNum': int(pg),
'pageSize': 40,
}
jdata['condition'].update(extend)
data = self.post(f"{self.host}/api/v1/app/screen/screenMovie", headers=self.headers, json=jdata).json()
result = {}
result['list'] = self.getlist(data['data']['records'])
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
ids = ids[0].split('@@')
jdata = {"id": int(ids[0]), "typeId": ids[-1]}
v = self.post(f"{self.host}/api/v1/app/play/movieDesc", headers=self.headers, json=jdata).json()
v = v['data']
vod = {
'type_name': v.get('classify'),
'vod_year': v.get('year'),
'vod_area': v.get('area'),
'vod_actor': v.get('star'),
'vod_director': v.get('director'),
'vod_content': v.get('introduce'),
'vod_play_from': '',
'vod_play_url': ''
}
c = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json()
l = c['data']['moviePlayerList']
n = {str(i['id']): i['moviePlayerName'] for i in l}
m = jdata.copy()
m.update({'playerId': str(l[0]['id'])})
pd = self.getv(m, c['data']['episodeList'])
if len(l)-1:
with ThreadPoolExecutor(max_workers=len(l)-1) as executor:
future_to_player = {executor.submit(self.getd, jdata, player): player for player in l[1:]}
for future in future_to_player:
try:
o,p = future.result()
pd.update(self.getv(o,p))
except Exception as e:
print(f"请求失败: {e}")
w, e = [],[]
for i, x in pd.items():
if x:
w.append(n[i])
e.append(x)
vod['vod_play_from'] = '$$$'.join(w)
vod['vod_play_url'] = '$$$'.join(e)
return {'list': [vod]}
def searchContent(self, key, quick, pg="1"):
jdata={
"condition": {
"value": key
},
"pageNum": int(pg),
"pageSize": 40
}
data=self.post(f"{self.host}/api/v1/app/search/searchMovie", headers=self.headers, json=jdata).json()
return {'list':self.getlist(data['data']['records']),'page':pg}
def playerContent(self, flag, id, vipFlags):
jdata=json.loads(self.d64(id))
data = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json()
try:
params={'playerUrl':data['data']['url'],'playerId':jdata['playerId']}
pd=self.fetch(f"{self.host}/api/v1/app/play/analysisMovieUrl", headers=self.headers, params=params).json()
url,p=pd['data'],0
except Exception as e:
print(f"请求失败: {e}")
url,p=data['data']['url'],0
return {'parse': p, 'url': url, 'header': {'User-Agent': 'okhttp/4.12.0'}}
def localProxy(self, param):
pass
def liveContent(self, url):
pass
def gettk(self):
data=self.fetch(f"{self.host}/api/v1/app/user/visitorInfo", headers=self.headers).json()
return data['data']['token']
def getdid(self):
did=self.getCache('ldid')
if not did:
hex_chars = '0123456789abcdef'
did =''.join(random.choice(hex_chars) for _ in range(16))
self.setCache('ldid',did)
return did
def getd(self,jdata,player):
x = jdata.copy()
x.update({'playerId': str(player['id'])})
response = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=x).json()
return x, response['data']['episodeList']
def getv(self,d,c):
f={d['playerId']:''}
g=[]
for i in c:
j=d.copy()
j.update({'episodeId':str(i['id'])})
g.append(f"{i['episode']}${self.e64(json.dumps(j))}")
f[d['playerId']]='#'.join(g)
return f
def getlist(self,data):
videos = []
for i in data:
videos.append({
'vod_id': f"{i['id']}@@{i['typeId']}",
'vod_name': i.get('name'),
'vod_pic': i.get('cover'),
'vod_year': i.get('year'),
'vod_remarks': i.get('totalEpisode')
})
return videos
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 ""

File diff suppressed because one or more lines are too long

265
小米/js/测试.js Normal file
View File

@ -0,0 +1,265 @@
//获取vodlist http://124.220.133.60:6868
globalThis.vodlist = function (t, pg) {
let time = Date.now();
const options = {
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
}
};
let html = fetch('http://111.173.114.61:8762/apptov5/v1/vod/lists?type_id=' + t + '&area=&year=&order=time&type_name=&page=' + pg + '&pageSize=21', options);
return JSON.parse(html);
}
globalThis.vodids = function (ids) {
const options = {
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
}
};
let html = fetch('http://111.173.114.61:8762/apptov5/v1/vod/getVod?id=' + ids, options)
let bata = JSON.parse(html);
let rdata = bata.data;
// 创建 data 对象并初始化
let data = {
vod_id: ids,
vod_name: rdata.vod_name,
vod_remarks: rdata.vod_remarks,
vod_actor: rdata.vod_actor,
vod_director: rdata.vod_director,
vod_content: rdata.vod_content,
vod_play_from: '',
vod_play_url: ''
};
// 遍历 vod_play_list 数组
rdata.vod_play_list.forEach((value) => {
data.vod_play_from += value.player_info.show + '|广告勿信$$$';
// 遍历 urls 数组
value.urls.forEach((v) => {
data.vod_play_url += v.name + "$" + value.player_info.from + '|' + v.url + '|' + rdata.vod_name + '|' + v.name + "#";
});
data.vod_play_url += '$$$';
});
return data;
}
//console.log(vodids(153367));
globalThis.svodlist = function (wd) {
const options = {
method: 'GET',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
}
};
let html = fetch('http://111.173.114.61:8762/apptov5/v1/search/lists?wd=' + wd + '&page=1&type=', options)
return JSON.parse(html);
}
globalThis.jxx = function (id, nid) {
let label;
if (id == 'NBY') {
label = 'mayi';
}
if (id == 'BBA') {
label = 'bba';
}
if (id == 'xlink') {
label = 'xlzy';
}
if (id == 'ffm3u8') {
label = 'delad';
}
if (id == 'lzm3u8') {
label = 'delad';
}
if (id == 'rym3u8') {
label = 'delad';
}
if (id == '360zy') {
label = 'delad';
}
if (id == 'qiyi') {
label = 'mitu';
}
if (id == 'qq') {
label = 'mitu';
}
if (id == 'nmlink') {
label = 'wwzy';
}
if (id == 'xlink') {
label = 'xlzy';
}
if (id == 'duanju') {
label = '1';
}
if (id == 'duboku') {
label = '1';
}
if (id == 'rebo') {
label = '1';
}
if (id == 'oule') {
label = '1';
}
if (id == 'duboku') {
label = '1';
}
if (id == 'bilibili') {
label = 'yt';
}
if (id == 'youku') {
label = 'yt';
}
if (id == 'mgtv') {
label = 'yt';
}
if (id == 'qiyi') {
label = 'yt';
}
if (id == 'yhdm') {
label = '1';
}
if (id == 'dmbs1') {
label = 'w';
}
if (id == 'tkyun') {
label = '1';
}
if (id == 'cxyun') {
label = '1';
}
if (id == 'yd189') {
label = '1';
}
if (id == 'jqq') {
label = '1';
}
if (id == 'ty_new1') {
label = '1';
}
if (id == 'hjkk') {
label = '1';
}
if (id == '4kav') {
label = '1';
}
if (id == '4kvip') {
label = '3';
}
if (id == 'Cloud') {
label = '云盘';
}
const options = {
method: 'POST',
headers: {
'User-Agent': 'Dart/2.19 (dart:io)',
'appto-local-uuid': '58c9aa5a-ff7b-4ac0-9627-7dca80c23bd4'
},
body: {
'play_url': nid,
'label': label,
'key': id
}
};
let html = fetch('http://111.173.114.61:8762/apptov5/v1/parsing/proxy', options)
console.log(html);
return JSON.parse(html).data.url !==undefined ? JSON.parse(html).data.url : "解析失败";
if ("104847347" == '104847347') {
return JSON.parse(html1).data.url;
} else {
return '';
}
}
globalThis.sss = function (wd) {
let dm = request('' + wd);
var html1 = fetch('', {
method: 'POST',
headers: {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36',
},
body: {
data: btoa(encodeURIComponent(dm)),
}
});
return html1;
}
var rule = {
title: '九龙',
host: '',
detailUrl: 'fyid',
searchUrl: '**',
url: 'fyclass',
searchable: 2,
quickSearch: 1,
filterable: 0,
class_name: '电影&电视剧&综艺&动漫',
class_url: '1&2&3&4',
play_parse: true,
lazy: $js.toString(() => {
const parts = input.split('|');
input = {
parse: 0,
url: jxx(parts[0], parts[1]),
jx: 0,
danmaku: '' + '&jm=' + parts[2] + '&js=' + parts[3] + '&key=104847347'
};
}),
推荐: $js.toString(() => {
let bdata = vodlist(1, 1);
console.log(bdata);
let bata = bdata.data.data;
bata.forEach(it => {
d.push({
url: it.vod_id,
title: it.vod_name,
img: it.vod_pic,
desc: it.vod_remarks
});
});
setResult(d);
}),
一级: $js.toString(() => {
let bdata = vodlist(input, MY_PAGE);
console.log(bdata);
let bata = bdata.data.data;
bata.forEach(it => {
d.push({
url: it.vod_id,
title: it.vod_name,
img: it.vod_pic,
desc: it.vod_remarks
});
});
setResult(d);
}),
二级: $js.toString(() => {
console.log("调试信息2" + input);
let data = vodids(input);
//console.log(data);
VOD = data;
}),
搜索: $js.toString(() => {
let ddata = svodlist(input);
console.log(ddata);
ddata.data.data.forEach(it => {
d.push({
url: it.vod_id,
title: it.vod_name,
img: it.vod_pic,
desc: it.vod_remarks
});
});
// console.log(data);
setResult(d);
}),
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

BIN
欧歌/jars/config.jar Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,452 +0,0 @@
/**
* 已知问题
* [推荐]页面'雷电模拟器'播放部份影片会出错'播放器'改成'ijk' & '解码方式'改成'软解'即可正常播放
* 影视TV 超連結跳轉支持
* 影视TV 弹幕支持
* https://t.me/fongmi_offical/
* https://github.com/FongMi/Release/tree/main/apk
* 皮皮虾DMBox 弹幕支持
* 设置 > 窗口预览 > 开启
* https://t.me/pipixiawerun
* vod_area:'bilidanmu'
* Cookie设置
* Cookie获取方法 https://ghproxy.net/https://raw.githubusercontent.com/UndCover/PyramidStore/main/list.md
* Cookie设置方法1: DR-PY 后台管理界面
* CMS后台管理 > 设置中心 > 环境变量 > {"bili_cookie":"XXXXXXX","vmid":"XXXXXX"} > 保存
* Cookie设置方法2: 手动替换Cookie
* 底下代码 headers的
* "Cookie":"$bili_cookie"
* 手动替换为
* "Cookie":"将获取的Cookie黏贴在这"
* 客户端长期Cookie设置教程:
* 抓包哔哩手机端搜索access_key,取任意链接里的access_key和appkey在drpy环境变量中增加同名的环境变量即可
* 此时哔哩.js这个解析可用于此源的解析线路用
* 传参 ?render=1&type=url&params=../json/哔哩教育.json@哔哩教育[]
* 传参 ?render=1&type=url&params=../json/哔哩大全.json@哔哩大全[]
*/
var rule = {
title: '我的哔哩[官]',
host: 'https://api.bilibili.com',
homeUrl: '/x/web-interface/ranking/v2?rid=0&type=origin',
// url:'/x/web-interface/search/type?search_type=video&keyword=fyclass&page=fypage',
url: '/x/web-interface/search/type?search_type=video&fyfilter',
filter_url: 'keyword=fyclass{{fl.tid}}&page=fypage&duration={{fl.duration}}&order={{fl.order}}',
class_parse: $js.toString(() => {
// let html = request('{{host}}/files/json/哔哩教育.json');
log('rule.params:' + rule.params);
let html = request(rule.params);
let json = dealJson(html);
input = json.classes;
homeObj.filter = json.filter;
// log(input);
}),
filterable: 1,
detailUrl: '/x/web-interface/view/detail?aid=fyid',
searchUrl: '/x/web-interface/search/type?search_type=video&keyword=**&page=fypage',
searchable: 2,
quickSearch: 0,
params: 'http://127.0.0.1:9978/file/jars/哔哩大全.json',
// params: '?render=1&type=url&params=../json/哔哩教育.json@哔哩教育[官]',
// params: '?render=1&type=url&params=../json/哔哩大全.json@哔哩大全[官]',
headers: {
"User-Agent": "PC_UA",
"Referer": "https://www.bilibili.com",
"Cookie": "SESSDATA=01c79709%2C1711618905%2C244c3%2A91CjA9UUnRb_kJg03J5FqUbin76yMY90o1-ckJsM1ItQH21ns4hgcS6Le6oMR3SKtC18QSVmxSbGRhN3cyS3NReERsOHRfYVlhTWJKZjZyTF9wUWJXbjNfaF9qWklFMFpoeVg1ZUhFb0Q0MGFiN3FYd1N3UEFEY1oxX29IdmFSRVVLamcybGhhSkJnIIEC; bili_jct=e9d6e9df733afde2a03693d63a4e77dc; DedeUserID=186957646;"
},
timeout: 5000,
limit: 8,
play_parse: true,
double: false,
lazy: `js:
let ids = input.split('_');
let dan = 'https://api.bilibili.com/x/v1/dm/list.so?oid=' + ids[1];
let result = {};
let iurl = 'https://api.bilibili.com:443/x/player/playurl?avid=' + ids[0] + '&cid=' + ids[1] + '&qn=116';
let html = request(iurl);
let jRoot = JSON.parse(html);
let jo = jRoot.data;
let ja = jo.durl;
let maxSize = -1;
let position = -1;
ja.forEach(function(tmpJo, i) {
if (maxSize < Number(tmpJo.size)) {
maxSize = Number(tmpJo.size);
position = i
}
});
let purl = '';
if (ja.length > 0) {
if (position === -1) {
position = 0
}
purl = ja[position].url
}
result.parse = 0;
result.playUrl = '';
result.url = unescape(purl);
result.header = {
'Referer': 'https://live.bilibili.com',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
};
if (/\\.flv/.test(purl)) {
result.contentType = 'video/x-flv';
} else {
result.contentType = '';
}
result.danmaku = dan;
input = result
`,
推荐: `js:
function stripHtmlTag(src) {
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
}
function turnDHM(duration) {
let min = '';
let sec = '';
try {
min = duration.split(':')[0];
sec = duration.split(':')[1];
} catch (e) {
min = Math.floor(duration / 60);
sec = duration % 60;
}
if (isNaN(parseInt(duration))) {
return '无效输入';
}
if (min == 0) {
return sec + '秒'
} else if (0 < min && min < 60) {
return min + '分'
} else if (60 <= min && min < 1440) {
if (min % 60 == 0) {
let h = min / 60;
return h + '小时'
} else {
let h = min / 60;
h = (h + '').split('.')[0];
let m = min % 60;
return h + '小时' + m + '分';
}
} else if (min >= 1440) {
let d = min / 60 / 24;
d = (d + '').split('.')[0];
let h = min / 60 % 24;
h = (h + '').split('.')[0];
let m = min % 60;
let dhm = '';
if (d > 0) {
dhm = d + '天'
}
if (h >= 1) {
dhm = dhm + h + '小时'
}
if (m > 0) {
dhm = dhm + m + '分'
}
return dhm
}
return null
}
function ConvertNum(num) {
let _ws = Math.pow(10, 1);
let _b = 1e4;
if (num < _b) {
return num.toString();
}
let _r = '';
let _strArg = ['', '万', '亿', '万亿'];
let _i = Math.floor(Math.log(num) / Math.log(_b));
if (_i > 3) {
_i = 3;
}
_r = Math.floor(num / Math.pow(_b, _i) * _ws) / _ws + _strArg[_i];
return _r;
}
let html = request(input);
let vodList = JSON.parse(html).data.list;
let videos = [];
vodList.forEach(function(vod) {
let aid = vod.aid;
let title = stripHtmlTag(vod.title);
let img = vod.pic;
if (img.startsWith('//')) {
img = 'https:' + img;
}
let remark = turnDHM(vod.duration) + ' ▶' + ConvertNum(vod.stat.view) + ' 🆙' + vod.owner.name;
videos.push({
vod_id: aid,
vod_name: title,
vod_pic: img,
vod_remarks: remark
})
});
VODS = videos
`,
一级: `js:
if (cateObj.tid.endsWith('_clicklink')) {
cateObj.tid = cateObj.tid.split('_')[0];
input = HOST + '/x/web-interface/search/type?search_type=video&keyword=' + cateObj.tid + '&page=' + MY_PAGE;
}
function stripHtmlTag(src) {
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
}
function turnDHM(duration) {
let min = '';
let sec = '';
try {
min = duration.split(':')[0];
sec = duration.split(':')[1];
} catch (e) {
min = Math.floor(duration / 60);
sec = duration % 60;
}
if (isNaN(parseInt(duration))) {
return '无效输入';
}
if (min == 0) {
return sec + '秒'
} else if (0 < min && min < 60) {
return min + '分'
} else if (60 <= min && min < 1440) {
if (min % 60 == 0) {
let h = min / 60;
return h + '小时'
} else {
let h = min / 60;
h = (h + '').split('.')[0];
let m = min % 60;
return h + '小时' + m + '分';
}
} else if (min >= 1440) {
let d = min / 60 / 24;
d = (d + '').split('.')[0];
let h = min / 60 % 24;
h = (h + '').split('.')[0];
let m = min % 60;
let dhm = '';
if (d > 0) {
dhm = d + '天'
}
if (h >= 1) {
dhm = dhm + h + '小时'
}
if (m > 0) {
dhm = dhm + m + '分'
}
return dhm
}
return null
}
function ConvertNum(num) {
let _ws = Math.pow(10, 1);
let _b = 1e4;
if (num < _b) {
return num.toString();
}
let _r = '';
let _strArg = ['', '万', '亿', '万亿'];
let _i = Math.floor(Math.log(num) / Math.log(_b));
if (_i > 3) {
_i = 3;
}
_r = Math.floor(num / Math.pow(_b, _i) * _ws) / _ws + _strArg[_i];
return _r;
}
let data = [];
let vodList = [];
if (MY_CATE === '推荐') {
input = HOST + '/x/web-interface/index/top/rcmd?ps=14&fresh_idx=' + MY_PAGE + '&fresh_idx_1h=' + MY_PAGE;
data = JSON.parse(request(input)).data;
vodList = data.item;
} else if (MY_CATE === '历史记录') {
input = HOST + '/x/v2/history?pn=' + MY_PAGE;
data = JSON.parse(request(input)).data;
vodList = data;
} else {
data = JSON.parse(request(input)).data;
vodList = data.result;
}
let videos = [];
vodList.forEach(function(vod) {
let aid = vod.aid?vod.aid:vod.id;
let title = stripHtmlTag(vod.title);
let img = vod.pic;
if (img.startsWith('//')) {
img = 'https:' + img;
}
let play = '';
let danmaku = '';
if (MY_CATE === '推荐') {
play = ConvertNum(vod.stat.view);
danmaku = vod.stat.danmaku;
} else if (MY_CATE === '历史记录') {
play = ConvertNum(vod.stat.view);
danmaku = vod.stat.danmaku;
} else {
play = ConvertNum(vod.play);
danmaku = vod.video_review;
}
let remark = turnDHM(vod.duration) + ' ▶' + play + ' 💬' + danmaku;
videos.push({
vod_id: aid,
vod_name: title,
vod_pic: img,
vod_remarks: remark
})
});
VODS = videos
`,
二级: `js:
function stripHtmlTag(src) {
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
}
let html = request(input);
let jo = JSON.parse(html).data.View;
// 历史记录
let cookies = rule_fetch_params.headers.Cookie.split(';');
let bili_jct = '';
cookies.forEach(cookie => {
if (cookie.includes('bili_jct')) {
bili_jct = cookie.split('=')[1];
}
});
if (bili_jct !== '') {
let historyReport = 'https://api.bilibili.com/x/v2/history/report';
let dataPost = {
aid: jo.aid,
cid: jo.cid,
csrf: bili_jct,
};
post(historyReport, dataPost, 'form');
}
let stat = jo.stat;
let up_info = JSON.parse(html).data.Card;
let relation = up_info.following ? '已关注' : '未关注';
let aid = jo.aid;
let title = stripHtmlTag(jo.title);
let pic = jo.pic;
let desc = jo.desc;
let date = new Date(jo.pubdate * 1000);
let yy = date.getFullYear().toString();
let mm = date.getMonth()+1;
mm = mm < 10 ? ('0' + mm) : mm;
let dd = date.getDate();
dd = dd < 10 ? ('0' + dd) : dd;
let up_name = jo.owner.name;
let typeName = jo.tname;
// let remark = jo.duration;
let vod = {
vod_id: aid,
vod_name: title,
vod_pic: pic,
type_name: typeName,
vod_year: yy+mm+dd,
vod_area: 'bilidanmu',
// vod_remarks: remark,
vod_tags: 'mv',
// vod_director: '🆙 ' + up_name + ' 👥 ' + up_info.follower + ' ' + relation,
vod_director: '🆙 ' + '[a=cr:' + JSON.stringify({'id':up_name + '_clicklink','name':up_name}) + '/]' + up_name + '[/a]' + ' 👥 ' + up_info.follower + ' ' + relation,
vod_actor: '▶' + stat.view + ' ' + '💬' + stat.danmaku + ' ' + '👍' + stat.like + ' ' + '💰' + stat.coin + ' ' + '⭐' + stat.favorite,
vod_content: desc
};
let ja = jo.pages;
let treeMap = {};
let playurls = [];
ja.forEach(function(tmpJo) {
let cid = tmpJo.cid;
let part = tmpJo.part.replaceAll('#', '﹟').replaceAll('$', '﹩');
playurls.push(
part + '$' + aid + '_' + cid
)
});
treeMap['B站'] = playurls.join('#');
let relatedData = JSON.parse(html).data.Related;
playurls = [];
relatedData.forEach(function(rd) {
let ccid = rd.cid;
let title = rd.title.replaceAll('#', '﹟').replaceAll('$', '﹩');
let aaid = rd.aid;
playurls.push(
title + '$' + aaid + '_' + ccid
)
});
treeMap['欧歌推荐'] = playurls.join('#');
vod.vod_play_from = Object.keys(treeMap).join("$$$");
vod.vod_play_url = Object.values(treeMap).join("$$$");
VOD = vod;
`,
搜索: `js:
let html = request(input);
function stripHtmlTag(src) {
return src.replace(/<\\/?[^>]+(>|$)/g, '').replace(/&.{1,5};/g, '').replace(/\\s{2,}/g, ' ');
}
function turnDHM(duration) {
let min = '';
let sec = '';
try {
min = duration.split(':')[0];
sec = duration.split(':')[1];
} catch (e) {
min = Math.floor(duration / 60);
sec = duration % 60;
}
if (isNaN(parseInt(duration))) {
return '无效输入';
}
if (min == 0) {
return sec + '秒'
} else if (0 < min && min < 60) {
return min + '分'
} else if (60 <= min && min < 1440) {
if (min % 60 == 0) {
let h = min / 60;
return h + '小时'
} else {
let h = min / 60;
h = (h + '').split('.')[0];
let m = min % 60;
return h + '小时' + m + '分';
}
} else if (min >= 1440) {
let d = min / 60 / 24;
d = (d + '').split('.')[0];
let h = min / 60 % 24;
h = (h + '').split('.')[0];
let m = min % 60;
let dhm = '';
if (d > 0) {
dhm = d + '天'
}
if (h >= 1) {
dhm = dhm + h + '小时'
}
if (m > 0) {
dhm = dhm + m + '分'
}
return dhm
}
return null
}
let videos = [];
let vodList = JSON.parse(html).data.result;
vodList.forEach(function(vod) {
let aid = vod.aid;
let title = stripHtmlTag(vod.title);
let img = vod.pic;
if (img.startsWith('//')) {
img = 'https:' + img;
}
let remark = turnDHM(vod.duration);
videos.push({
vod_id: aid,
vod_name: title,
vod_pic: img,
vod_remarks: remark
})
});
VODS = videos
`,
}

1
欧歌/json/1.json Normal file
View File

@ -0,0 +1 @@
http://111.180.190.158:1122

View File

@ -1,199 +0,0 @@
{
"classes": [
{
"type_name": "电影",
"type_id": "dy"
},
{
"type_name": "电视",
"type_id": "ds"
},
{
"type_name": "短剧",
"type_id": "dj"
},
{
"type_name": "综艺",
"type_id": "zy"
},
{
"type_name": "动漫",
"type_id": "dm"
},
{
"type_name": "音乐",
"type_id": "yy"
}
],
"filters": {
"dy": [
{
"key": "root",
"name": "来源",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "夸克",
"v": "2"
},
{
"n": "UC",
"v": "5"
},
{
"n": "阿里",
"v": "1"
},
{
"n": "百度",
"v": "4"
}
]
}
],
"ds": [
{
"key": "root",
"name": "来源",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "夸克",
"v": "2"
},
{
"n": "UC",
"v": "5"
},
{
"n": "阿里",
"v": "1"
},
{
"n": "百度",
"v": "4"
}
]
}
],
"dj": [
{
"key": "root",
"name": "来源",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "夸克",
"v": "2"
},
{
"n": "UC",
"v": "5"
},
{
"n": "阿里",
"v": "1"
},
{
"n": "百度",
"v": "4"
}
]
}
],
"zy": [
{
"key": "root",
"name": "来源",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "夸克",
"v": "2"
},
{
"n": "UC",
"v": "5"
},
{
"n": "阿里",
"v": "1"
},
{
"n": "百度",
"v": "4"
}
]
}
],
"dm": [
{
"key": "root",
"name": "来源",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "夸克",
"v": "2"
},
{
"n": "UC",
"v": "5"
},
{
"n": "阿里",
"v": "1"
},
{
"n": "百度",
"v": "4"
}
]
}
],
"yy": [
{
"key": "root",
"name": "来源",
"value": [
{
"n": "全部",
"v": "0"
},
{
"n": "夸克",
"v": "2"
},
{
"n": "UC",
"v": "5"
},
{
"n": "阿里",
"v": "1"
},
{
"n": "百度",
"v": "4"
}
]
}
]
},
"siteUrl": "https://ysapi.yingso.fun/v7/ali/all"
}

View File

@ -1,33 +0,0 @@
{
"SiteUrl": "https://www.leijing.xyz,https://www.leijing1.com,https://leijing.xyz,https://leijing1.com",
"Classes": [
{
"type_name": "电影",
"type_id": "42204681950354"
},
{
"type_name": "剧集",
"type_id": "42204684250355"
},
{
"type_name": "影视原盘",
"type_id": "42212287587456"
},
{
"type_name": "综艺",
"type_id": "42210356650363"
},
{
"type_name": "动漫",
"type_id": "42204792950357"
},
{
"type_name": "纪录片",
"type_id": "42204697150356"
},
{
"type_name": "演唱会",
"type_id": "42317879720298"
}
]
}

View File

@ -17,6 +17,7 @@ CCTV-2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/2
CCTV-2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8
CCTV-2,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226371/1.m3u8
CCTV-2,http://iptv.huuc.edu.cn/hls/cctv2hd.m3u8
CCTV-3,http://drive.mxmy.net:8888/udp/239.3.1.172:8001
CCTV-3,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226021
CCTV-3,http://[2409:8087:74f0:22::4]:6410/270000001111/1110000303/index.m3u8
CCTV-3,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226021/index.m3u8
@ -35,6 +36,7 @@ CCTV-4,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/
CCTV-4,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226428/index.m3u8
CCTV-4,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8
CCTV-4,http://iptv.huuc.edu.cn/hls/cctv4hd.m3u8
CCTV-4,http://lu.wqwqwq.sbs/itv/1000000005000265004.m3u8?cdn=ystenlive
CCTV-5,http://omnix.cn:4000/udp/225.1.8.89:8000
CCTV-5,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019
CCTV-5,http://[2409:8087:74f0:22::4]:6410/270000001111/1110000305/index.m3u8
@ -116,7 +118,6 @@ CCTV-12,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
CCTV-12,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8
CCTV-12,http://iptv.huuc.edu.cn/hls/cctv12hd.m3u8
CCTV-12,http://lu.wqwqwq.sbs/itv/1000000005000265012.m3u8?cdn=ystenlive
CCTV-13,http://ali-m-l.cztv.com/channels/lantian/channel21/1080p.m3u8
CCTV-13,https://event.pull.hebtv.com/jishi/cp1.m3u8
CCTV-13,http://z.b.bkpcp.top/m.php?id=cctv13
CCTV-13,http://j.x.bkpcp.top/jx/CCTV13HD
@ -126,6 +127,7 @@ CCTV-13,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000510/index.m3u8
CCTV-13,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221226011/index.m3u8
CCTV-13,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226537/index.m3u8
CCTV-13,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226537/index.m3u8
CCTV-13,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8
CCTV-14,http://php.jdshipin.com/TVOD/hljyd.php?id=3221225732
CCTV-14,http://[2409:8087:74f0:22::4]:6410/270000001128/9900000511/index.m3u8
CCTV-14,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/8/3221225732/index.m3u8
@ -199,6 +201,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
重庆卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8
重庆卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010053/1.m3u8
重庆卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226337/1.m3u8
东方卫视,http://drive.mxmy.net:8888/udp/239.3.1.136:8032
东方卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010054
东方卫视,http://z.b.bkpcp.top/m.php?id=dfws#rtsp://115.85.232.19/PLTV/88888910/224/3221225531/10000100000000060000000000107311_0.smil
东方卫视,http://goo.bkpcp.top/mg/dfws
@ -208,7 +211,6 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
东方卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8
东方卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010054/1.m3u8
东方卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226898/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7E0uh4lyjjBCCN7TCq21vSIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
东方卫视,http://iptv.huuc.edu.cn/hls/dfhd.m3u8
东南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096
东南卫视,http://z.b.bkpcp.top/m.php?id=dnws
东南卫视,http://j.x.bkpcp.top/jx/DONGNHD
@ -230,6 +232,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
甘肃卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8
甘肃卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010098/1.m3u8
广东卫视,http://satellitepull.cnr.cn/live/wxgdws/playlist.m3u8
广东卫视,http://drive.mxmy.net:8888/udp/239.3.1.142:8048
广东卫视,http://php.jdshipin.com:8880/TVOD/gsyd.php?id=9900000520
广东卫视,http://z.b.bkpcp.top/m.php?id=gdws
广东卫视,http://j.x.bkpcp.top/jx/GUANGDHD
@ -238,7 +241,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
广东卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8
广东卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8
广东卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8
广东卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010055/1.m3u8
广西卫视,http://1b6467f415.iok.la:9931/tsfile/live/1082_1.m3u8
广西卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226549
广西卫视,http://z.b.bkpcp.top/m.php?id=gxws
广西卫视,https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8
@ -248,7 +251,6 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
广西卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8
广西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8
广西卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010099/1.m3u8
广西卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227010/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EkAhb-89sxdm9fz6-heXCuw%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
贵州卫视,http://satellitepull.cnr.cn/live/wx32gzws/playlist.m3u8
贵州卫视,http://drive.mxmy.net:8888/udp/239.3.1.149:8076
贵州卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474
@ -259,8 +261,6 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
贵州卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8
贵州卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8
贵州卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010100/1.m3u8
海南卫视,http://satellitepull.cnr.cn/live/wxhainlyws/playlist.m3u8
海南卫视,http://171.15.18.199:8180/TV00000000000000000028@HHZT
海南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010083
海南卫视,http://z.b.bkpcp.top/m.php?id=hinws
海南卫视,http://j.x.bkpcp.top/jx/HAINHD
@ -269,7 +269,8 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
海南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8
海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226574/1.m3u8
海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226922/1.m3u8
河北卫视,http://171.15.18.199:8180/TV00000000000000000035@HHZT
海南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000004796877.m3u8
海南卫视,http://lu.wqwqwq.sbs/itv/5000000004000006211.m3u8?cdn=bestzb
河北卫视,http://drive.mxmy.net:8888/udp/239.3.1.148:8072
河北卫视,http://php.fjl626.cn/hebei.php?id=hbws
河北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101
@ -279,6 +280,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
河北卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8
河北卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010101/1.m3u8
河北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227014/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7ErSGjhI3DMaaAASPrbQJYTg%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
河北卫视,http://[2409:8087:1a01:df::4035]:80/TVOD/88888888/224/3221225961/main.m3u8
河南卫视,http://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8
河南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480
河南卫视,http://z.b.bkpcp.top/m.php?id=hnws
@ -289,6 +291,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
河南卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8
河南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887270.m3u8
湖北卫视,http://satellitepull.cnr.cn/live/wx32hubws/playlist.m3u8
湖北卫视,http://drive.mxmy.net:8888/udp/239.3.1.138:8044
湖北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010057
湖北卫视,http://z.b.bkpcp.top/m.php?id=hubws
湖北卫视,http://j.x.bkpcp.top/jx/HUBEIHD
@ -297,7 +300,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
湖北卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8
湖北卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8
湖北卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010057/1.m3u8
北卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226952/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7EREB40lnZnCEwjRy7LZuhIQ%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
南卫视,http://drive.mxmy.net:8888/udp/239.3.1.132:8012
湖南卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010058
湖南卫视,http://z.b.bkpcp.top/m.php?id=hunws
湖南卫视,http://j.x.bkpcp.top/jx/HUNANHD
@ -307,7 +310,6 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
湖南卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010058/1.m3u8
湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226493/1.m3u8
湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8
湖南卫视,http://iptv.huuc.edu.cn/hls/hunanhd.m3u8
黑龙江卫视,http://satellitepull.cnr.cn/live/wx32hljws/playlist.m3u8
黑龙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056
黑龙江卫视,http://j.x.bkpcp.top/jx/HEILJHD
@ -399,7 +401,6 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
山东卫视,http://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010066/1.m3u8
山西卫视,http://qwt.zhibotv.top:2016/全网通.php?id=山西卫视
山西卫视,http://satellitepull.cnr.cn/live/wxssxws/playlist.m3u8
山西卫视,http://171.15.18.199:8180/TV00000000000000000038@HHZT
山西卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010114
山西卫视,http://j.x.bkpcp.top/jx/SXWS
山西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225624/index.m3u8
@ -482,9 +483,6 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
延边卫视,http://l.cztvcloud.com/channels/lantian/SXxinchang2/720p.m3u8#
延边卫视,http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8
延边卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221227045/1.m3u8?GuardEncType=2&accountinfo=%7E%7EV2.0%7Eq0D3NdTUN7FuRzr8eJsbQA%7EtP4-l0lmSfjwLWEfK_el1vH_mv-s1zo4AQJwdedaVwG9xkuFTDg8J26cwOrNJzn20BErrHdLhuZ9EzLUCD3PMW-OMx4MGteHV2vLeW6BqoY%2CEND
浙江卫视,http://8.138.7.223/tv/zjws.m3u8
浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel001/1080p.m3u8
浙江卫视,http://ali-m-l.cztv.com/channels/lantian/channel01/1080p.m3u8
浙江卫视,http://zwebl02.cztv.com/live/channel011080P.m3u8?auth_key=2524708799-0-0-9a1229d8b9d311024ebea08c3fb1d63f
浙江卫视,http://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915
浙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070
@ -492,6 +490,9 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
浙江卫视,http://goo.bkpcp.top/mg/zjws
浙江卫视,http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8
浙江卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000531/index.m3u8
浙江卫视,http://[2409:8087:1a01:df::4077]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8
浙江卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8
浙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8
安徽频道,#genre#
安徽导视,http://dspdhls.appcoo.com:8888/live/dspd/index.m3u8
@ -558,15 +559,9 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
海峡卫视,http://hlsbkmgsplive.miguvideo.com/migu/kailu/haixiaws/57/20230724/01.m3u8
海峡卫视,http://hlsbkmgsplive.miguvideo.com/migu/kailu/haixiaws/57/20230724/01.m3u8?msisdn=&Channel_ID=&ContentId=&HlsSubType=&HlsProfileId=&encrypt=
海峡卫视,http://goo.bkpcp.top/mg/hxws
福建综合,http://8.138.7.223/tv/fjtv.php?id=4
福建公共,http://8.138.7.223/tv/fjtv.php?id=6
福建新闻,http://satellitepull.cnr.cn/live/wx32fjxwgb/playlist.m3u8
福建新闻,https://satellitepull.cnr.cn/live/wx32fjxwgb/playlist.m3u8
福建电视剧,http://8.138.7.223/tv/fjtv.php?id=7
福建旅游,http://8.138.7.223/tv/fjtv.php?id=8
福建经济,http://satellitepull.cnr.cn/live/wx32fjdnjjgb/playlist.m3u8
福建文体,http://8.138.7.223/tv/fjtv.php?id=10
福建少儿,http://8.138.7.223/tv/fjtv.php?id=2
甘肃频道,#genre#
甘肃经济,https://hls.gstv.com.cn/49048r/10iv1j.m3u8
@ -621,8 +616,6 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
贵州频道,#genre#
海南频道,#genre#
海南新闻,http://satellitepull.cnr.cn/live/wxhainxwgb/playlist.m3u8
海南新闻,https://satellitepull.cnr.cn/live/wxhainxwgb/playlist.m3u8
海南新闻,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000111/1.m3u8
海南新闻,http://ls.qingting.fm/live/1861.m3u8
海南自贸,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000116/1.m3u8
@ -657,7 +650,6 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
湖南都市,http://php.jdshipin.com:8880/iptv.php
湖南娱乐,http://php.jdshipin.com:8880/iptv.php
湖南电视剧,http://php.jdshipin.com:8880/iptv.php
湖南爱晚,http://p2.vzan.com/527645544/149039617847513156/live.m3u8
湖南爱晚,http://php.jdshipin.com:8880/iptv.php
湖南电影,http://php.jdshipin.com:8880/iptv.php
金鹰卡通,http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8
@ -679,12 +671,12 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
黑龙江少儿,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226304/index.m3u8
哈尔滨新闻综合,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226434
哈尔滨影视,http://111.43.126.240:9003/hls/5/index.m3u8
哈尔滨影视,http://stream.hrbtv.net/yspd/sd/live.m3u8
哈尔滨影视,https://stream.hrbtv.net/yspd/sd/live.m3u8
哈尔滨影视,https://stream.hrbtv.net/yspd/playlist.m3u8
哈尔滨影视,http://stream.hrbtv.net/yspd/sd/live.m3u8
哈尔滨资讯,http://stream.hrbtv.net/zxpd/sd/live.m3u8
哈尔滨生活,http://111.43.126.240:9003/hls/3/index.m3u8
哈尔滨生活,https://stream.hrbtv.net/shpd/sd/live.m3u8
哈尔滨生活,https://stream.hrbtv.net/shpd/playlist.m3u8
哈尔滨生活,http://stream.hrbtv.net/shpd/sd/live.m3u8
哈尔滨娱乐,https://stream.hrbtv.net/ylpd/sd/live.m3u8
哈尔滨娱乐,http://stream.hrbtv.net/ylpd/sd/live.m3u8
@ -735,14 +727,14 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
辽宁频道,#genre#
辽宁都市,https://ls.qingting.fm/live/1099/64k.m3u8
辽宁影视剧,http://120.76.248.139/live/bfgd/4200000070.m3u8
辽宁影视剧,http://dassby.qqff.top:99/live/%E8%BE%BD%E5%AE%81%E5%BD%B1%E8%A7%86%E5%89%A7/index.m3u8
辽宁生活,http://120.76.248.139/live/bfgd/4200000073.m3u8
辽宁影视剧,http://120.76.248.139/live/bfgd/4200000070.m3u8
辽宁生活,http://dassby.qqff.top:99/live/辽宁生活/index.m3u8
辽宁教育青少,http://120.76.248.139/live/bfgd/4200000075.m3u8
辽宁生活,http://120.76.248.139/live/bfgd/4200000073.m3u8
辽宁教育青少,http://dassby.qqff.top:99/live/辽宁教育青少/index.m3u8
辽宁北方,http://120.76.248.139/live/bfgd/4200000071.m3u8
辽宁教育青少,http://120.76.248.139/live/bfgd/4200000075.m3u8
辽宁北方,http://dassby.qqff.top:99/live/辽宁北方/index.m3u8
辽宁北方,http://120.76.248.139/live/bfgd/4200000071.m3u8
朝阳新闻综合,http://120.76.248.139/live/bfgd/4200000282.m3u8
内蒙古频道,#genre#
@ -761,11 +753,15 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
山东频道,#genre#
山东齐鲁,http://61.156.228.12:8154/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
山东齐鲁,http://111.14.181.15:9901/tsfile/live/1000_1.m3u8
山东文旅,http://221.2.148.205:8154/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0
山东文旅,http://58.57.40.22:9901/tsfile/live/1023_1.m3u8
山东文旅,http://221.2.148.205:8154/tsfile/live/1004_1.m3u8?key=txiptv&amp;playlive=1&amp;authid=0
山东文旅,http://221.2.148.205:8154/tsfile/live/1004_1.m3u8?key=txiptv&amp;amp;playlive=1&amp;amp;authid=0
山东综艺,http://123.129.70.178:9901/tsfile/live/1001_1.m3u8
山东综艺,http://111.14.181.15:9901/tsfile/live/1004_1.m3u8
山东生活,http://ls.qingting.fm/live/60260.m3u8
山东新闻,http://ls.qingting.fm/live/60180.m3u8
山东少儿,http://111.14.181.15:9901/tsfile/live/1005_1.m3u8
山西频道,#genre#
@ -837,6 +833,7 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
浙江卫视,http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8
浙江卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8
浙江钱江,http://l.cztvcloud.com/channels/lantian/SXyuyao2/720p.m3u8
浙江经济生活,http://ali-m-l.cztv.com/channels/lantian/channel03/1080p.m3u8
浙江经济生活,http://zwebl02.cztv.com/live/channel031080P.m3u8?auth_key=2524708799-0-0-cc09266f8e043a6df28eb148cb488d37
浙江经济生活,http://zhfivel02.cztv.com/channel03/1080p.m3u8?auth_key=2524708799-0-0-76c0751e0f656453baf39803124fc08a
浙江经济生活,http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8
@ -900,9 +897,7 @@ CHC影迷电影,http://eastscreen.tv/ooooo.php
港·澳·台,#genre#
凤凰中文,https://cdn.iptv8k.top/dl/jrys.php?id=19&time=20240926215313&ip=111.229.253.40
凤凰中文,http://playtv-live.ifeng.com/live/06OLEGEGM4G_audio.m3u8
凤凰中文,http://php.jdshipin.com/TVOD/iptv.php
凤凰资讯,http://playtv-live.ifeng.com/live/06OLEEWQKN4_audio.m3u8
凤凰资讯,http://php.jdshipin.com/TVOD/iptv.php
凤凰资讯,http://cdn3.132.us.kg/live/fhzx/stream.m3u8
凤凰香港,https://cdn.iptv8k.top/dl/jrys.php?id=18&time=20240926215313&ip=111.229.253.40

Binary file not shown.

View File

@ -1 +0,0 @@
http://160.202.244.9:2489

1
欧歌/txt/getapp.txt Normal file
View File

@ -0,0 +1 @@
https://oldapp.xfconnect.top

View File

@ -0,0 +1,20 @@
{
"站名": "",
"主页url": "https://www.freeok.ac",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"数组": "",
"图片": "data-original=\"&&\"",
"标题": "",
"链接": "href=\"&&\"",
"副标题": "",
"线路数组": "module-tab-item&&</div>",
"线路标题": "data-dropdown-value=\"&&\"",
"播放数组": "",
"播放标题": "",
"跳转播放链接": "urlDecode(Base64(var player_*url\":\"&&\"))",
"搜索url": "https://www.freeok.ac/vodsearch/-------------.html?wd={wd}",
"简介": "<p>&&</p>",
"分类url": "https://www.freeok.ac/type/{cateId}.html",
"分类": "电影$1#连续剧$2#动漫$3#综艺$4#短剧$24"
}

View File

@ -0,0 +1,51 @@
{
"作者": "",
"站名": "明星影院",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"图片代理": "",
"直接播放": "0",
"播放请求头": "",
"过滤词": "",
"主页url": "https://mxvod.com",
"首页": "120",
"起始页": "1",
"分类url": "https://mxvod.com/vodshow/{cateId}-{area}-{by}-{class}-{lang}-{letter}---{catePg}---{year}.html",
"分类": "电影$dianying#电视剧$dianshiju#综艺$zongyi#动漫$dongman#短剧$duanju",
"二次截取": "module-items\"&&id=\"page",
"数组": "lazyloaded&&/a>",
"标题": "title=*>&&<",
"图片": "data-src=\"&&\"",
"副标题": "class\">&&<",
"链接": "href=\"&&\"[替换:vodplay>>voddetail#-1-1.html>>.html]",
"影片年代": "-----------*.html\">&&</",
"影片地区": "video:area\" content=\"&&\"",
"影片类型": "video:class\" content=\"&&\"",
"状态": "tag-link-red\">&&</div>",
"导演": "导演:&&</div>",
"主演": "主演:&&\">",
"简介": "vod_content\"&&</div>",
"线路数组": "data-dropdown&&/small>",
"线路标题": "value=\"&&\"+【共+<small>&&<+集】",
"播放数组": "id=\"sort-item&&</div>",
"播放列表": "<a&&/a>",
"播放标题": "<span>&&<",
"播放链接": "href=\"&&\"",
"跳转播放链接": "var player_*\"url\":\"&&\"",
"搜索请求头": "User-Agent$MOBILE_UA",
"搜索url": "https://mxvod.com/vodsearch/{wd}----------{pg}---.html",
"搜索模式": "1",
"搜索数组": "lazyload\"&&/a>",
"搜索标题": "title=\"&&\"",
"搜索图片": "data-src=\"&&\"",
"搜索副标题": "title=*>&&<",
"搜索链接": "href=\"&&\"",
"筛选": "1",
"类型": "动作片$dongzuopian#喜剧片$xijupian#爱情片$aiqingpian#科幻片$kehuanpian#恐怖片$kongbupian#战争片$zhanzhengpian#剧情片$juqingpian#动画片$donghuapian#悬疑片$xuanyi#纪录片$jilupian#奇幻片$qihuanpian#灾难片$zainanpian||国产剧$guochanju#欧美剧$oumeiju#日剧$riju#韩剧$hanju#港台剧$gangtai#海外剧$haiwai||大陆综艺$daluzongyi#港台综艺$gangtaizongyi#欧美综艺$oumeizongyi#日韩综艺$rihanzongyi#海外综艺$haiwaizongyi||国产动漫$guochandongman#日韩动漫$rihandongman#欧美动漫$oumeidongman#海外动漫$haiwaidongman||空",
"剧情": "喜剧&爱情&恐怖&动作&科幻&剧情&战争&警匪&犯罪&动画&奇幻&武侠&冒险&枪战&恐怖&悬疑&惊悚&经典&青春&文艺&微电影&古装&历史&运动&农村&儿童&网络电影||古装&战争&青春偶像&喜剧&家庭&犯罪&动作&奇幻&剧情&历史&经典&乡村&情景&商战&网剧&其他||选秀&情感&访谈&播报&旅游&音乐&美食&纪实&曲艺&生活&游戏互动&财经&求职||情感&科幻&热血&推理&搞笑&冒险&萝莉&校园&动作&机战&运动&战争&少年&少女&社会&原创&亲子&益智&励志&其他||古装&虐恋&逆袭&神豪&重生&复仇&穿越&甜宠&强者&萌宝&其它",
"年份": "1990-2025",
"年份值": "*",
"语言值": "*",
"排序": "时间&人气&评分",
"排序值": "time&hits&score"
}

View File

@ -1,4 +0,0 @@
{
"分类": "短剧$duanju#电影$dianying#电视剧$dianshiju#动漫$dongman#综艺$zongyi",
"分类url": "https://www.duanjuwang.cc/vodtype/{cateId}/page/{catePg}.html"
}

View File

@ -1,6 +1,16 @@
{
"简介": "p_txt show_part\">&&</p>",
"副标题": "v_note\">&&</div>",
"分类url": "https://saohuody.com/list/{cateId}-{catePg}.html",
"分类": "国产剧$12#港剧$13#台剧$14#日剧$15#韩剧$16#美剧$17#海外$18#泰剧$19#动作$5#喜剧$6#爱情$7#科幻$8#恐怖$9#剧情$10#战争$11#动画$33"
"首页": "0",
"请求头": "User-Agent$MOBILE_UA#Accept$text/html,application/xhtml+xml,application/xmlq=0.9,image/avif,image/webp,image/apng,*/*q=0.8,application/signed-exchangev=b3q=0.7&&Accept-Language@zh-CN,zhq=0.9",
"分类url": "https://shdy2.com/list/{cateId}-{catePg}.html",
"分类": "剧集$2#电影$1#港剧$21#台剧$26#日剧$24#韩剧$22#美剧$23",
"数组": "class=\"v_img&&/li>",
"标题": "alt=\"&&\"",
"图片": "original=\"&&\"",
"链接": "href=\"&&\"",
"简介": "show_part\">&&<a",
"演员": "主演:&&<a",
"导演": "导演:&&/",
"播放二次截取": "class=\"play_list&&/ul>",
"播放数组": "<li&&/li>",
"倒序": "1"
}

View File

@ -0,0 +1,38 @@
{
"站名": "麦田appXBPQ",
"规则作者": "啦啦啦",
"请求头": "User-Agent$MOBILE_UA",
"编码": "UTF-8",
"主页url": "http://172.247.31.147:25321/mtys.php/v6/index_video",
"分类url": "http://172.247.31.147:25321/mtys.php/v6/video?pg={catePg}&tid={cateId}&class={class}&area={area}&lang={lang}&year={year}&order={by};;mr",
"分类": "电影&电视剧&综艺&动漫&少儿&短剧&直播",
"分类值": "1&2&3&4&25&26&30",
"数组": "{&&}",
"图片": "vod_pic\":\"&&\"",
"标题": "vod_name\":\"&&\"",
"副标题": "vod_remarks\":\"&&\"",
"链接": "http://172.247.31.147:25321/mtys.php/v6/video_detail?id=+vod_id\":&&,",
"线路二次截取": "vod_url_with_player\":\\[{&&}\\][替换:\"name\":\">>\"name\":\"题]",
"线路数组": "\"name\":\"&&,",
"线路标题": "题&&\"",
"播放二次截取": "vod_url_with_player\":\\[{&&}\\]",
"播放数组": "url\":&&,[替换:\">>接表题#$>>题接#\\#>>接表表题]",
"播放列表": "表&&表",
"播放标题": "题&&题",
"播放链接": "urlDecode(接&&接)",
"解析": "PD源$http://172.247.31.148:25320/jx.php?url=#NB源$https://api.nbyjson.top:7788/api/?key=ws9Lz1EtqfU09AzZKl&url=#ZB源$http://27.25.159.14:6699/api/mgapp.php?url=",
"影片类型": "vod_class\":\"&&\"",
"影片年代": "vod_year\":\"&&\"",
"影片地区": "vod_area\":\"&&\"",
"导演": "vod_director\":\"&&\"",
"主演": "vod_actor\":\"&&\"",
"简介": "vod_content\":\"&&\"",
"搜索url": "http://172.247.31.147:25321/mtys.php/v6/search?pg={pg}&tid=0&text={wd}",
"搜索模式": "1",
"搜索二次截取": "data\":\\[&&\\]",
"搜索数组": "{&&}",
"搜索图片": "vod_pic\":\"&&\"",
"搜索标题": "vod_name\":\"&&\"",
"搜索副标题": "vod_remarks\":\"&&\"",
"搜索链接": "http://172.247.31.147:25321/mtys.php/v6/video_detail?id=+vod_id\":&&,"
}

View File

@ -73,14 +73,16 @@
}
},
{
"key": "闪影",
"name": "闪影APP",
"key": "追忆",
"name": "追忆APP",
"type": 3,
"api": "csp_AppYs",
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": "http://38.47.213.61:41271/mogai_api.php/v1.vod"
"api": "csp_AppSy",
"ext": {
"url": "http://110.42.7.130:1866",
"key1": "aassddwwxxllsx1x",
"key2": "2083c87e98b6ce08",
"key3": "2083c87e98b6ce08"
}
},
{
"key": "行动",
@ -94,58 +96,90 @@
"key3": "aassddwwxxllsx1x"
}
},
{
"key": "追忆",
"name": "追忆APP",
"type": 3,
"api": "csp_AppSy",
"ext": {
"url": "http://110.42.7.130:1866",
"key1": "aassddwwxxllsx1x",
"key2": "2083c87e98b6ce08",
"key3": "2083c87e98b6ce08"
}
},
{
"key": "咖啡",
"name": "咖啡APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet2",
"api": "csp_AppGet",
"ext": {
"url": "",
"site": "https://cdn-tupic-duofun-neimenggu.56uxi.com/2.txt",
"dataKey": "qwertyuiopqwertt",
"dataIv": "qwertyuiopqwertt",
"site": "https://omofun.lol/1.txt",
"dataKey": "skdhalkshqklwkj1",
"dataIv": "skdhalkshqklwkj1",
"deviceId": "",
"version": "109",
"ua": "okhttp/3.10.0"
}
},
{
"key": "知了",
"name": "知了APP",
"key": "魔方",
"name": "魔方APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://zzos.cc",
"dataKey": "zzoccc2025555555",
"dataIv": "zzoccc2025555555",
"url": "",
"site": "https://www.snysw.xyz/mfys.txt",
"dataKey": "1234567887654321",
"dataIv": "1234567887654321",
"deviceId": "",
"version": ""
}
},
{
"key": "小野",
"name": "小野APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://appcms.xy4k.com",
"site": "",
"dataKey": "7SDWjknU34zqFbVr",
"dataIv": "7SDWjknU34zqFbVr",
"deviceId": "",
"version": ""
}
},
{
"key": "爱看",
"name": "爱看丨APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "http://154.37.220.65",
"dataKey": "uI1TkPJC8B46AyN3",
"dataIv": "uI1TkPJC8B46AyN3",
"deviceId": "2112fc5eac600314ba95c4d65da9286b3",
"version": "120"
}
},
{
"key": "稀饭",
"name": "稀饭APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://app.xifanys.com",
"dataKey": "HM6Ly9yeS4ya3dvL",
"dataIv": "HM6Ly9yeS4ya3dvL",
"deviceId": "",
"version": "119"
}
},
{
"key": "APP4K",
"key": "蓝光",
"name": "蓝光APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "http://59.153.167.186",
"dataKey": "SDSFET23215FDSF2",
"dataIv": "SDSFET23215FDSF2",
"url": "http://122.228.193.2:9654",
"dataKey": "ca94b06ca3c7d80e",
"dataIv": "ca94b06ca3c7d80e",
"deviceId": "",
"version": "119"
}
@ -157,8 +191,8 @@
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "",
"site": "https://apicoss-alimama-com-1307821617.file.myqcloud.com/Uploadsget",
"url": "http://124.223.27.166:130",
"site": "",
"dataKey": "q7gj4f9br3fls6nh",
"dataIv": "q7gj4f9br3fls6nh",
"deviceId": "",
@ -195,20 +229,6 @@
"version": ""
}
},
{
"key": "橘猫",
"name": "橘猫APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet2",
"ext": {
"url": "https://qjappcms.jm4k.top",
"dataKey": "pBVmysmGX8TsgrQN",
"dataIv": "pBVmysmGX8TsgrQN",
"deviceId": "",
"version": "120"
}
},
{
"key": "雄鹰",
"name": "雄鹰APP",
@ -259,7 +279,7 @@
"quickSearch": 1,
"api": "csp_AppGet2",
"ext": {
"url": "https://qjappcms.cs4k.top",
"url": "https://newappcms.cs4k.top",
"dataKey": "Z98KXaLtO2wC1Pte",
"dataIv": "Z98KXaLtO2wC1Pte",
"deviceId": "",
@ -281,34 +301,6 @@
"version": ""
}
},
{
"key": "热剧",
"name": "热剧APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet2",
"ext": {
"url": "",
"site": "https://app-qy.oss-cn-shanghai.aliyuncs.com/rebo.txt",
"dataKey": "8191A7F47B37882F",
"dataIv": "8191A7F47B37882F",
"deviceId": "",
"version": ""
}
},
{
"key": "码头",
"name": "码头APP",
"type": 3,
"api": "csp_AppGet",
"ext": {
"url": "https://www.lgmt.cc",
"dataKey": "asfjaskasgggassf",
"dataIv": "asfjaskasgggassf",
"deviceId": "",
"version": ""
}
},
{
"key": "米诺",
"name": "米诺APP",
@ -338,29 +330,16 @@
}
},
{
"key": "桃子",
"name": "桃子APP",
"key": "瓜萌",
"name": "瓜萌APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://appcms.tzys.xyz",
"dataKey": "KL6vlZkw6WL5x90U",
"dataIv": "KL6vlZkw6WL5x90U",
"deviceId": "4b4c36766c5a6b7736574c3578393055",
"version": "119"
}
},
{
"key": "魔方",
"name": "魔方APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://mfsp33.top",
"dataKey": "1234567887654321",
"dataIv": "1234567887654321",
"url": "",
"site": "https://www.guahd.com/1.txt",
"dataKey": "f2A7D4B9E8C16531",
"dataIv": "f2A7D4B9E8C16531",
"deviceId": "",
"version": ""
}
@ -393,20 +372,6 @@
"version": "200"
}
},
{
"key": "瓜萌",
"name": "瓜萌APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://www.guahd.com",
"dataKey": "f2A7D4B9E8C16531",
"dataIv": "f2A7D4B9E8C16531",
"deviceId": "",
"version": ""
}
},
{
"key": "晴天",
"name": "晴天APP",
@ -421,20 +386,6 @@
"version": "119"
}
},
{
"key": "再看",
"name": "再看APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "http://149.88.64.161:8627",
"dataKey": "123456789ABCDEFG",
"dataIv": "123456789ABCDEFG",
"deviceId": "2bb4c10f3e043307dbfc579bd0db23f4e",
"version": "110"
}
},
{
"key": "橘子",
"name": "橘子APP",
@ -442,27 +393,14 @@
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://api1.bffree.cn",
"url": "",
"site": "http://t.bffree.cn/1.txt",
"dataKey": "2015692015692015",
"dataIv": "2015692015692015",
"deviceId": "",
"version": "300"
}
},
{
"key": "彼岸",
"name": "彼岸APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "https://mfsp33.top",
"dataKey": "1234567887654321",
"dataIv": "1234567887654321",
"deviceId": "298e5fe29c74b35aabb9836ee2f6f449f",
"version": "315"
}
},
{
"key": "雨滴",
"name": "雨滴APP",
@ -520,27 +458,14 @@
}
},
{
"key": "在看",
"name": "在看APP",
"key": "白蛇",
"name": "白蛇APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "http://149.88.64.161:9525",
"dataKey": "123456789ABCDEFG",
"dataIv": "123456789ABCDEFG",
"deviceId": "",
"version": ""
}
},
{
"key": "星河",
"name": "星河APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppGet",
"ext": {
"url": "http://121.62.22.204:9876",
"url": "",
"site": "http://tengxunyunaliyun.oss-cn-shanghai.aliyuncs.com/tengxunyun.txt",
"dataKey": "f5e2tx53ykp6s2c9",
"dataIv": "f5e2tx53ykp6s2c9",
"deviceId": "",
@ -615,19 +540,6 @@
"jxurl": "https://www.ququkan.cc"
}
},
{
"key": "火猫",
"name": "火猫APP",
"type": 3,
"quickSearch": 1,
"api": "csp_AppMuou",
"ext": {
"url": "http://154.12.22.168:14988",
"dataKey": "531f6082a43ac5d7",
"dataIv": "531f6082a43ac5d7",
"jxurl": "http://app.789dd.cn"
}
},
{
"key": "哔哩视频",
"name": "哔哩|视频",
@ -682,7 +594,7 @@
},
{
"key": "小斑快映",
"name": "小斑快映4K弹幕",
"name": "快映4K弹幕",
"type": 3,
"api": "csp_PanWebShare",
"searchable": 1,
@ -920,16 +832,6 @@
"type": "list"
}
},
{
"key": "懒盘",
"name": "懒盘4K弹幕",
"type": 3,
"api": "./js/cloud.min.js",
"ext": "./js/懒盘.js",
"style": {
"type": "list"
}
},
{
"key": "百酷",
"name": "百酷4K弹幕",
@ -1015,16 +917,6 @@
"filterable": 1,
"changeable": 1
},
{
"key": "米搜",
"name": "米搜|搜索",
"type": 3,
"api": "./js/cloud.min.js",
"ext": "./js/米搜.js",
"style": {
"type": "list"
}
},
{
"key": "人人分享站",
"name": "人人|搜索",
@ -1045,16 +937,6 @@
"type": "list"
}
},
{
"key": "夸克盘搜",
"name": "盘搜|搜索",
"type": 3,
"api": "./js/cloud.min.js",
"ext": "./js/夸克盘搜.js",
"style": {
"type": "list"
}
},
{
"key": "星芽短剧",
"name": "星芽|短剧",
@ -1087,11 +969,26 @@
"playerType": 2
},
{
"key": "短剧",
"name": "短剧网|短剧",
"key": "爱看短剧",
"name": "爱看|短剧",
"type": 3,
"api": "csp_HBPQ",
"ext": "./XBPQ/短剧网.json"
"api": "./py/爱看短剧.py",
"searchable": 1,
"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": "短剧屋",
@ -1137,6 +1034,39 @@
"filterable": 1,
"playerType": 2
},
{
"key": "零度影视",
"name": "零度|影视",
"type": 3,
"api": "./py/零度影视.py",
"searchable": 1,
"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": "追星影视",
"name": "追星|影视",
"type": 3,
"api": "./py/追星影视.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "厂长影视",
"name": "厂长|影视",
@ -1264,6 +1194,20 @@
"quickSearch": 1,
"filterable": 1
},
{
"key": "明星影视",
"name": "明星|影视",
"type": 3,
"api": "csp_HBPQ",
"ext": "./XBPQ/明星影视.json"
},
{
"key": "麦田影视",
"name": "麦田|影视",
"type": 3,
"api": "csp_HBPQ",
"ext": "./XBPQ/麦田影视.json"
},
{
"key": "海纳影视",
"name": "海纳|影视",
@ -1271,6 +1215,13 @@
"api": "csp_HBPQ",
"ext": "./XBPQ/海纳影视.json"
},
{
"key": "免费影视",
"name": "免费|影视",
"type": 3,
"api": "csp_HBPQ",
"ext": "./XBPQ/免费影视.json"
},
{
"key": "面包影视",
"name": "面包|影视",
@ -1562,13 +1513,6 @@
"api": "./js/drpy2.min.js",
"ext": "./js/花子动漫.js"
},
{
"key": "樱花动漫",
"name": "樱花|动漫",
"type": 3,
"api": "./js/drpy2.min.js",
"ext": "./js/樱花动漫.js"
},
{
"key": "动画片",
"name": "动画片|动漫",
@ -1634,7 +1578,10 @@
"api": "csp_QnMp4",
"searchable": 1,
"quickSearch": 1,
"filterable": 1
"filterable": 1,
"ext": {
"url": "https://www.pkmp4.xyz,https://www.qwnull.com,https://www.qwmkv.com,https://www.qwfilm.com,https://www.qnmp4.com,https://www.qnnull.com,https://www.qnhot.com"
}
},
{
"key": "80S",
@ -1741,20 +1688,6 @@
"quickSearch": 1,
"filterable": 1
},
{
"key": "阿里云盘",
"name": "阿里|云盘",
"type": 3,
"api": "csp_PanAli",
"searchable": 0,
"filterable": 0,
"changeable": 0,
"style": {
"type": "list",
"ratio": 1.433
},
"ext": "./json/aliShare.json"
},
{
"key": "夸克云盘",
"name": "夸克|云盘",
@ -1829,12 +1762,6 @@
},
"ext": "./json/alist.json"
},
{
"key": "网络直播",
"name": "网络|直播",
"type": 3,
"api": "./py/网络直播.py"
},
{
"key": "88看球",
"name": "88看球",
@ -1845,6 +1772,18 @@
"type": "list"
}
},
{
"key": "网络直播",
"name": "网络|直播",
"type": 3,
"api": "./py/网络直播.py"
},
{
"key": "哔哩直播",
"name": "哔哩|直播",
"type": 3,
"api": "./py/哔哩直播.py"
},
{
"key": "哔哩合集",
"name": "哔哩|合集",
@ -2049,7 +1988,7 @@
"searchable": 0,
"changeable": 0,
"indexs": 0,
"ext": "https://9877.kstore.space/Market/single.json"
"ext": "https://pizazz.s3.bitiful.net/single.json"
},
{
"key": "push_agent",

View File

@ -31,90 +31,83 @@ var rule = {
二级: {
title: "h1&&Text",
img: "img&&src",
desc: "",
content: "span&&Text",
tabs: `js: pdfh = jsp.pdfh;
pdfa = jsp.pdfa;
pd = jsp.pd;
TABS = []
let d = pdfa(html, 'span a');
let tabsa = [];
let tabsq = [];
let tabsm = false;
let tabse = false;
d.forEach(function(it) {
let burl = pdfh(it, 'a&&href');
if (burl.startsWith("https://pan.quark.cn/s/")) {
tabsq.push("夸克网盘");
} else if (burl.startsWith("magnet")) {
tabsm = true;
} else if (burl.startsWith("ed2k")) {
tabse = true;
}
});
if (tabsm === true) {
TABS.push("磁力");
}
if (tabse === true) {
TABS.push("电驴");
}
let tmpIndex;
tmpIndex = 1;
tabsa.forEach(function(it) {
TABS.push(it + tmpIndex);
tmpIndex = tmpIndex + 1;
});
tmpIndex = 1;
tabsq.forEach(function(it) {
TABS.push(it + tmpIndex);
tmpIndex = tmpIndex + 1;
});
log('alyps TABS >>>>>>>>>>>>>>>>>>' + TABS);`,
lists: `js: log(TABS);
pdfh = jsp.pdfh;
pdfa = jsp.pdfa;
pd = jsp.pd;
LISTS = [];
let d = pdfa(html, 'span a');
let lista = [];
let listq = [];
let listm = [];
let liste = [];
d.forEach(function(it) {
let burl = pdfh(it, 'a&&href');
let title = pdfh(it, 'a&&Text');
log('alyps title >>>>>>>>>>>>>>>>>>>>>>>>>>' + title);
log('alyps burl >>>>>>>>>>>>>>>>>>>>>>>>>>' + burl);
let loopresult = title + '$' + burl;
if (burl.startsWith("https://pan.quark.cn/s/")) {
if (TABS.length == 1) {
burl = burl.replace("?entry=sjss", ""),
burl = "http://127.0.0.1:9978/proxy?do=quark&type=push&confirm=0&url=" + encodeURIComponent(burl);
} else {
burl = burl.replace("?entry=sjss", ""),
burl = "http://127.0.0.1:9978/proxy?do=quark&type=push&url=" + encodeURIComponent(burl);
desc: ".info:eq(0)&&Text",
content: ".content&&Text",
tabs: `js:
pdfh = jsp.pdfh;
pdfa = jsp.pdfa;
pd = jsp.pd;
TABS = [];
let d = pdfa(html, 'span a');
let tabsq = [];
let tabsb = [];
let tabsm = false;
let tabse = false;
d.forEach(function(it) {
let burl = pdfh(it, 'a&&href');
if (burl.includes("pan.quark.cn/s/")) {
tabsq.push("夸克网盘");
} else if (burl.includes("pan.baidu.com/s/")) {
tabsb.push("百度网盘");
} else if (burl.startsWith("magnet")) {
tabsm = true;
} else if (burl.startsWith("ed2k")) {
tabse = true;
}
loopresult = title + '$' + burl;
listq.push(loopresult);
} else if (burl.startsWith("magnet")) {
listm.push(loopresult);
} else if (burl.startsWith("ed2k")) {
liste.push(loopresult);
}
});
if (listm.length > 0) {
LISTS.push(listm.reverse());
}
if (liste.length > 0) {
LISTS.push(liste.reverse());
}
lista.forEach(function(it) {
LISTS.push([it]);
});
listq.forEach(function(it) {
LISTS.push([it]);
});`,
});
if (tabsb.length > 0) TABS.push("百度网盘");
if (tabsq.length > 0) TABS.push("夸克网盘");
if (tabsm) TABS.push("磁力");
if (tabse) TABS.push("电驴");
log('生成TABS: ' + JSON.stringify(TABS));`,
lists: `js:
pdfh = jsp.pdfh;
pdfa = jsp.pdfa;
pd = jsp.pd;
LISTS = [];
let d = pdfa(html, 'span a');
let listm = [];
let liste = [];
let listq = [];
let listb = [];
d.forEach(function(it) {
let burl = pdfh(it, 'a&&href');
let title = pdfh(it, 'a&&Text');
let loopresult = title + '$' + burl;
if (burl.includes("pan.quark.cn/s/")) {
burl = burl.split("?")[0];
loopresult = title + '$' + burl;
listq.push(loopresult);
} else if (burl.includes("pan.baidu.com/s/")) {
let codeMatch = title.match(/提取码[:]?\s*(\w{4})|(\w{4})(?=提取|百度|网盘)/i);
if (codeMatch) {
let code = codeMatch[1] || codeMatch[2];
burl += '#' + code;
}
loopresult = title + '$' + burl;
listb.push(loopresult);
} else if (burl.startsWith("magnet")) {
listm.push(loopresult);
} else if (burl.startsWith("ed2k")) {
liste.push(loopresult);
}
});
if (listb.length > 0) LISTS.push(listb);
if (listq.length > 0) LISTS.push(listq);
if (listm.length > 0) LISTS.push(listm);
if (liste.length > 0) LISTS.push(liste);
if (LISTS.length === 0 && listq.length > 0) {
LISTS = [listq];
}`,
},
搜索: 'li:has(img);h2&&Text;img&&data-original;.tags&&Text;a&&href',
}
};

View File

@ -1,52 +0,0 @@
var rule = {
title: '懒盘搜',
host: 'https://qkpanso.com/',
hostJs: '',
headers: {
'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
},
编码: 'utf-8',
timeout: 5000,
url: 'https://qkpanso.com/search?q=fyclass&format=video&page=fypage',
filter_url: '',
detailUrl: '',
searchUrl: 'https://qkpanso.com/search?q=**&format=video&exact=true&page=fypage',
searchable: 1,
quickSearch: 1,
filterable: 1,
class_name: '',
class_url: '',
proxy_rule: '',
sniffer: false,
isVideo: '',
play_parse: true,
parse_url: '',
lazy: "js:\n input = 'push://' + input;\n ",
limit: 9,
double: false,
// 推荐: '*',
一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'http://pic-smzy.oss-cn-beijing.aliyuncs.com/images/5e/2a/1410241152a3eca2eca7ace140ed1c0c01b12a5e.png\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
二级: {
title: 'h1&&Text',
img: 'img&&src',
desc: '.card-text:eq(2)&&Text;;;;',
content: 'body&&.semi-space-loose-vertical&&a&&href',
tabs: "js:TABS = ['夸克盘搜']",
lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
},
搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'http://pic-smzy.oss-cn-beijing.aliyuncs.com/images/5e/2a/1410241152a3eca2eca7ace140ed1c0c01b12a5e.png\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
类型: '影视',
homeUrl: 'https://qkpanso.com/',
二级访问前: '',
encoding: 'utf-8',
search_encoding: '',
图片来源: '',
图片替换: '',
play_json: [],
pagecount: {},
tab_remove: [],
tab_order: [],
tab_rename: {},
}

View File

@ -1,52 +0,0 @@
var rule = {
title: '懒盘搜',
host: 'https://www.lzpanx.com/',
hostJs: '',
headers: {
'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
},
编码: 'utf-8',
timeout: 5000,
url: 'https://www.lzpanx.com/search?q=fyclass&format=video&page=fypage',
filter_url: '',
detailUrl: '',
searchUrl: 'https://www.lzpanx.com/search?q=**&format=video&exact=true&page=fypage',
searchable: 1,
quickSearch: 1,
filterable: 1,
class_name: '剧集&电影&短剧&动漫&综艺',
class_url: '剧集&电影&短网剧&动漫&综艺',
proxy_rule: '',
sniffer: false,
isVideo: '',
play_parse: true,
parse_url: '',
lazy: "js:\n input = 'push://' + input;\n ",
limit: 9,
double: false,
// 推荐: '*',
一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://ww1.sinaimg.cn/mw690/006faMndly1htmb1m08adj30e20e2q3m.jpg\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
二级: {
title: 'h1&&Text',
img: 'img&&src',
desc: '.card-text:eq(2)&&Text;;;;',
content: 'body&&.semi-space-loose-vertical&&a&&href',
tabs: "js:TABS = ['懒盘']",
lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
},
搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://ww1.sinaimg.cn/mw690/006faMndly1htmb1m08adj30e20e2q3m.jpg\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
类型: '影视',
homeUrl: 'https://www.lzpanx.com/',
二级访问前: '',
encoding: 'utf-8',
search_encoding: '',
图片来源: '',
图片替换: '',
play_json: [],
pagecount: {},
tab_remove: [],
tab_order: [],
tab_rename: {},
}

View File

@ -1,52 +0,0 @@
var rule = {
title: '米搜',
host: 'https://misoso.cc/',
hostJs: '',
headers: {
'User-Agent': 'Mozilla/5.0 (Linux; Android 11; Pixel 5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.91 Mobile Safari/537.36',
},
编码: 'utf-8',
timeout: 5000,
url: 'https://misoso.cc/search?q=fyclass&format=video&page=fypage',
filter_url: '',
detailUrl: '',
searchUrl: 'https://misoso.cc/search?q=**&format=video&exact=true&page=fypage',
searchable: 1,
quickSearch: 1,
filterable: 1,
class_name: '',
class_url: '',
proxy_rule: '',
sniffer: false,
isVideo: '',
play_parse: true,
parse_url: '',
lazy: "js:\n input = 'push://' + input;\n ",
limit: 9,
double: false,
// 推荐: '*',
一级: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://is2-ssl.mzstatic.com/image/thumb/Purple123/v4/49/25/97/49259775-1a6b-ba62-3c28-b27bf6712ade/source/1024x1024bb.jpg\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
二级: {
title: 'h1&&Text',
img: 'img&&src',
desc: '.card-text:eq(2)&&Text;;;;',
content: 'body&&.semi-space-loose-vertical&&a&&href',
tabs: "js:TABS = ['米搜']",
lists: "js:\n LISTS = [];\n let lists1 = pdfa(html, 'body&&.semi-space-loose-vertical').map(it => {\n let _tt = pdfh(it, 'span&&title');\n let _uu = pdfh(it, 'a&&href');\n return _tt + '$' + _uu;\n });\n LISTS.push(lists1);\n ",
},
搜索: 'js:\n let html = fetch(input);\n let list = pdfa(html, "body&&.semi-space-medium-vertical");\n VODS = list.map(x => {\n let remarks = pdfh(x, "div&&img&&alt");\n // 过滤掉包含"迅雷云盘"的内容\n if(remarks.includes("迅雷云盘") || remarks.includes("115") || remarks.includes("阿里")) return null;\n return {\n vod_name: pdfh(x, "div&&a&&title"),\n vod_pic: \'https://is2-ssl.mzstatic.com/image/thumb/Purple123/v4/49/25/97/49259775-1a6b-ba62-3c28-b27bf6712ade/source/1024x1024bb.jpg\',\n vod_remarks: remarks,\n vod_content: remarks,\n vod_id: pdfh(x, "div&&a&&href")\n }\n }).filter(x => x !== null);\n ',
cate_exclude: '首页|留言|APP|下载|资讯|新闻|动态',
tab_exclude: '猜你|喜欢|下载|剧情|榜|评论',
类型: '影视',
homeUrl: 'https://misoso.cc/',
二级访问前: '',
encoding: 'utf-8',
search_encoding: '',
图片来源: '',
图片替换: '',
play_json: [],
pagecount: {},
tab_remove: [],
tab_order: [],
tab_rename: {},
}

View File

@ -1,5 +1,5 @@
{
"SiteUrl": "https://haimian.eu.org,https://www.haimianxz.com,https://www.hmxz.org,https://www.5536806.xyz,http://haimian.eu.org",
"SiteUrl": "https://www.hmxz.org",
"Classes": [
{
"type_name": "电影",

View File

@ -1,5 +1,5 @@
{
"SiteUrl": "https://www.leijing.xyz,https://www.leijing1.com,https://leijing.xyz,https://leijing1.com",
"SiteUrl": "https://www.leijing1.com,https://leijing.xyz,https://leijing1.com",
"Classes": [
{
"type_name": "电影",
@ -30,5 +30,5 @@
"type_id": "42317879720298"
}
],
"Cookie": "cms_token=56a64ae62a2a4886969598e328cee63b; JSESSIONID=AF2C33C0D62CAA2DE48DE44BCE31DB8B; cms_accessToken=ebbd3e56dbcd460eabc86edd3d0d00b7; cms_refreshToken=e1cda4d4d6894ec2a6166f5fd28c8a79"
"Cookie": "cms_token=91643744d93a42f98e15b6784f0bd310; JSESSIONID=D92622710E6342FD11574AC11CF9DFC6; cms_accessToken=7dab23285f764ee3a0b8d84abdff2fe1; cms_refreshToken=2f4d43120dcc4c258c80d0a1cd2df559"
}

314
潇洒/py/哔哩直播.py Normal file
View File

@ -0,0 +1,314 @@
# coding=utf-8
# !/usr/bin/python
"""
作者 丢丢喵 🚓 内容均从互联网收集而来 仅供交流学习使用 版权归原创者所有 如侵犯了您的权益 请通知作者 将及时删除侵权内容
====================Diudiumiao====================
"""
from Crypto.Util.Padding import unpad
from Crypto.Util.Padding import pad
from urllib.parse import unquote
from Crypto.Cipher import ARC4
from urllib.parse import quote
from base.spider import Spider
from Crypto.Cipher import AES
from datetime import datetime
from bs4 import BeautifulSoup
from base64 import b64decode
import urllib.request
import urllib.parse
import datetime
import binascii
import requests
import base64
import json
import time
import sys
import re
import os
sys.path.append('..')
xurl = "https://search.bilibili.com"
xurl1 = "https://api.live.bilibili.com"
headerx = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0'
}
class Spider(Spider):
global xurl
global xurl1
global headerx
def getName(self):
return "首页"
def init(self, extend):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def extract_middle_text(self, text, start_str, end_str, pl, start_index1: str = '', end_index2: str = ''):
if pl == 3:
plx = []
while True:
start_index = text.find(start_str)
if start_index == -1:
break
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
break
middle_text = text[start_index + len(start_str):end_index]
plx.append(middle_text)
text = text.replace(start_str + middle_text + end_str, '')
if len(plx) > 0:
purl = ''
for i in range(len(plx)):
matches = re.findall(start_index1, plx[i])
output = ""
for match in matches:
match3 = re.search(r'(?:^|[^0-9])(\d+)(?:[^0-9]|$)', match[1])
if match3:
number = match3.group(1)
else:
number = 0
if 'http' not in match[0]:
output += f"#{match[1]}${number}{xurl}{match[0]}"
else:
output += f"#{match[1]}${number}{match[0]}"
output = output[1:]
purl = purl + output + "$$$"
purl = purl[:-3]
return purl
else:
return ""
else:
start_index = text.find(start_str)
if start_index == -1:
return ""
end_index = text.find(end_str, start_index + len(start_str))
if end_index == -1:
return ""
if pl == 0:
middle_text = text[start_index + len(start_str):end_index]
return middle_text.replace("\\", "")
if pl == 1:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
jg = ' '.join(matches)
return jg
if pl == 2:
middle_text = text[start_index + len(start_str):end_index]
matches = re.findall(start_index1, middle_text)
if matches:
new_list = [f'{item}' for item in matches]
jg = '$$$'.join(new_list)
return jg
def homeContent(self, filter):
result = {}
result = {"class": [{"type_id": "", "type_name": "舞蹈"},
{"type_id": "音乐", "type_name": "音乐"},
{"type_id": "手游", "type_name": "手游"},
{"type_id": "网游", "type_name": "网游"},
{"type_id": "单机游戏", "type_name": "单机游戏"},
{"type_id": "虚拟主播", "type_name": "虚拟主播"},
{"type_id": "电台", "type_name": "电台"},
{"type_id": "体育", "type_name": "体育"},
{"type_id": "聊天", "type_name": "聊天"},
{"type_id": "娱乐", "type_name": "娱乐"},
{"type_id": "电影", "type_name": "影视"},
{"type_id": "新闻", "type_name": "新闻"}]
}
return result
def homeVideoContent(self):
pass
def categoryContent(self, cid, pg, filter, ext):
result = {}
videos = []
if pg:
page = int(pg)
else:
page = 1
url = f'{xurl}/live?keyword={cid}&page={str(page)}'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
res = detail.text
doc = BeautifulSoup(res, "lxml")
soups = doc.find_all('div', class_="video-list-item")
for vod in soups:
names = vod.find('h3', class_="bili-live-card__info--tit")
name = names.text.strip().replace('直播中', '')
id = names.find('a')['href']
id = self.extract_middle_text(id, 'bilibili.com/', '?', 0)
pic = vod.find('img')['src']
if 'http' not in pic:
pic = "https:" + pic
remarks = vod.find('a', class_="bili-live-card__info--uname")
remark = remarks.text.strip()
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
videos.append(video)
result = {'list': videos}
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
did = ids[0]
result = {}
videos = []
xianlu = ''
bofang = ''
url = f'{xurl1}/xlive/web-room/v2/index/getRoomPlayInfo?room_id={did}&platform=web&protocol=0,1&format=0,1,2&codec=0,1'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
data = detail.json()
content = '欢迎观看哔哩直播'
setup = data['data']['playurl_info']['playurl']['stream']
nam = 0
for vod in setup:
try:
host = vod['format'][nam]['codec'][0]['url_info'][1]['host']
except (KeyError, IndexError):
continue
base = vod['format'][nam]['codec'][0]['base_url']
extra = vod['format'][nam]['codec'][0]['url_info'][1]['extra']
id = host + base + extra
nam = nam + 1
namc = f"{nam}号线路"
bofang = bofang + namc + '$' + id + '#'
bofang = bofang[:-1]
xianlu = '哔哩专线'
videos.append({
"vod_id": did,
"vod_content": content,
"vod_play_from": xianlu,
"vod_play_url": bofang
})
result['list'] = videos
return result
def playerContent(self, flag, id, vipFlags):
result = {}
result["parse"] = 0
result["playUrl"] = ''
result["url"] = id
result["header"] = headerx
return result
def searchContentPage(self, key, quick, pg):
result = {}
videos = []
if pg:
page = int(pg)
else:
page = 1
url = f'{xurl}/live?keyword={key}&page={str(page)}'
detail = requests.get(url=url, headers=headerx)
detail.encoding = "utf-8"
res = detail.text
doc = BeautifulSoup(res, "lxml")
soups = doc.find_all('div', class_="video-list-item")
for vod in soups:
names = vod.find('h3', class_="bili-live-card__info--tit")
name = names.text.strip().replace('直播中', '')
id = names.find('a')['href']
id = self.extract_middle_text(id, 'bilibili.com/', '?', 0)
pic = vod.find('img')['src']
if 'http' not in pic:
pic = "https:" + pic
remarks = vod.find('a', class_="bili-live-card__info--uname")
remark = remarks.text.strip()
video = {
"vod_id": id,
"vod_name": name,
"vod_pic": pic,
"vod_remarks": remark
}
videos.append(video)
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def searchContent(self, key, quick, pg="1"):
return self.searchContentPage(key, quick, '1')
def localProxy(self, params):
if params['type'] == "m3u8":
return self.proxyM3u8(params)
elif params['type'] == "media":
return self.proxyMedia(params)
elif params['type'] == "ts":
return self.proxyTs(params)
return None

169
潇洒/py/想看影视.py Normal file
View File

@ -0,0 +1,169 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import re
import sys
from Crypto.Hash import MD5
sys.path.append("..")
import json
import time
from pyquery import PyQuery as pq
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def action(self, action):
pass
def destroy(self):
pass
host = 'https://www.lreeok.vip'
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'sec-ch-ua-platform': '"macOS"',
'sec-ch-ua': '"Not/A)Brand";v="8", "Chromium";v="134", "Google Chrome";v="134"',
'Origin': host,
'Referer': f"{host}/",
}
def homeContent(self, filter):
data = self.getpq(self.fetch(self.host, headers=self.headers).text)
result = {}
classes = []
for k in data('.head-more.box a').items():
i = k.attr('href')
if i and '/vod' in i:
classes.append({
'type_name': k.text(),
'type_id': re.search(r'\d+', i).group(0)
})
result['class'] = classes
result['list'] = self.getlist(data('.border-box.diy-center .public-list-div'))
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
body = {'type': tid, 'class': '', 'area': '', 'lang': '', 'version': '', 'state': '', 'letter': '', 'page': pg}
data = self.post(f"{self.host}/index.php/api/vod", headers=self.headers, data=self.getbody(body)).json()
result = {}
result['list'] = data['list']
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
data = self.getpq(self.fetch(f"{self.host}/voddetail/{ids[0]}.html", headers=self.headers).text)
v = data('.detail-info.lightSpeedIn .slide-info')
vod = {
'vod_year': v.eq(-1).text(),
'vod_remarks': v.eq(0).text(),
'vod_actor': v.eq(3).text(),
'vod_director': v.eq(2).text(),
'vod_content': data('.switch-box #height_limit').text()
}
np = data('.anthology.wow.fadeInUp')
ndata = np('.anthology-tab .swiper-wrapper .swiper-slide')
pdata = np('.anthology-list .anthology-list-box ul')
play, names = [], []
for i in range(len(ndata)):
n = ndata.eq(i)('a')
n('span').remove()
names.append(n.text())
vs = []
for v in pdata.eq(i)('li').items():
vs.append(f"{v.text()}${v('a').attr('href')}")
play.append('#'.join(vs))
vod["vod_play_from"] = "$$$".join(names)
vod["vod_play_url"] = "$$$".join(play)
result = {"list": [vod]}
return result
def searchContent(self, key, quick, pg="1"):
# data = self.getpq(self.fetch(f"{self.host}/vodsearch/{key}----------{pg}---.html", headers=self.headers).text)
# return {'list': self.getlist(data('.row-right .search-box .public-list-bj')), 'page': pg}
data = self.fetch(
f"{self.host}/index.php/ajax/suggest?mid={pg}&wd={key}&limit=999&timestamp={int(time.time() * 1000)}",
headers=self.headers).json()
videos = []
for i in data['list']:
videos.append({
'vod_id': i['id'],
'vod_name': i['name'],
'vod_pic': i['pic']
})
return {'list': videos, 'page': pg}
def playerContent(self, flag, id, vipFlags):
h, p = {"User-Agent": "okhttp/3.14.9"}, 1
url = f"{self.host}{id}"
data = self.getpq(self.fetch(url, headers=self.headers).text)
try:
jstr = data('.player .player-left script').eq(0).text()
jsdata = json.loads(jstr.split('aaa=')[-1])
body = {'url': jsdata['url']}
if not re.search(r'\.m3u8|\.mp4', body['url']):
data = self.post(f"{self.host}/okplay/api_config.php", headers=self.headers,
data=self.getbody(body)).json()
url = data.get('url') or data.get('data', {}).get('url')
p = 0
except Exception as e:
print('错误信息:', e)
pass
result = {}
result["parse"] = p
result["url"] = url
result["header"] = h
return result
def localProxy(self, param):
pass
def getbody(self, params):
t = int(time.time())
h = MD5.new()
h.update(f"DS{t}DCC147D11943AF75".encode('utf-8'))
key = h.hexdigest()
params.update({'time': t, 'key': key})
return params
def getlist(self, data):
videos = []
for i in data.items():
id = i('a').attr('href')
if id:
id = re.search(r'\d+', id).group(0)
img = i('img').attr('data-src')
if img and 'url=' in img: img = f'{self.host}{img}'
videos.append({
'vod_id': id,
'vod_name': i('img').attr('alt'),
'vod_pic': img,
'vod_remarks': i('.public-prt').text() or i('.public-list-prb').text()
})
return videos
def getpq(self, data):
try:
return pq(data)
except Exception as e:
print(f"{str(e)}")
return pq(data.encode('utf-8'))

109
潇洒/py/爱看短剧.py Normal file
View File

@ -0,0 +1,109 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import sys
from pyquery import PyQuery as pq
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host='http://www.toule.top'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
'Referer':f'{host}/',
'Origin':host
}
def homeContent(self, filter):
data=self.getpq()
result = {}
classes = []
for k in data('.swiper-wrapper .swiper-slide').items():
classes.append({
'type_name': k.text(),
'type_id': k.text()
})
result['class'] = classes
result['list'] = self.getlist(data('.container.items ul li'))
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
data=self.getpq(f"/index.php/vod/show/class/{tid}/id/1/page/{pg}.html")
result = {}
result['list'] = self.getlist(data('.container.items ul li'))
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
data=self.getpq(ids[0])
v=data('.container.detail-content')
vod = {
'vod_remarks': v('.items-tags a').text(),
'vod_content': v('.text-content .detail').text(),
'vod_play_from': '爱看短剧',
'vod_play_url': '#'.join([f"{i.text()}${i('a').attr('href')}" for i in data('.swiper-wrapper .swiper-slide').items()])
}
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
data=self.getpq(f"/index.php/vod/search/page/{pg}/wd/{key}.html")
return {'list':self.getlist(data('.container.items ul li')),'page':pg}
def playerContent(self, flag, id, vipFlags):
data=self.getpq(id)
try:
jstr=data('.player-content script').eq(0).text()
jt=json.loads(jstr.split('=',1)[-1])
p,url=0,jt['url']
except Exception as e:
print(f"获取播放地址失败: {e}")
p,url=1,f'{self.host}{id}'
return {'parse': p, 'url': url, 'header': self.headers}
def localProxy(self, param):
pass
def liveContent(self, url):
pass
def getpq(self, path=''):
data=self.fetch(f"{self.host}{path}",headers=self.headers).text
try:
return pq(data)
except Exception as e:
print(f"{str(e)}")
return pq(data.encode('utf-8'))
def getlist(self,data):
videos = []
for i in data.items():
videos.append({
'vod_id': i('.image-line').attr('href'),
'vod_name': i('img').attr('alt'),
'vod_pic': i('img').attr('src'),
'vod_remarks': i('.remarks.light').text()
})
return videos

View File

@ -146,7 +146,6 @@ class Spider(Spider):
result = {}
cateManual = {
"虎牙": "huya",
"哔哩": "bili",
"抖音": "douyin",
"斗鱼": "douyu",
"网易": "wangyi"

182
潇洒/py/追星影视.py Normal file
View File

@ -0,0 +1,182 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import random
import string
import sys
from base64 import b64decode, b64encode
from urllib.parse import quote, unquote
sys.path.append('..')
import concurrent.futures
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host='https://xy.51gy.top'
headers = {
'User-Agent': 'okhttp/4.9.1',
'mark-time': 'null',
'fn-api-version': '3.1.9',
'versionCode': '19',
'product': 'gysg',
'sg': '22664e555e0015684f988833803b3055',
}
def homeContent(self, filter):
data=self.fetch(f"{self.host}/api.php/vod/type", headers=self.headers).json()
result,filters,videos = {},{},[]
classes = [{'type_id': i['type_name'], 'type_name': i['type_name']} for i in data['list'][1:]]
body={'token':'', 'type_id':data['list'][0]['type_id']}
ldata=self.post(f"{self.host}/api.php/vod/category", data=body, headers=self.headers).json()
for i in ldata['data']['banner']:
videos.append({
'vod_id':i.get('vod_id'),
'vod_name':i.get('vod_name'),
'vod_pic':i.get('vod_pic_thumb')
})
with concurrent.futures.ThreadPoolExecutor(max_workers=len(classes)) as executor:
future_to_aid = {executor.submit(self.fts, aid): aid for aid in classes}
for future in concurrent.futures.as_completed(future_to_aid):
aid = future_to_aid[future]
try:
aid_id, fts = future.result()
filters[aid_id] = fts
except Exception as e:
print(f"Error processing aid {aid}: {e}")
result['class'] = classes
result['filters'] = filters
result['list'] = videos
return result
def homeVideoContent(self):
pass
def categoryContent(self, tid, pg, filter, extend):
params={'state':extend.get('state',tid) or tid,'class':extend.get('classes','全部'),'area':extend.get('area','全部'),'year':extend.get('year','全部'),'lang':extend.get('lang','全部'),'version':extend.get('version','全部'),'pg':pg}
data=self.fetch(f"{self.host}/api.php/vod/list", params=params, headers=self.headers).json()
result = {}
videos = []
for i in data['data']['list']:
if str(i.get('vod_id', 0)) != '0':
videos.append({
'vod_id': i.get('vod_id'),
'vod_name': i.get('vod_name'),
'vod_pic': i.get('vod_pic'),
'vod_year': f"{i.get('vod_score')}",
'vod_remarks': i.get('vod_remarks')
})
result['list'] = videos
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
body={'ids':ids[0],'uni_code':self.getunc(),'ac':'detail','token':''}
data=self.post(f"{self.host}/api.php/vod/detail2", data=body, headers=self.headers).json()
v=data['data']
vod = {
'type_name': v.get('type_name'),
'vod_year': v.get('vod_year'),
'vod_area': v.get('vod_area'),
'vod_lang': v.get('vod_lang'),
'vod_remarks': v.get('vod_remarks'),
'vod_actor': v.get('vod_actor'),
'vod_director': v.get('vod_director'),
'vod_content': v.get('vod_content')
}
n,p=[],[]
for i in v['vod_play_list']:
pp=i['player_info']
n.append(pp['show'])
np=[]
for j in i['urls']:
cd={'parse':pp.get('parse'),'url':j['url'],'headers':pp.get('headers')}
np.append(f"{j['name']}${self.e64(json.dumps(cd))}")
p.append('#'.join(np))
vod.update({'vod_play_from':'$$$'.join(n),'vod_play_url':'$$$'.join(p)})
return {'list':[vod]}
def searchContent(self, key, quick, pg="1"):
data=self.fetch(f"{self.host}/api.php/vod/search", params={'keywords':key,'type':'1','pg':pg}, headers=self.headers).json()
return {'list':data['list'],'page':pg}
def playerContent(self, flag, id, vipFlags):
ids=json.loads(self.d64(id))
headers = {}
urls=ids['url']
if ids.get('headers'):
hs=ids['headers'].split('=>',1)
headers[hs[0].strip()]=hs[-1].strip()
if isinstance(ids.get('parse'), list) and len(ids['parse']) > 0:
urls=[]
for i,x in enumerate(ids['parse']):
su=f"{self.getProxyUrl()}&url={quote(x+ids['url'])}"
urls.extend([f'解析{i+1}',su])
return {'parse': 0, 'url': urls, 'header': headers}
def localProxy(self, param):
try:
body = {'url':unquote(param['url'])}
data=self.post(f"{self.host}/api.php/vod/m_jie_xi", data=body, headers=self.headers).json()
url=data.get('url') or data['data'].get('url')
return [302,'video/MP2T',None,{'Location':url}]
except:
return []
def liveContent(self, url):
pass
def fts(self, tdata):
params={'state':tdata['type_id'],'pg':'1'}
data = self.fetch(f"{self.host}/api.php/vod/list", params=params, headers=self.headers).json()
ftks = ["classes", "area", "lang", "year", "version", "state"]
filter = [
{
'name': k,
'key': k,
'value': [{'n': i, 'v': i} for i in v.split(',')]
}
for k, v in data['data']['classes']["type_extend"].items()
if k in ftks and v
]
return tdata['type_id'],filter
def getunc(self):
chars = string.ascii_lowercase + string.digits
data = ''.join(random.choice(chars) for _ in range(16))
return self.e64(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:
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:
return ""

147
潇洒/py/锦鲤短剧.py Normal file
View File

@ -0,0 +1,147 @@
from base.spider import Spider
import re,sys,json
sys.path.append('..')
class Spider(Spider):
api_host = 'https://api.jinlidj.com'
origin = 'https://www.jinlidj.com'
api_path = '/api/search'
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36",
'Content-Type': "application/json",
'accept-language': "zh-CN,zh;q=0.9",
'cache-control': "no-cache",
'origin': origin,
'pragma': "no-cache",
'priority': "u=1, i",
'referer': origin+'/',
'sec-ch-ua': "\"Not)A;Brand\";v=\"8\", \"Chromium\";v=\"138\", \"Google Chrome\";v=\"138\"",
'sec-ch-ua-mobile': "?0",
'sec-ch-ua-platform': "\"Windows\"",
'sec-fetch-dest': "empty",
'sec-fetch-mode': "cors",
'sec-fetch-site': "same-site"
}
def homeContent(self, filter):
return {'class': [{'type_id': 1, 'type_name': '情感关系'}, {'type_id': 2, 'type_name': '成长逆袭'}, {'type_id': 3, 'type_name': '奇幻异能'}, {'type_id': 4, 'type_name': '战斗热血'}, {'type_id': 5, 'type_name': '伦理现实'}, {'type_id': 6, 'type_name': '时空穿越'}, {'type_id': 7, 'type_name': '权谋身份'}]}
def homeVideoContent(self):
payload = {
"page": 1,
"limit": 24,
"type_id": "",
"year": "",
"keyword": ""
}
response = self.post(f"{self.api_host}{self.api_path}", data=json.dumps(payload), headers=self.headers).json()
data = response['data']
videos = []
for i in data['list']:
videos.append({
'vod_id': i.get('vod_id'),
'vod_name': i.get('vod_name'),
'vod_class': i.get('vod_class'),
'vod_pic': i.get('vod_pic'),
'vod_year': i.get('vod_year'),
'vod_remarks': i.get('vod_total')+'',
'vod_score': i.get('vod_score')
})
return {'list': videos}
def detailContent(self, ids):
response = self.post(f'{self.api_host}/api/detail/{ids[0]}', data=json.dumps({}), headers=self.headers).json()
data = response['data']
videos = []
vod_play_url = ''
for name,url in data['player'].items():
vod_play_url += f'{name}${url}#'
vod_play_url.rstrip('#')
videos.append({
'vod_id': data.get('vod_id'),
'vod_name': data.get('vod_name'),
'vod_content': data.get('vod_blurb'),
'vod_remarks': '集数:' + data.get('vod_total'),
"vod_director": data.get('vod_director'),
"vod_actor": data.get('vod_actor'),
'vod_year': data.get('vod_year'),
'vod_area': data.get('vod_area'),
'vod_play_from': '锦鲤短剧',
'vod_play_url': vod_play_url
})
return {'list': videos}
def searchContent(self, key, quick, pg="1"):
payload = {
"page": pg,
"limit": 24,
"type_id": "",
"keyword": key
}
response = self.post(f'{self.api_host}{self.api_path}', data=json.dumps(payload), headers=self.headers).json()
data = response['data']
videos = []
for i in data['list']:
videos.append({
"vod_id": i['vod_id'],
"vod_name": i['vod_name'],
"vod_class": i['vod_class'],
"vod_pic": i['vod_pic'],
'vod_year': i.get('vod_year'),
"vod_remarks": i['vod_total'] + ''
})
return {'list': videos, 'page': pg, 'total': data['total'], 'limit': 24}
def categoryContent(self, tid, pg, filter, extend):
payload = {
"page": pg,
"limit": 24,
"type_id": tid,
"year": "",
"keyword": ""
}
response = self.post(f'{self.api_host}{self.api_path}', data=json.dumps(payload), headers=self.headers).json()
data = response['data']
videos = []
for i in data['list']:
videos.append({
'vod_id': i.get('vod_id'),
'vod_name': i.get('vod_name'),
'vod_class': i.get('vod_class'),
'vod_pic': i.get('vod_pic'),
'vod_remarks': i.get('vod_total')+'',
'vod_year': i.get('vod_year'),
'vod_score': i.get('vod_score')
})
return {'list': videos}
def playerContent(self, flag, id, vipflags):
parse = 0
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36'}
try:
response = self.fetch(id, headers=self.headers).text
match = re.search(r'let\s+data\s*=\s*(\{[^}]*http[^}]*\});', response, re.IGNORECASE)
data = match.group(1)
data2 = json.loads(data)
url = data2['url']
except Exception:
url, parse, header = id, 1, self.headers
return {'parse': parse, 'url': url,'header': header}
def init(self, extend=''):
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
def localProxy(self, param):
pass

220
潇洒/py/零度影视.py Normal file
View File

@ -0,0 +1,220 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import random
import sys
from base64 import b64encode, b64decode
from concurrent.futures import ThreadPoolExecutor
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
did=self.getdid()
self.headers.update({'deviceId': did})
token=self.gettk()
self.headers.update({'token': token})
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host='http://ldys.sq1005.top'
headers = {
'User-Agent': 'okhttp/4.12.0',
'client': 'app',
'deviceType': 'Android'
}
def homeContent(self, filter):
data=self.post(f"{self.host}/api/v1/app/screen/screenType", headers=self.headers).json()
result = {}
cate = {
"类型": "classify",
"地区": "region",
"年份": "year"
}
sort={
'key':'sreecnTypeEnum',
'name': '排序',
'value':[{'n':'最新','v':'NEWEST'},{'n':'人气','v':'POPULARITY'},{'n':'评分','v':'COLLECT'},{'n':'热搜','v':'HOT'}]
}
classes = []
filters = {}
for k in data['data']:
classes.append({
'type_name': k['name'],
'type_id': k['id']
})
filters[k['id']] = []
for v in k['children']:
filters[k['id']].append({
'name': v['name'],
'key': cate[v['name']],
'value':[{'n':i['name'],'v':i['name']} for i in v['children']]
})
filters[k['id']].append(sort)
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
jdata={"condition":64,"pageNum":1,"pageSize":40}
data=self.post(f"{self.host}/api/v1/app/recommend/recommendSubList", headers=self.headers, json=jdata).json()
return {'list':self.getlist(data['data']['records'])}
def categoryContent(self, tid, pg, filter, extend):
jdata = {
'condition': {
'sreecnTypeEnum': 'NEWEST',
'typeId': tid,
},
'pageNum': int(pg),
'pageSize': 40,
}
jdata['condition'].update(extend)
data = self.post(f"{self.host}/api/v1/app/screen/screenMovie", headers=self.headers, json=jdata).json()
result = {}
result['list'] = self.getlist(data['data']['records'])
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
ids = ids[0].split('@@')
jdata = {"id": int(ids[0]), "typeId": ids[-1]}
v = self.post(f"{self.host}/api/v1/app/play/movieDesc", headers=self.headers, json=jdata).json()
v = v['data']
vod = {
'type_name': v.get('classify'),
'vod_year': v.get('year'),
'vod_area': v.get('area'),
'vod_actor': v.get('star'),
'vod_director': v.get('director'),
'vod_content': v.get('introduce'),
'vod_play_from': '',
'vod_play_url': ''
}
c = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json()
l = c['data']['moviePlayerList']
n = {str(i['id']): i['moviePlayerName'] for i in l}
m = jdata.copy()
m.update({'playerId': str(l[0]['id'])})
pd = self.getv(m, c['data']['episodeList'])
if len(l)-1:
with ThreadPoolExecutor(max_workers=len(l)-1) as executor:
future_to_player = {executor.submit(self.getd, jdata, player): player for player in l[1:]}
for future in future_to_player:
try:
o,p = future.result()
pd.update(self.getv(o,p))
except Exception as e:
print(f"请求失败: {e}")
w, e = [],[]
for i, x in pd.items():
if x:
w.append(n[i])
e.append(x)
vod['vod_play_from'] = '$$$'.join(w)
vod['vod_play_url'] = '$$$'.join(e)
return {'list': [vod]}
def searchContent(self, key, quick, pg="1"):
jdata={
"condition": {
"value": key
},
"pageNum": int(pg),
"pageSize": 40
}
data=self.post(f"{self.host}/api/v1/app/search/searchMovie", headers=self.headers, json=jdata).json()
return {'list':self.getlist(data['data']['records']),'page':pg}
def playerContent(self, flag, id, vipFlags):
jdata=json.loads(self.d64(id))
data = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json()
try:
params={'playerUrl':data['data']['url'],'playerId':jdata['playerId']}
pd=self.fetch(f"{self.host}/api/v1/app/play/analysisMovieUrl", headers=self.headers, params=params).json()
url,p=pd['data'],0
except Exception as e:
print(f"请求失败: {e}")
url,p=data['data']['url'],0
return {'parse': p, 'url': url, 'header': {'User-Agent': 'okhttp/4.12.0'}}
def localProxy(self, param):
pass
def liveContent(self, url):
pass
def gettk(self):
data=self.fetch(f"{self.host}/api/v1/app/user/visitorInfo", headers=self.headers).json()
return data['data']['token']
def getdid(self):
did=self.getCache('ldid')
if not did:
hex_chars = '0123456789abcdef'
did =''.join(random.choice(hex_chars) for _ in range(16))
self.setCache('ldid',did)
return did
def getd(self,jdata,player):
x = jdata.copy()
x.update({'playerId': str(player['id'])})
response = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=x).json()
return x, response['data']['episodeList']
def getv(self,d,c):
f={d['playerId']:''}
g=[]
for i in c:
j=d.copy()
j.update({'episodeId':str(i['id'])})
g.append(f"{i['episode']}${self.e64(json.dumps(j))}")
f[d['playerId']]='#'.join(g)
return f
def getlist(self,data):
videos = []
for i in data:
videos.append({
'vod_id': f"{i['id']}@@{i['typeId']}",
'vod_name': i.get('name'),
'vod_pic': i.get('cover'),
'vod_year': i.get('year'),
'vod_remarks': i.get('totalEpisode')
})
return videos
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 ""

Binary file not shown.

View File

@ -133,6 +133,14 @@
"searchable": 1,
"changeable": 1
},
{
"key": "WexXuexi",
"name": "💓综合┃4K💓",
"type": 3,
"api": "csp_WexXuexiGuard",
"searchable": 1,
"changeable": 1
},
{
"key": "WexfeimaoziyuanGuard",
"name": "💓肥猫┃4K💓",
@ -200,14 +208,6 @@
"searchable": 1,
"changeable": 1
},
{
"key": "WexXuexi",
"name": "💓原盘┃4K💓",
"type": 3,
"api": "csp_WexXuexiGuard",
"searchable": 1,
"changeable": 1
},
{
"key": "Wexalllive",
"name": "💓‍聚合┃直播💓‍",
@ -735,6 +735,22 @@
"searchable": 1,
"changeable": 0
},
{
"key": "WexHaiYinsoGuard",
"name": "🎠海音┃综合🎠",
"type": 3,
"api": "csp_WexHaiYinsoGuard",
"searchable": 1,
"changeable": 0
},
{
"key": "WexZhaoPansoGuard",
"name": "🎠找盘┃综合🎠",
"type": 3,
"api": "csp_WexZhaoPansoGuard",
"searchable": 1,
"changeable": 0
},
{
"key": "115",
"name": "💓我的┃115💓",

Binary file not shown.

View File

@ -51,7 +51,7 @@
"http://feimaoai.site",
"http://www.labi88.sbs",
"http://fmao.site",
"https://fmao.shop",
"http://fmao.shop",
"http://xiaocge.fun"
],
"threadinfo": {
@ -99,98 +99,153 @@
"name": "🏜┃潮流┃APP",
"type": 3,
"api": "csp_AppRJ",
"ext": "vxw35/hHSj07Q+maxQzOVMq1rjRCOTXpUCx8iKu5jIg="
"ext": "http://v.rbotv.cn"
},
{
"key": "梦回",
"name": "🏈┃梦回┃APP",
"type": 3,
"api": "csp_AppRJ",
"ext": "Z2MNziRBwjQxqaBuUxNkDRyvTntIkN1cOXhjyWgjCTc="
"ext": "http://v.lkuys.cn"
},
{
"key": "星辉",
"name": "🦢┃星辉┃APP",
"type": 3,
"api": "csp_AppRJ",
"ext": "jsSMEuhTZIAHjnUoLBzKdlRu5exzno6M4efF8LzwjWM="
"ext": "http://tt.ysdqjs.cn"
},
{
"key": "肥猫",
"name": "🐼┃肥猫┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "4wSF77WNzVYxpDQF3Vf/eAoVqKf1nKdv5MpKtrhokKJN288M3lP16ZeoM36I71sJ"
"ext": {
"url": "https://mac.555618.xyz",
"dataKey": "#getapp@TMD@2025",
"siteApi": "get",
"version": "201"
}
},
{
"key": "干饭",
"name": "🍚┃干饭┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "Ygx7wpu8Zcm70i88iO9WMRvxQZdMqIapMqvlBKPmjCP60xrvslJlJFIwHepviTkKbgCK9nn25i0k7xnWVX0Y7g=="
"ext": {
"url": "./txt/coffee.txt",
"dataKey": "qwertyuiopqwertm",
"siteApi": "qiji",
"version": "301"
}
},
{
"key": "光盘",
"name": "📀┃光盘┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "5ztMiKPUcHLR7TRusm5rHsPgFhlXstdsZuadxKTvmldCWgloYKsAMQA+2Sr7eCUj"
"ext": {
"url": "https://app.xifanys.com",
"dataKey": "HM6Ly9yeS4ya3dvL",
"siteApi": "get",
"version": "119"
}
},
{
"key": "行动",
"name": "😌┃行动┃APP",
"type": 3,
"api": "csp_AppSy",
"ext": "iUYplHbim/qVptUBrzCuqk72erYn+xHvZVGawkGUOqtLGtiWlDcWpUagYzdfPYeECbG+IjVf7Mhz2ZqZ70k6X72tkUhQDNEpIN/XScTGlUE="
"api": "csp_AppGet",
"ext": {
"url": "./txt/xfdd.txt",
"dataKey": "xasdasdqwertyuio",
"siteApi": "get",
"version": "304"
}
},
{
"key": "再来",
"name": "✌┃再来┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "gKqtScS9maa2YW8G9NNOtUsSxDvraRvNMDiazqRUzDYklDH0MMxfu9ZPgRdHKBcI"
"ext": {
"url": "./txt/kan.txt",
"dataKey": "2268331221bobobo",
"siteApi": "get",
"version": "107"
}
},
{
"key": "一碗",
"name": "🥣┃一碗┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "cOS1UvSbYM3xW1jXF4QBcYkSAhpFDDoh7c53wGBZEyxDhNunH+Feq+RreiUkQsV1"
"ext": {
"url": "./txt/89.txt",
"dataKey": "#getapp@TMD@2025",
"siteApi": "get",
"version": "102"
}
},
{
"key": "猫抓",
"name": "🐱┃猫抓┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "uOx4WoHPKe5LbDsNX+u7yPZ/33148sHvWON6kZmflkJm9N9mwXRjT6S/UJau4nVckbCH+h6lvztfl/Ag6BM8Ng=="
"ext": {
"url": "https://qjappcms.ll4k.xyz",
"dataKey": "1yGA85sJ5STtE7uj",
"siteApi": "qiji",
"version": ""
}
},
{
"key": "仓鼠",
"name": "🐹┃耗子┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "uOx4WoHPKe5LbDsNX+u7yPwU6Ups0duUFWxZbQqPo2oF+jkgV7jbW6aOO1kS4+9PdDFoRHhRxKKvcUOgzloTKw=="
"ext": {
"url": "./txt/lanyingxmy.txt",
"dataKey": "ca94b06ca359d80e",
"siteApi": "qiji",
"version": ""
}
},
{
"key": "蔬菜",
"name": "🫛┃蔬菜┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "II6EBjEX9APRjw9zkvfuusSMPTiiXvPm9pK9Zv0wFaq4AWWODp1x+otEA1t0ZFTSq+p0AmaiQvE9cq5Hdl/Vlg=="
"ext": {
"url": "http://huohu.yihn.cc",
"dataKey": "huohushipingetap",
"siteApi": "get",
"version": "140"
}
},
{
"key": "黑猫",
"name": "🐼┃黑猫┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "cLeOXZXsq65z+2s8qkWsD+GYhlTxoLn2cNnZiAXyiQPBfOCR3nVfgmZWdkvjSaqJFD9Bmb+U0RVCI9wv8BMVIg=="
"ext": {
"url": "https://dm.xxdm123.top:9991",
"dataKey": "0fe3b5781782c621",
"siteApi": "get",
"version": "203"
}
},
{
"key": "囧次元",
"name": "🤡┃次元┃APP",
"key": "小丑",
"name": "🤡┃小丑┃APP",
"type": 3,
"api": "csp_AppGet",
"ext": "DUFPNFXbc0nhQ9S/akUS1016tumg5c0CXsmywMwiuf27+XAPWObdQRDR22Lgih/6189f+1INKiaNm4cQ+AY7CA=="
"ext": {
"url": "http://172.247.192.138:18520",
"dataKey": "SuNlEkOLAoWJj1Oe",
"siteApi": "qiji",
"version": ""
}
},
{
"key": "csp_Jpys",
@ -212,17 +267,11 @@
"api": "csp_KmeiJu"
},
{
"key": "csp_FourK",
"name": "🐿️┃绝对┃影视",
"key": "csp_Xlys",
"name": "🏔️┃修罗┃磁力",
"type": 3,
"api": "csp_FourK",
"ext": "https://www.4kvm.tv"
},
{
"key": "csp_Lkdy",
"name": "🏔️┃来看┃影视",
"type": 3,
"api": "csp_Lkdy"
"api": "csp_Xlys",
"ext": "https://xl01.com.de"
},
{
"key": "csp_Tvyb",
@ -234,8 +283,7 @@
"key": "csp_Qiyou",
"name": "🥝┃奇优┃影视",
"type": 3,
"api": "csp_Qiyou",
"ext": "http://www.dyxz2.com/"
"api": "csp_Qiyou"
},
{
"key": "荐片",
@ -291,7 +339,24 @@
"searchable": 1,
"quickSearch": 1,
"filterable": 1,
"ext": "https://www.czzy77.com"
"ext": "https://www.czzymovie.com"
},
{
"key": "猎手影视",
"name": "🐆┃猎手┃影视",
"type": 3,
"api": "./api/LSYS.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "零度",
"name": "🥶┃零度┃影视",
"type": 3,
"api": "./api/lingdu.py"
},
{
"key": "csp_AppXY",
@ -299,6 +364,28 @@
"type": 3,
"api": "csp_AppXY"
},
{
"key": "河马短剧",
"name": "🦛┃河马┃短剧",
"type": 3,
"api": "./api/HMDJ.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "偷乐短剧",
"name": "☺️┃偷乐┃短剧",
"type": 3,
"api": "./api/TLDJ.py",
"searchable": 1,
"changeable": 1,
"quickSearch": 1,
"filterable": 1,
"playerType": 2
},
{
"key": "csp_SP360",
"name": "📺┃360┃官源",
@ -328,6 +415,35 @@
"api": "csp_Dm84",
"ext": "https://dm84.net"
},
{
"key": "56动漫",
"name": "5⃣┃56┃动漫",
"type": 3,
"api": "./api/drpy2.min.js",
"ext": "./js/56DM.js"
},
{
"key": "NT动漫",
"name": "🧬┃NT┃动漫",
"type": 3,
"api": "./api/drpy2.min.js",
"ext": "./js/NTDM.js"
},
{
"key": "Anime1",
"name": "🌏┃Anime┃动漫",
"type": 3,
"api": "./api/drpy2.min.js",
"ext": "./js/Anime1.js"
},
{
"key": "csp_FourK",
"name": "🌋┃绝对┃影视",
"type": 3,
"playerType": "2",
"api": "csp_FourK",
"ext": "https://www.4kvm.tv"
},
{
"key": "csp_FirstAid",
"name": "🚑┃急救┃教学",

380
肥猫/api/HMDJ.py Normal file
View File

@ -0,0 +1,380 @@
# -*- coding: utf-8 -*-
import requests
import re
import json
import traceback
import sys
from urllib.parse import quote
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.cateManual = {
"甜宠": "462",
"古装仙侠": "1102",
"现代言情": "1145",
"青春": "1170",
"豪门恩怨": "585",
"逆袭": "417-464",
"重生": "439-465",
"系统": "1159",
"总裁": "1147",
"职场商战": "943"
}
self.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"
}
def getName(self):
return "河马短剧"
def init(self, extend=""):
return
def fetch(self, url, headers=None, retry=2):
"""统一的网络请求接口"""
if headers is None:
headers = self.headers
for i in range(retry + 1):
try:
response = requests.get(url, headers=headers, timeout=10, allow_redirects=True)
response.raise_for_status()
return response
except Exception as e:
if i == retry:
print(f"请求异常: {url}, 错误: {str(e)}")
return None
continue
def isVideoFormat(self, url):
video_formats = ['.mp4', '.mkv', '.avi', '.wmv', '.m3u8', '.flv', '.rmvb']
return any(format in url.lower() for format in video_formats)
def manualVideoCheck(self):
return False
def homeContent(self, filter):
result = {}
classes = [{'type_name': k, 'type_id': v} for k, v in self.cateManual.items()]
result['class'] = classes
try:
result['list'] = self.homeVideoContent()['list']
except:
result['list'] = []
return result
def homeVideoContent(self):
videos = []
try:
response = self.fetch(self.siteUrl)
if not response:
return {'list': []}
html_content = response.text
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 not next_data_match:
return {'list': []}
next_data_json = json.loads(next_data_match.group(1))
page_props = next_data_json.get("props", {}).get("pageProps", {})
# 处理轮播图数据
if "bannerList" in page_props:
for banner in page_props["bannerList"]:
if banner.get("bookId"):
videos.append({
"vod_id": f"/drama/{banner['bookId']}",
"vod_name": banner.get("bookName", ""),
"vod_pic": banner.get("coverWap", ""),
"vod_remarks": f"{banner.get('statusDesc', '')} {banner.get('totalChapterNum', '')}".strip()
})
# 处理SEO分类推荐
if "seoColumnVos" in page_props:
for column in page_props["seoColumnVos"]:
for book in column.get("bookInfos", []):
if book.get("bookId"):
videos.append({
"vod_id": f"/drama/{book['bookId']}",
"vod_name": book.get("bookName", ""),
"vod_pic": book.get("coverWap", ""),
"vod_remarks": f"{book.get('statusDesc', '')} {book.get('totalChapterNum', '')}".strip()
})
# 去重处理
seen = set()
unique_videos = []
for video in videos:
key = (video["vod_id"], video["vod_name"])
if key not in seen:
seen.add(key)
unique_videos.append(video)
except Exception as e:
print(f"获取首页推荐内容出错: {e}")
unique_videos = []
return {'list': unique_videos}
def categoryContent(self, tid, pg, filter, extend):
result = {'list': [], 'page': pg, 'pagecount': 1, 'limit': 20, 'total': 0}
url = f"{self.siteUrl}/browse/{tid}/{pg}"
response = self.fetch(url)
if not response:
return result
html_content = response.text
next_data_match = re.search(r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', html_content, re.DOTALL)
if not next_data_match:
return result
try:
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", [])
videos = []
for book in book_list:
if book.get("bookId"):
videos.append({
"vod_id": f"/drama/{book['bookId']}",
"vod_name": book.get("bookName", ""),
"vod_pic": book.get("coverWap", ""),
"vod_remarks": f"{book.get('statusDesc', '')} {book.get('totalChapterNum', '')}".strip()
})
result.update({
'list': videos,
'page': int(current_page),
'pagecount': total_pages,
'limit': len(videos),
'total': len(videos) * total_pages if videos else 0
})
except Exception as e:
print(f"分类内容获取出错: {e}")
return result
def searchContent(self, key, quick, pg=1):
return self.searchContentPage(key, quick, pg)
def searchContentPage(self, key, quick, pg=1):
result = {'list': [], 'page': pg, 'pagecount': 1, 'limit': 20, 'total': 0}
search_url = f"{self.siteUrl}/search?searchValue={quote(key)}&page={pg}"
response = self.fetch(search_url)
if not response:
return result
html_content = response.text
next_data_match = re.search(r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', html_content, re.DOTALL)
if not next_data_match:
return result
try:
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)
book_list = page_props.get("bookList", [])
videos = []
for book in book_list:
if book.get("bookId"):
videos.append({
"vod_id": f"/drama/{book['bookId']}",
"vod_name": book.get("bookName", ""),
"vod_pic": book.get("coverWap", ""),
"vod_remarks": f"{book.get('statusDesc', '')} {book.get('totalChapterNum', '')}".strip()
})
result.update({
'list': videos,
'pagecount': total_pages,
'total': len(videos) * total_pages if videos else 0
})
except Exception as e:
print(f"搜索内容出错: {e}")
return result
def detailContent(self, ids):
result = {'list': []}
if not ids:
return result
vod_id = ids[0]
if not vod_id.startswith('/drama/'):
vod_id = f'/drama/{vod_id}'
drama_url = f"{self.siteUrl}{vod_id}"
response = self.fetch(drama_url)
if not response:
return result
html = response.text
next_data_match = re.search(r'<script id="__NEXT_DATA__" type="application/json">(.*?)</script>', html, re.DOTALL)
if not next_data_match:
return result
try:
next_data = json.loads(next_data_match.group(1))
page_props = next_data.get("props", {}).get("pageProps", {})
book_info = page_props.get("bookInfoVo", {})
chapter_list = page_props.get("chapterList", [])
if not book_info.get("bookId"):
return result
# 基本信息
categories = [c.get("name", "") for c in book_info.get("categoryList", [])]
performers = [p.get("name", "") for p in book_info.get("performerList", [])]
vod = {
"vod_id": vod_id,
"vod_name": book_info.get("title", ""),
"vod_pic": book_info.get("coverWap", ""),
"type_name": ",".join(categories),
"vod_year": "",
"vod_area": book_info.get("countryName", ""),
"vod_remarks": f"{book_info.get('statusDesc', '')} {book_info.get('totalChapterNum', '')}".strip(),
"vod_actor": ", ".join(performers),
"vod_director": "",
"vod_content": book_info.get("introduction", "")
}
# 处理剧集
play_urls = self.processEpisodes(vod_id, chapter_list)
if play_urls:
vod['vod_play_from'] = '河马剧场'
vod['vod_play_url'] = '$$$'.join(play_urls)
result['list'] = [vod]
except Exception as e:
print(f"详情页解析出错: {e}")
traceback.print_exc()
return result
def processEpisodes(self, vod_id, chapter_list):
play_urls = []
episodes = []
for chapter in chapter_list:
chapter_id = chapter.get("chapterId", "")
chapter_name = chapter.get("chapterName", "")
if not chapter_id or not chapter_name:
continue
# 尝试获取直接视频链接
video_url = self.getDirectVideoUrl(chapter)
if video_url:
episodes.append(f"{chapter_name}${video_url}")
continue
# 回退方案
episodes.append(f"{chapter_name}${vod_id}${chapter_id}${chapter_name}")
if episodes:
play_urls.append("#".join(episodes))
return play_urls
def getDirectVideoUrl(self, chapter):
if "chapterVideoVo" not in chapter or not chapter["chapterVideoVo"]:
return None
video_info = chapter["chapterVideoVo"]
for key in ["mp4", "mp4720p", "vodMp4Url"]:
if key in video_info and video_info[key] and ".mp4" in video_info[key].lower():
return video_info[key]
return None
def playerContent(self, flag, id, vipFlags):
result = {
"parse": 0,
"url": id,
"header": json.dumps(self.headers)
}
# 如果已经是视频链接直接返回
if 'http' in id and ('.mp4' in id or '.m3u8' in id):
return result
# 解析参数
parts = id.split('$')
if len(parts) < 2:
return result
drama_id = parts[0].replace('/drama/', '')
chapter_id = parts[1]
# 尝试获取视频链接
video_url = self.getEpisodeVideoUrl(drama_id, chapter_id)
if video_url:
result["url"] = video_url
return result
def getEpisodeVideoUrl(self, drama_id, chapter_id):
episode_url = f"{self.siteUrl}/episode/{drama_id}/{chapter_id}"
response = self.fetch(episode_url)
if not response:
return None
html = response.text
# 方法1: 从NEXT_DATA提取
next_data_match = re.search(r'<script id="__NEXT_DATA__".*?>(.*?)</script>', html, re.DOTALL)
if next_data_match:
try:
next_data = json.loads(next_data_match.group(1))
page_props = next_data.get("props", {}).get("pageProps", {})
chapter_info = page_props.get("chapterInfo", {})
if chapter_info and "chapterVideoVo" in chapter_info:
video_info = chapter_info["chapterVideoVo"]
for key in ["mp4", "mp4720p", "vodMp4Url"]:
if key in video_info and video_info[key] and ".mp4" in video_info[key].lower():
return video_info[key]
except:
pass
# 方法2: 直接从HTML提取
mp4_matches = re.findall(r'(https?://[^"\']+\.mp4)', html)
if mp4_matches:
for url in mp4_matches:
if chapter_id in url or drama_id in url:
return url
return mp4_matches[0]
return None
def localProxy(self, param):
return [200, "video/MP2T", {}, param]
def destroy(self):
pass

279
肥猫/api/LSYS.py Normal file
View File

@ -0,0 +1,279 @@
# coding=utf-8
# !/usr/bin/python
# by嗷呜(finally)
import sys
import os
sys.path.append("..")
import re
import hashlib
import hmac
import random
import string
from Crypto.Util.Padding import unpad
from concurrent.futures import ThreadPoolExecutor
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5, AES
from base64 import b64encode, b64decode
import json
import time
from base.spider import Spider
class Spider(Spider):
def getName(self):
return "电影猎手"
def init(self, extend=""):
self.device = self.device_id()
self.host = self.gethost()
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def action(self, action):
pass
def destroy(self):
pass
t = str(int(time.time()))
def homeContent(self, filter):
result = {}
filters = {}
classes = []
bba = self.url()
data = self.fetch(f"{self.host}/api/v1/app/config?pack={bba[0]}&signature={bba[1]}", headers=self.header()).text
data1 = self.aes(data)
dy = {"class":"类型","area":"地区","lang":"语言","year":"年份","letter":"字母","by":"排序","sort":"排序"}
data1['data']['movie_screen']['sort'].pop(0)
for item in data1['data']['movie_screen']['sort']:
item['n'] = item.pop('name')
item['v'] = item.pop('value')
for item in data1['data']['movie_screen']['filter']:
has_non_empty_field = False
classes.append({"type_name": item["name"], "type_id": str(item["id"])})
for key in dy:
if key in item and item[key]:
has_non_empty_field = True
break
if has_non_empty_field:
filters[str(item["id"])] = []
filters[str(item["id"])].append(
{"key": 'sort', "name": '排序', "value": data1['data']['movie_screen']['sort']})
for dkey in item:
if dkey in dy and item[dkey]:
item[dkey].pop(0)
value_array = [
{"n": value.strip(), "v": value.strip()}
for value in item[dkey]
if value.strip() != ""
]
filters[str(item["id"])].append(
{"key": dkey, "name": dy[dkey], "value": value_array}
)
result["class"] = classes
result["filters"] = filters
return result
def homeVideoContent(self):
bba = self.url()
url = f'{self.host}/api/v1/movie/index_recommend?pack={bba[0]}&signature={bba[1]}'
data = self.fetch(url, headers=self.header()).json()
videos = []
for item in data['data']:
if len(item['list']) > 0:
for it in item['list']:
try:
videos.append(self.voides(it))
except Exception as e:
continue
result = {"list": videos}
return result
def categoryContent(self, tid, pg, filter, extend):
body = {"type_id": tid, "sort": extend.get("sort", "by_default"), "class": extend.get("class", "类型"),
"area": extend.get("area", "地区"), "year": extend.get("year", "年份"), "page": str(pg),
"pageSize": "21"}
result = {}
list = []
bba = self.url(body)
url = f"{self.host}/api/v1/movie/screen/list?pack={bba[0]}&signature={bba[1]}"
data = self.fetch(url, headers=self.header()).json()['data']['list']
for item in data:
list.append(self.voides(item))
result["list"] = list
result["page"] = pg
result["pagecount"] = 9999
result["limit"] = 90
result["total"] = 999999
return result
def detailContent(self, ids):
body = {"id": ids[0]}
bba = self.url(body)
url = f'{self.host}/api/v1/movie/detail?pack={bba[0]}&signature={bba[1]}'
data = self.fetch(url, headers=self.header()).json()['data']
video = {'vod_name': data.get('name'),'type_name': data.get('type_name'),'vod_year': data.get('year'),'vod_area': data.get('area'),'vod_remarks': data.get('dynami'),'vod_content': data.get('content')}
play = []
names = []
tasks = []
for itt in data["play_from"]:
name = itt["name"]
a = []
if len(itt["list"]) > 0:
names.append(name)
play.append(self.playeach(itt['list']))
else:
tasks.append({"movie_id": ids[0], "from_code": itt["code"]})
names.append(name)
if tasks:
with ThreadPoolExecutor(max_workers=len(tasks)) as executor:
results = executor.map(self.playlist, tasks)
for result in results:
if result:
play.append(result)
else:
play.append("")
video["vod_play_from"] = "$$$".join(names)
video["vod_play_url"] = "$$$".join(play)
result = {"list": [video]}
return result
def searchContent(self, key, quick, pg=1):
body = {"keyword": key, "sort": "", "type_id": "0", "page": str(pg), "pageSize": "10",
"res_type": "by_movie_name"}
bba = self.url(body)
url = f"{self.host}/api/v1/movie/search?pack={bba[0]}&signature={bba[1]}"
data = self.fetch(url, headers=self.header()).json()['data'].get('list')
videos = []
for it in data:
try:
videos.append(self.voides(it))
except Exception as e:
continue
result = {"list": videos, "page": pg}
return result
def playerContent(self, flag, id, vipFlags):
url = id
if "m3u8" not in url and "mp4" not in url:
try:
add = id.split('|||')
data = {"from_code": add[0], "play_url": add[1], "episode_id": add[2], "type": "play"}
bba = self.url(data)
data2 = self.fetch(f"{self.host}/api/v1/movie_addr/parse_url?pack={bba[0]}&signature={bba[1]}",
headers=self.header()).json()['data']
url = data2.get('play_url') or data2.get('download_url')
try:
url1 = self.fetch(url, headers=self.header(), allow_redirects=False).headers['Location']
if url1 and "http" in url1:
url = url1
except:
pass
except Exception as e:
pass
if '.jpg' in url or '.jpeg' in url or '.png' in url:
url = self.getProxyUrl() + "&url=" + b64encode(url.encode('utf-8')).decode('utf-8') + "&type=m3u8"
result = {}
result["parse"] = 0
result["url"] = url
result["header"] = {'user-agent': 'okhttp/4.9.2'}
return result
def localProxy(self, param):
url = b64decode(param["url"]).decode('utf-8')
durl = url[:url.rfind('/')]
data = self.fetch(url, headers=self.header()).content.decode("utf-8")
lines = data.strip().split('\n')
for index, string in enumerate(lines):
# if 'URI="' in string and 'http' not in string:
# lines[index] = index
# 暂时预留,貌似用不到
if '#EXT' not in string and 'http' not in string:
lines[index] = durl + ('' if string.startswith('/') else '/') + string
data = '\n'.join(lines)
return [200, "application/vnd.apple.mpegur", data]
def device_id(self):
characters = string.ascii_lowercase + string.digits
random_string = ''.join(random.choices(characters, k=32))
return random_string
def gethost(self):
headers = {
'User-Agent': 'okhttp/4.9.2',
'Connection': 'Keep-Alive',
}
response = self.fetch('https://app-site.ecoliving168.com/domain_v5.json', headers=headers).json()
url = response['api_service'].replace('/api/', '')
return url
def header(self):
headers = {
'User-Agent': 'Android',
'Accept': 'application/prs.55App.v2+json',
'timestamp': self.t,
'x-client-setting': '{"pure-mode":1}',
'x-client-uuid': '{"device_id":' + self.device + '}, "type":1,"brand":"Redmi", "model":"M2012K10C", "system_version":30, "sdk_version":"3.1.0.7"}',
'x-client-version': '3096 '
}
return headers
def url(self, id=None):
if not id:
id = {}
id["timestamp"] = self.t
public_key = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA02F/kPg5A2NX4qZ5JSns+bjhVMCC6JbTiTKpbgNgiXU+Kkorg6Dj76gS68gB8llhbUKCXjIdygnHPrxVHWfzmzisq9P9awmXBkCk74Skglx2LKHa/mNz9ivg6YzQ5pQFUEWS0DfomGBXVtqvBlOXMCRxp69oWaMsnfjnBV+0J7vHbXzUIkqBLdXSNfM9Ag5qdRDrJC3CqB65EJ3ARWVzZTTcXSdMW9i3qzEZPawPNPe5yPYbMZIoXLcrqvEZnRK1oak67/ihf7iwPJqdc+68ZYEmmdqwunOvRdjq89fQMVelmqcRD9RYe08v+xDxG9Co9z7hcXGTsUquMxkh29uNawIDAQAB'
encrypted_text = json.dumps(id)
public_key = RSA.import_key(b64decode(public_key))
cipher = PKCS1_v1_5.new(public_key)
encrypted_message = cipher.encrypt(encrypted_text.encode('utf-8'))
encrypted_message_base64 = b64encode(encrypted_message).decode('utf-8')
result = encrypted_message_base64.replace('+', '-').replace('/', '_').replace('=', '')
key = '635a580fcb5dc6e60caa39c31a7bde48'
sign = hmac.new(key.encode(), result.encode(), hashlib.md5).hexdigest()
return result, sign
def playlist(self, body):
try:
bba = self.url(body)
url = f'{self.host}/api/v1/movie_addr/list?pack={bba[0]}&signature={bba[1]}'
data = self.fetch(url, headers=self.header()).json()['data']
return self.playeach(data)
except Exception:
return []
def playeach(self,data):
play_urls = []
for it in data:
if re.search(r"mp4|m3u8", it["play_url"]):
play_urls.append(f"{it['episode_name']}${it['play_url']}")
else:
play_urls.append(
f"{it['episode_name']}${it['from_code']}|||{it['play_url']}|||{it['episode_id']}"
)
return '#'.join(play_urls)
def voides(self, item):
if item['name'] or item['title']:
voide = {
"vod_id": item.get('id') or item.get('click'),
'vod_name': item.get('name') or item.get('title'),
'vod_pic': item.get('cover') or item.get('image'),
'vod_year': item.get('year') or item.get('label'),
'vod_remarks': item.get('dynamic') or item.get('sub_title')
}
return voide
def aes(self, text):
text = text.replace('-', '+').replace('_', '/') + '=='
key = b"e6d5de5fcc51f53d"
iv = b"2f13eef7dfc6c613"
cipher = AES.new(key, AES.MODE_CBC, iv)
pt = unpad(cipher.decrypt(b64decode(text)), AES.block_size).decode("utf-8")
return json.loads(pt)

790
肥猫/api/TLDJ.py Normal file
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"]

360
肥猫/api/jsencrypt.js Normal file

File diff suppressed because one or more lines are too long

220
肥猫/api/lingdu.py Normal file
View File

@ -0,0 +1,220 @@
# -*- coding: utf-8 -*-
# by @嗷呜
import json
import random
import sys
from base64 import b64encode, b64decode
from concurrent.futures import ThreadPoolExecutor
sys.path.append('..')
from base.spider import Spider
class Spider(Spider):
def init(self, extend=""):
did=self.getdid()
self.headers.update({'deviceId': did})
token=self.gettk()
self.headers.update({'token': token})
pass
def getName(self):
pass
def isVideoFormat(self, url):
pass
def manualVideoCheck(self):
pass
def destroy(self):
pass
host='http://ldys.sq1005.top'
headers = {
'User-Agent': 'okhttp/4.12.0',
'client': 'app',
'deviceType': 'Android'
}
def homeContent(self, filter):
data=self.post(f"{self.host}/api/v1/app/screen/screenType", headers=self.headers).json()
result = {}
cate = {
"类型": "classify",
"地区": "region",
"年份": "year"
}
sort={
'key':'sreecnTypeEnum',
'name': '排序',
'value':[{'n':'最新','v':'NEWEST'},{'n':'人气','v':'POPULARITY'},{'n':'评分','v':'COLLECT'},{'n':'热搜','v':'HOT'}]
}
classes = []
filters = {}
for k in data['data']:
classes.append({
'type_name': k['name'],
'type_id': k['id']
})
filters[k['id']] = []
for v in k['children']:
filters[k['id']].append({
'name': v['name'],
'key': cate[v['name']],
'value':[{'n':i['name'],'v':i['name']} for i in v['children']]
})
filters[k['id']].append(sort)
result['class'] = classes
result['filters'] = filters
return result
def homeVideoContent(self):
jdata={"condition":64,"pageNum":1,"pageSize":40}
data=self.post(f"{self.host}/api/v1/app/recommend/recommendSubList", headers=self.headers, json=jdata).json()
return {'list':self.getlist(data['data']['records'])}
def categoryContent(self, tid, pg, filter, extend):
jdata = {
'condition': {
'sreecnTypeEnum': 'NEWEST',
'typeId': tid,
},
'pageNum': int(pg),
'pageSize': 40,
}
jdata['condition'].update(extend)
data = self.post(f"{self.host}/api/v1/app/screen/screenMovie", headers=self.headers, json=jdata).json()
result = {}
result['list'] = self.getlist(data['data']['records'])
result['page'] = pg
result['pagecount'] = 9999
result['limit'] = 90
result['total'] = 999999
return result
def detailContent(self, ids):
ids = ids[0].split('@@')
jdata = {"id": int(ids[0]), "typeId": ids[-1]}
v = self.post(f"{self.host}/api/v1/app/play/movieDesc", headers=self.headers, json=jdata).json()
v = v['data']
vod = {
'type_name': v.get('classify'),
'vod_year': v.get('year'),
'vod_area': v.get('area'),
'vod_actor': v.get('star'),
'vod_director': v.get('director'),
'vod_content': v.get('introduce'),
'vod_play_from': '',
'vod_play_url': ''
}
c = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json()
l = c['data']['moviePlayerList']
n = {str(i['id']): i['moviePlayerName'] for i in l}
m = jdata.copy()
m.update({'playerId': str(l[0]['id'])})
pd = self.getv(m, c['data']['episodeList'])
if len(l)-1:
with ThreadPoolExecutor(max_workers=len(l)-1) as executor:
future_to_player = {executor.submit(self.getd, jdata, player): player for player in l[1:]}
for future in future_to_player:
try:
o,p = future.result()
pd.update(self.getv(o,p))
except Exception as e:
print(f"请求失败: {e}")
w, e = [],[]
for i, x in pd.items():
if x:
w.append(n[i])
e.append(x)
vod['vod_play_from'] = '$$$'.join(w)
vod['vod_play_url'] = '$$$'.join(e)
return {'list': [vod]}
def searchContent(self, key, quick, pg="1"):
jdata={
"condition": {
"value": key
},
"pageNum": int(pg),
"pageSize": 40
}
data=self.post(f"{self.host}/api/v1/app/search/searchMovie", headers=self.headers, json=jdata).json()
return {'list':self.getlist(data['data']['records']),'page':pg}
def playerContent(self, flag, id, vipFlags):
jdata=json.loads(self.d64(id))
data = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=jdata).json()
try:
params={'playerUrl':data['data']['url'],'playerId':jdata['playerId']}
pd=self.fetch(f"{self.host}/api/v1/app/play/analysisMovieUrl", headers=self.headers, params=params).json()
url,p=pd['data'],0
except Exception as e:
print(f"请求失败: {e}")
url,p=data['data']['url'],0
return {'parse': p, 'url': url, 'header': {'User-Agent': 'okhttp/4.12.0'}}
def localProxy(self, param):
pass
def liveContent(self, url):
pass
def gettk(self):
data=self.fetch(f"{self.host}/api/v1/app/user/visitorInfo", headers=self.headers).json()
return data['data']['token']
def getdid(self):
did=self.getCache('ldid')
if not did:
hex_chars = '0123456789abcdef'
did =''.join(random.choice(hex_chars) for _ in range(16))
self.setCache('ldid',did)
return did
def getd(self,jdata,player):
x = jdata.copy()
x.update({'playerId': str(player['id'])})
response = self.post(f"{self.host}/api/v1/app/play/movieDetails", headers=self.headers, json=x).json()
return x, response['data']['episodeList']
def getv(self,d,c):
f={d['playerId']:''}
g=[]
for i in c:
j=d.copy()
j.update({'episodeId':str(i['id'])})
g.append(f"{i['episode']}${self.e64(json.dumps(j))}")
f[d['playerId']]='#'.join(g)
return f
def getlist(self,data):
videos = []
for i in data:
videos.append({
'vod_id': f"{i['id']}@@{i['typeId']}",
'vod_name': i.get('name'),
'vod_pic': i.get('cover'),
'vod_year': i.get('year'),
'vod_remarks': i.get('totalEpisode')
})
return videos
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 ""

1
肥猫/js/56DM.js Normal file
View File

@ -0,0 +1 @@
dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJzU25Yqo5ryrJywKICAgIGhvc3Q6ICdodHRwczovL3d3dy41NmRtLmNjLycsCiAgICB1cmw6ICdodHRwczovL3d3dy41NmRtLmNjL3R5cGUvZnljbGFzcy1meXBhZ2UuaHRtbCcsCiAgICBzZWFyY2hVcmw6ICdodHRwczovL3d3dy41NmRtLmNjL3NlYXJjaC8qKi0tLS0tLS0tLS1meXBhZ2UtLS0uaHRtbCcsCiAgICBzZWFyY2hhYmxlOiAyLCAvL+aYr+WQpuWQr+eUqOWFqOWxgOaQnOe0oiwKICAgIHF1aWNrU2VhcmNoOiAwLCAvL+aYr+WQpuWQr+eUqOW/q+mAn+aQnOe0oiwKICAgIGZpbHRlcmFibGU6IDAsIC8v5piv5ZCm5ZCv55So5YiG57G7562b6YCJLAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ1VDX1VBJywgLy8gIkNvb2tpZSI6ICIiCiAgICB9LCAvLyBjbGFzc19wYXJzZTonLnN0dWktaGVhZGVyX19tZW51IGxpOmd0KDApOmx0KDcpO2EmJlRleHQ7YSYmaHJlZjsvKFxcZCspLmh0bWwnLAogICAgY2xhc3NfcGFyc2U6ICcuc251aS1oZWFkZXItbWVudS1uYXYgbGk6Z3QoMCk6bHQoNik7YSYmVGV4dDthJiZocmVmOy4qLyguKj8pLmh0bWwnLAogICAgcGxheV9wYXJzZTogdHJ1ZSwKICAgIGxhenk6IGBqczoKICAgICAgICAgICAgaWYoL1xcLihtM3U4fG1wNCkvLnRlc3QoaW5wdXQpKXsKICAgICAgICAgICAgICAgIGlucHV0ID0ge3BhcnNlOjAsdXJsOmlucHV0fQogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIGlmKHJ1bGUucGFyc2VfdXJsLnN0YXJ0c1dpdGgoJ2pzb246JykpewogICAgICAgICAgICAgICAgICAgIGxldCBwdXJsID0gcnVsZS5wYXJzZV91cmwucmVwbGFjZSgnanNvbjonLCcnKStpbnB1dDsKICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QocHVybCk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSB7cGFyc2U6MCx1cmw6SlNPTi5wYXJzZShodG1sKS51cmx9CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICBpbnB1dD0gcnVsZS5wYXJzZV91cmwraW5wdXQ7IAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGAsCiAgICBsaW1pdDogNiwKICAgIOaOqOiNkDogJy5jQ0JmX0ZBQUVmYmM7bGk7YSYmdGl0bGU7Lmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsOy5kQURfQkJDSSYmVGV4dDthJiZocmVmJywKICAgIGRvdWJsZTogdHJ1ZSwgLy8g5o6o6I2Q5YaF5a655piv5ZCm5Y+M5bGC5a6a5L2NCiAgICDkuIDnuqc6ICcuY0NCZl9GQUFFZmJjIGxpO2EmJnRpdGxlO2EmJmRhdGEtb3JpZ2luYWw7LmRBRF9CQkNJJiZUZXh0O2EmJmhyZWYnLAogICAg5LqM57qnOiB7CiAgICAgICAgInRpdGxlIjogImgxJiZUZXh0IiwKICAgICAgICAiaW1nIjogIi5zdHVpLWNvbnRlbnRfX3RodW1iIC5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCIsCiAgICAgICAgImRlc2MiOiAiLmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMCkmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMSkmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMikmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMykmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoNCkmJlRleHQiLAogICAgICAgICJjb250ZW50IjogIi5kZXRhaWwmJlRleHQiLAogICAgICAgICJ0YWJzIjogIi5jaGFubmVsLXRhYiBsaSIsCiAgICAgICAgImxpc3RzIjogIi5wbGF5LWxpc3QtY29udGVudDplcSgjaWQpIGxpIgogICAgfSwKICAgIOaQnOe0ojogJy5jQ0JmX0ZBQUVmYmNfX2RiRDthJiZ0aXRsZTsubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWw7LmRBRF9CQkNJJiZUZXh0O2EmJmhyZWY7LmNDQmZfRkFBRWZiY19faGNJZGVFJiZwOmVxKDApIHAmJlRleHQnLAp9

1
肥猫/js/Anime1.js Normal file

File diff suppressed because one or more lines are too long

1
肥猫/js/NTDM.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

Binary file not shown.

1
肥猫/txt/89.txt Normal file
View File

@ -0,0 +1 @@
http://app.555618.xyz:1766

1
肥猫/txt/coffee.txt Normal file
View File

@ -0,0 +1 @@
http://111.170.175.120:8596

1
肥猫/txt/kan.txt Normal file
View File

@ -0,0 +1 @@
http://getapp.hiapp.com.cn/

View File

@ -0,0 +1 @@
http://122.228.193.2:9988

1
肥猫/txt/xfdd.txt Normal file
View File

@ -0,0 +1 @@
http://110.42.7.59:9066

View File

@ -4,7 +4,7 @@
"sites": [
{
"key": "豆",
"name": "修复荐片厂长【神秘的哥哥们】",
"name": "修复926看球【神秘的哥哥们】",
"type": 3,
"api": "csp_DouDouGuard",
"indexs": 1,
@ -292,7 +292,8 @@
"changeable": 0,
"style": {
"type": "list"
}
},
"ext": "uqGL1fpJNAUa4uUHi9iMsef1+C/R"
},
{
"key": "88",

Binary file not shown.