Compare commits
13 Commits
fa19704365
...
1ca1dc961e
Author | SHA1 | Date |
---|---|---|
![]() |
1ca1dc961e | |
![]() |
905c84968b | |
![]() |
bb920b4754 | |
![]() |
d622b25c15 | |
![]() |
d8dcb3b0df | |
![]() |
5b3f6879d0 | |
![]() |
db9615a2db | |
![]() |
35ce9e10af | |
![]() |
993f56c921 | |
![]() |
4b7f02622a | |
![]() |
4f8e42c1ac | |
![]() |
2f0c6cbad4 | |
![]() |
6498218406 |
|
@ -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":"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":"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":"校长影视","name":"校长影视|网盘","type":3,"api":"csp_XiaoZhang", "quickSearch":1, "changeable":1, "filterable":1, "timeout":60,"ext":"./lib/tokenm.json$$$https://xzyshd.com$$$proxy$$$1"},
|
||||||
{"key":"Wogg","name":"玩偶哥哥|网盘","type":3,"api":"csp_Wogg","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://wogg.888484.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$WOGG"},
|
{"key":"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"},
|
||||||
|
|
|
@ -67,10 +67,10 @@
|
||||||
{"key":"Local","name":"本地","type":3,"api":"csp_Local"},
|
{"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,
|
{"key":"WebDAV","name":"WebDAV[jar]","type":3,"api":"csp_WebDAV","searchable":1,"filterable":1,"changeable":1,"timeout":60,
|
||||||
"playerType": 2,
|
"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,
|
{"key":"AList","name":"网盘|Alist[jar]","type":3,"api":"csp_AList","searchable":1,"filterable":1,"changeable":1,"timeout":60,
|
||||||
"playerType": 2,
|
"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",
|
{"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": {
|
"style": {
|
||||||
"type": "list",
|
"type": "list",
|
||||||
|
@ -131,13 +131,13 @@
|
||||||
"ratio": 1.1
|
"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": {
|
"style": {
|
||||||
"type": "list",
|
"type": "list",
|
||||||
"ratio": 1.1
|
"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",
|
"key": "FirstAid",
|
||||||
"name": "🚑 急救知识 ",
|
"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":"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":"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":"校长影视","name":"校长影视|网盘","type":3,"api":"csp_XiaoZhang", "quickSearch":1, "changeable":1, "filterable":1, "timeout":60,"ext":"./lib/tokenm.json$$$https://xzyshd.com$$$proxy$$$1"},
|
||||||
{"key":"Wogg","name":"玩偶哥哥|网盘","type":3,"api":"csp_Wogg","quickSearch":1, "changeable":1, "filterable":1, "timeout":60, "ext":"./lib/tokenm.json$$$http://wogg.888484.xyz/$$$noproxy$$$1$$$./lib/wogg.json$$$WOGG"},
|
{"key":"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.
|
@ -1 +1 @@
|
||||||
8a3a79e39b2d2926a0f67bafcaad3baf
|
213184e84baa339b7858108368d7d82f
|
||||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
||||||
f9197036a0cc465e839547f1ee5ccd37
|
6756a20c0bab5e28b16c17299a5d3b9c
|
||||||
|
|
|
@ -11,17 +11,17 @@
|
||||||
"vip_thread_limit_night":"19-23=10",
|
"vip_thread_limit_night":"19-23=10",
|
||||||
"vod_flags":"4kz|auto",
|
"vod_flags":"4kz|auto",
|
||||||
"quark_thread_limit":32,
|
"quark_thread_limit":32,
|
||||||
"quark_thread_limit_night":"19-23=10",
|
"quark_thread_limit_night":"19-23=8",
|
||||||
"quark_is_guest":false,
|
"quark_is_guest":false,
|
||||||
"quark_vip_thread_limit":32,
|
"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",
|
"quark_flags":"4kz|auto",
|
||||||
"uc_thread_limit":10,
|
"uc_thread_limit":10,
|
||||||
"uc_is_vip":false,
|
"uc_is_vip":false,
|
||||||
"uc_vip_thread_limit":10,
|
"uc_vip_thread_limit":10,
|
||||||
"uc_flags":"4kz|auto",
|
"uc_flags":"4kz|auto",
|
||||||
"uc_thread_limit_night":"19-23=10",
|
"uc_thread_limit_night":"19-23=8",
|
||||||
"uc_vip_thread_limit_night":"19-23=10",
|
"uc_vip_thread_limit_night":"19-23=8",
|
||||||
"thunder_thread_limit":2,
|
"thunder_thread_limit":2,
|
||||||
"thunder_is_vip":false,
|
"thunder_is_vip":false,
|
||||||
"thunder_vip_thread_limit":2,
|
"thunder_vip_thread_limit":2,
|
||||||
|
|
|
@ -11,17 +11,17 @@
|
||||||
"vip_thread_limit_night":"19-23=10",
|
"vip_thread_limit_night":"19-23=10",
|
||||||
"vod_flags":"4kz|auto",
|
"vod_flags":"4kz|auto",
|
||||||
"quark_thread_limit":32,
|
"quark_thread_limit":32,
|
||||||
"quark_thread_limit_night":"19-23=10",
|
"quark_thread_limit_night":"19-23=8",
|
||||||
"quark_is_guest":false,
|
"quark_is_guest":false,
|
||||||
"quark_vip_thread_limit":32,
|
"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",
|
"quark_flags":"4kz|auto",
|
||||||
"uc_thread_limit":10,
|
"uc_thread_limit":10,
|
||||||
"uc_is_vip":false,
|
"uc_is_vip":false,
|
||||||
"uc_vip_thread_limit":10,
|
"uc_vip_thread_limit":10,
|
||||||
"uc_flags":"4kz|auto",
|
"uc_flags":"4kz|auto",
|
||||||
"uc_thread_limit_night":"19-23=10",
|
"uc_thread_limit_night":"19-23=8",
|
||||||
"uc_vip_thread_limit_night":"19-23=10",
|
"uc_vip_thread_limit_night":"19-23=8",
|
||||||
"thunder_thread_limit":2,
|
"thunder_thread_limit":2,
|
||||||
"thunder_is_vip":false,
|
"thunder_is_vip":false,
|
||||||
"thunder_vip_thread_limit":2,
|
"thunder_vip_thread_limit":2,
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
7840d0b61f9641a47728e3a92020f35a
|
24ec7cfadef5e6b5b20da4dea8520364
|
|
@ -1,5 +1,5 @@
|
||||||
# tvboxtg
|
# 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.
|
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.
|
BIN
南风/Yoursmile.jar
BIN
南风/Yoursmile.jar
Binary file not shown.
47
南风/api.json
47
南风/api.json
|
@ -9,36 +9,39 @@
|
||||||
{"key":"csp_Gz360","name":"🍉瓜子","type":3,"api":"csp_Gz360","searchable":1,"quickSearch":1,"filterable":1},
|
{"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":"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_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":"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":"7lj763gg0939791h1l3888jig44gi291li"},
|
||||||
{"key":"追剧","name":"💢追剧","type":3,"api":"csp_TTian","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939791h1l2681i6g94li291li"},
|
{"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":"巧技二","name":"💢聚搜┃仅搜索","type":3,"api":"csp_qiao2","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i79425739i7jghj118797l4hj840gi18633331l4708g2h7145403549g44l8ii56i187681hkjj3hhgh1ih3l32j250lk1k786lj20j468hk3hli4l46gig4i3g7g2722328j0136h01i7g5183k22k7gg3i72hk81gl8k9839kl7i0707"},
|
||||||
{"key":"huomaoys","name":"💢火猫","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg0939790i413gi484k8058896highi4414h68l7g6hk8qiaojig9k2k289l9ik807i213k5j602"},
|
{"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":"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":"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":"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":"7lj763gg402i7942463ji4qiaojijjh456889il6k6i35kj995h4j18li7kl2870klhg8hi647j5707k4ki7ig6953kj"},
|
||||||
{"key":"主角","name":"💢主角","type":3,"api":"csp_Muou","searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i794247258k9jh6598585l3g6ij13il8g20g9qiaoji8j9i9k1g3k90h7i507i213k5j602"},
|
{"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_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_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":"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":"csp_Tvyb","name":"☁️TVB云播","type":3,"api":"csp_Tvyb","playerType":2,"searchable":1,"quickSearch":1,"filterable":1},
|
||||||
{"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_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"},
|
||||||
{"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_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","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","分类":"电影$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":{"请求头":"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,"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":"ZXZJ","name":"🏠在线","api":"csp_Zxzj","type":3,"searchable":1,"quickSearch":1,"filterable":1,"ext":"7lj763gg402i7942463j9j9jgg449698khhh845ki38473"},
|
||||||
{"key":"csp_Lkdy","name":"🏔️来看","type":3,"api":"csp_Lkdy","searchable":1,"quickSearch":1,"filterable":1},
|
{"key":"csp_Jiaozi","name":"🥣饺子","type":3,"api":"csp_Jiaozi","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":"csp_Ddys","name":"📺低端","type":3,"api":"csp_Ddys","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_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_Lkdy","name":"🏔️来看","type":3,"api":"csp_Lkdy","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://lkvod.com"},
|
||||||
{"key":"csp_xlys","name":"🧲修罗","type":3,"api":"csp_xlys","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://v.xlys.ltd.ua"},
|
{"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_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_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},
|
{"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_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_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_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":"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_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":"豆瓣","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_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_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":"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"}},
|
{"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"}},
|
||||||
|
|
|
@ -12,16 +12,16 @@
|
||||||
{
|
{
|
||||||
"share_index": "夸克",
|
"share_index": "夸克",
|
||||||
"share_name": "FM影视",
|
"share_name": "FM影视",
|
||||||
"share_id": "6caeac2e2b2c"
|
"share_id": "90ee86fd1738"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"share_index": "UC",
|
"share_index": "UC",
|
||||||
"share_name": "FM影视",
|
"share_name": "FM影视",
|
||||||
"share_id": "7227ad1d5e744"
|
"share_id": "9a79b2b1c5804"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"share_index": "UC",
|
"share_index": "UC",
|
||||||
"share_name": "影视仓",
|
"share_name": "影视仓",
|
||||||
"share_id": "b437317346a14"
|
"share_id": "b437317346a14"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -20,5 +20,5 @@
|
||||||
"tgPic": "true",
|
"tgPic": "true",
|
||||||
//tgsou 图片显示与否
|
//tgsou 图片显示与否
|
||||||
//每次更新jar 该值都必须更新
|
//每次更新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=="
|
||||||
}
|
}
|
||||||
|
|
|
@ -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"
|
|
||||||
}
|
|
|
@ -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.
|
@ -1 +1 @@
|
||||||
6a22ba713de17cb619635cfeaa852574
|
1c916eff0d2974c00fa84cedc7bbb96d
|
||||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
||||||
e6014003fed8064fd4b9e70c1201474e
|
c4be9b45a799beea1eb893a34e398e88
|
||||||
|
|
Binary file not shown.
|
@ -1 +1 @@
|
||||||
9380c3fce40e11c07195c8a4af71c38c
|
5b026cba64692923fea7a9608ee5326b
|
||||||
|
|
|
@ -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://120.238.94.10:9901/tsfile/live/1022_1.m3u8
|
||||||
CCTV5+,http://58.57.40.22:9901/tsfile/live/1005_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://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+,http://123.129.70.178:9901/tsfile/live/0016_1.m3u8
|
||||||
CCTV5+,https://piccpndali.v.myalicdn.com/audio/cctv5plus_2.m3u8
|
CCTV5+,https://piccpndali.v.myalicdn.com/audio/cctv5plus_2.m3u8
|
||||||
CCTV6,http://58.57.40.22:9901/tsfile/live/1006_1.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://60.29.124.66:6080/hls/17/index.m3u8
|
||||||
CCTV6,http://183.11.239.36:808/hls/94/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://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://8.138.7.223/tv/cctv7.m3u8
|
||||||
CCTV7,http://58.221.214.82:9901/tsfile/live/0007_1.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
|
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,http://120.76.248.139/live/bfgd/4200000130.m3u8
|
||||||
CCTV11,https://piccpndali.v.myalicdn.com/audio/cctv11_2.m3u8
|
CCTV11,https://piccpndali.v.myalicdn.com/audio/cctv11_2.m3u8
|
||||||
CCTV12,http://36.105.100.208:35455/gaoma/cctv12.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://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
|
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
|
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://112.46.105.20:8009/hls/27/index.m3u8
|
||||||
农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8
|
农林卫视,http://120.76.248.139/live/bfgd/4200000122.m3u8
|
||||||
农林卫视,http://112.46.85.60:8009/hls/27/index.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://58.57.40.22:9901/tsfile/live/1057_1.m3u8
|
||||||
青海卫视,http://120.238.94.10:9901/tsfile/live/1073_1.m3u8
|
青海卫视,http://120.238.94.10:9901/tsfile/live/1073_1.m3u8
|
||||||
青海卫视,http://58.19.43.46:9901/tsfile/live/1014_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://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://58.57.40.22:9901/tsfile/live/1036_1.m3u8
|
||||||
深圳卫视,http://38.64.72.148:80/hls/modn/list/4007/playlist.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://183.11.239.36:808/hls/45/index.m3u8
|
||||||
深圳卫视,http://182.150.23.74:808/hls/20/index.m3u8
|
深圳卫视,http://182.150.23.74:808/hls/20/index.m3u8
|
||||||
四川卫视,http://58.57.40.22:9901/tsfile/live/1046_1.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://gmxw.7766.org:808/hls/15/index.m3u8
|
||||||
云南卫视,http://58.57.40.22:9901/tsfile/live/1047_1.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://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://cssbyd.imwork.net:8082/hls/36/index.m3u8
|
||||||
浙江卫视,http://58.57.40.22:9901/tsfile/live/1029_1.m3u8
|
浙江卫视,http://58.57.40.22:9901/tsfile/live/1029_1.m3u8
|
||||||
浙江卫视,https://ali-m-l.cztv.com/channels/lantian/channel001/1080p.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://183.11.239.36:808/hls/60/index.m3u8
|
||||||
内蒙古卫视,http://120.76.248.139/live/bfgd/4200000110.m3u8
|
内蒙古卫视,http://120.76.248.139/live/bfgd/4200000110.m3u8
|
||||||
山东教育,https://test1.live.sdetv.com.cn/live/dianshizhibo/playlist.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
|
香港卫视,http://cctvtxyh5c.liveplay.myqcloud.com/cstv/xianggangweishi_2/index.m3u8
|
||||||
安多卫视,https://liveout.xntv.tv/a65jur/96iln2.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
|
北京卫视,http://183.215.134.239:19901/tsfile/live/0122_1.m3u8?key=txiptv&playlive=1&authid=0
|
||||||
|
|
98
小米/api.json
98
小米/api.json
|
@ -53,6 +53,8 @@
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"ext": {
|
"ext": {
|
||||||
"site_urls": [
|
"site_urls": [
|
||||||
|
"https://www.wexwp.cc",
|
||||||
|
"https://wexwp.cc",
|
||||||
"https://www.2xiaopan.fun/",
|
"https://www.2xiaopan.fun/",
|
||||||
"https://2xiaopan.fun/",
|
"https://2xiaopan.fun/",
|
||||||
"https://www.2xiaoyun.fun/",
|
"https://www.2xiaoyun.fun/",
|
||||||
|
@ -166,7 +168,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "csp_nongmin",
|
"key": "csp_nongmin",
|
||||||
"name": "💯农民┃影视",
|
"name": "💯农民┃极速",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_Wwys",
|
"api": "csp_Wwys",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
|
@ -192,6 +194,29 @@
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "rP+4azM8YFgp3eAhyeALtUUEFpbkqmzGj2V5VZryxRbpkSjlsHbarRCZPOInvId4s3WK9rZ2YJsDy8NvMqQKQXowVmh33j+qD55VxmvMzzfiJ2fHkCRZg4+8NFWs+b1X"
|
"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",
|
"key": "QD4K",
|
||||||
"name": "🐷猪猪┃影视",
|
"name": "🐷猪猪┃影视",
|
||||||
|
@ -209,7 +234,25 @@
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"api": "csp_AppGet",
|
"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": "海豚",
|
"key": "海豚",
|
||||||
|
@ -231,23 +274,6 @@
|
||||||
"jar": "./jars/巧技.jar",
|
"jar": "./jars/巧技.jar",
|
||||||
"ext": "7lj763gg402i79425739i7jghj118797l4hj840gi18633331l4708g2h7145403549g44l8ii56i187681hkjj3hhgh1ih3l32j250lk1k786lj20j468hk3hli4l46gig4i3g7g2722328j0136h01i7g5183k22k7gg3i72hk81gl8k9839kl7i0707"
|
"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",
|
"key": "huomaoys",
|
||||||
"name": "🎬️火猫┃影视",
|
"name": "🎬️火猫┃影视",
|
||||||
|
@ -281,6 +307,23 @@
|
||||||
"playerType": 2,
|
"playerType": 2,
|
||||||
"ext": "7lj763gg402i7942463ji4qiaojijjh456889il6k6i35kj995h4j18li7kl2870klhg8hi647j5707k4ki7ig6953kj"
|
"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": "牛牛",
|
"key": "牛牛",
|
||||||
"name": "🍁牛牛┃影视",
|
"name": "🍁牛牛┃影视",
|
||||||
|
@ -295,7 +338,8 @@
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppXY"
|
"api": "csp_AppXY",
|
||||||
|
"ext": "https://xvapp.xingya.com.cn"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "csp_baibai",
|
"key": "csp_baibai",
|
||||||
|
@ -322,15 +366,6 @@
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_Gz360"
|
"api": "csp_Gz360"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "步步",
|
|
||||||
"name": "👟步步┃影视",
|
|
||||||
"type": 3,
|
|
||||||
"searchable": 1,
|
|
||||||
"quickSearch": 1,
|
|
||||||
"api": "./api/drpy2.min.js",
|
|
||||||
"ext": "./js/ceshi.js"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "csp_Jpys",
|
"key": "csp_Jpys",
|
||||||
"name": "🥇金牌┃影视",
|
"name": "🥇金牌┃影视",
|
||||||
|
@ -379,10 +414,11 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "push_agent",
|
"key": "push_agent",
|
||||||
"name": "⚠️接口开源免费,仅供测试,请测试完删除!",
|
"name": "🛴推送┃播放接口免费,请测试完删除处理",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_Push",
|
"api": "csp_Push",
|
||||||
"searchable": 0,
|
"searchable": 1,
|
||||||
|
"quickSearch": 1,
|
||||||
"ext": ""
|
"ext": ""
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
|
@ -29,7 +29,7 @@ class Spider(Spider):
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
host='http://zero.mitotv.com'
|
host='http://ldys.sq1005.top'
|
||||||
|
|
||||||
headers = {
|
headers = {
|
||||||
'User-Agent': 'okhttp/4.12.0',
|
'User-Agent': 'okhttp/4.12.0',
|
||||||
|
|
|
@ -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
|
@ -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);
|
||||||
|
}),
|
||||||
|
}
|
BIN
小米/spider.jar
BIN
小米/spider.jar
Binary file not shown.
1008
欧歌/api.json
1008
欧歌/api.json
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
BIN
欧歌/jars/豆瓣1.jar
BIN
欧歌/jars/豆瓣1.jar
Binary file not shown.
452
欧歌/js/我的哔哩.js
452
欧歌/js/我的哔哩.js
|
@ -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¶ms=../json/哔哩教育.json@哔哩教育[官]
|
|
||||||
* 传参 ?render=1&type=url¶ms=../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¶ms=../json/哔哩教育.json@哔哩教育[官]',
|
|
||||||
// params: '?render=1&type=url¶ms=../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
|
|
||||||
`,
|
|
||||||
}
|
|
|
@ -0,0 +1 @@
|
||||||
|
http://111.180.190.158:1122
|
|
@ -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"
|
|
||||||
}
|
|
|
@ -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"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -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/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://[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-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://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: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
|
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: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://[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://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://omnix.cn:4000/udp/225.1.8.89:8000
|
||||||
CCTV-5,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019
|
CCTV-5,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226019
|
||||||
CCTV-5,http://[2409:8087:74f0:22::4]:6410/270000001111/1110000305/index.m3u8
|
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://[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://iptv.huuc.edu.cn/hls/cctv12hd.m3u8
|
||||||
CCTV-12,http://lu.wqwqwq.sbs/itv/1000000005000265012.m3u8?cdn=ystenlive
|
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,https://event.pull.hebtv.com/jishi/cp1.m3u8
|
||||||
CCTV-13,http://z.b.bkpcp.top/m.php?id=cctv13
|
CCTV-13,http://z.b.bkpcp.top/m.php?id=cctv13
|
||||||
CCTV-13,http://j.x.bkpcp.top/jx/CCTV13HD
|
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::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]/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: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://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: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
|
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: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: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://[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://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://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
|
东方卫视,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: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: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://[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://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010096
|
||||||
东南卫视,http://z.b.bkpcp.top/m.php?id=dnws
|
东南卫视,http://z.b.bkpcp.top/m.php?id=dnws
|
||||||
东南卫视,http://j.x.bkpcp.top/jx/DONGNHD
|
东南卫视,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: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://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010098/1.m3u8
|
||||||
广东卫视,http://satellitepull.cnr.cn/live/wxgdws/playlist.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://php.jdshipin.com:8880/TVOD/gsyd.php?id=9900000520
|
||||||
广东卫视,http://z.b.bkpcp.top/m.php?id=gdws
|
广东卫视,http://z.b.bkpcp.top/m.php?id=gdws
|
||||||
广东卫视,http://j.x.bkpcp.top/jx/GUANGDHD
|
广东卫视,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::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]/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: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://php.jdshipin.com/TVOD/hljyd.php?id=3221226549
|
||||||
广西卫视,http://z.b.bkpcp.top/m.php?id=gxws
|
广西卫视,http://z.b.bkpcp.top/m.php?id=gxws
|
||||||
广西卫视,https://mobilelive.gxtv.cn/live/gx_live1004/playlist.m3u8
|
广西卫视,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]/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: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: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://satellitepull.cnr.cn/live/wx32gzws/playlist.m3u8
|
||||||
贵州卫视,http://drive.mxmy.net:8888/udp/239.3.1.149:8076
|
贵州卫视,http://drive.mxmy.net:8888/udp/239.3.1.149:8076
|
||||||
贵州卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226474
|
贵州卫视,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::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: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://[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://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010083
|
||||||
海南卫视,http://z.b.bkpcp.top/m.php?id=hinws
|
海南卫视,http://z.b.bkpcp.top/m.php?id=hinws
|
||||||
海南卫视,http://j.x.bkpcp.top/jx/HAINHD
|
海南卫视,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: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/3221226574/1.m3u8
|
||||||
海南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226922/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://drive.mxmy.net:8888/udp/239.3.1.148:8072
|
||||||
河北卫视,http://php.fjl626.cn/hebei.php?id=hbws
|
河北卫视,http://php.fjl626.cn/hebei.php?id=hbws
|
||||||
河北卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010101
|
河北卫视,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: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: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: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://tvpull.dxhmt.cn:9081/tv/11425-1.m3u8
|
||||||
河南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480
|
河南卫视,http://php.jdshipin.com/TVOD/hljyd.php?id=3221226480
|
||||||
河南卫视,http://z.b.bkpcp.top/m.php?id=hnws
|
河南卫视,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://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8
|
||||||
河南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887270.m3u8
|
河南卫视,http://dsj.motem.top:8880/bptv/10000100000000050000000003887270.m3u8
|
||||||
湖北卫视,http://satellitepull.cnr.cn/live/wx32hubws/playlist.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://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010057
|
||||||
湖北卫视,http://z.b.bkpcp.top/m.php?id=hubws
|
湖北卫视,http://z.b.bkpcp.top/m.php?id=hubws
|
||||||
湖北卫视,http://j.x.bkpcp.top/jx/HUBEIHD
|
湖北卫视,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]/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: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: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://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010058
|
||||||
湖南卫视,http://z.b.bkpcp.top/m.php?id=hunws
|
湖南卫视,http://z.b.bkpcp.top/m.php?id=hunws
|
||||||
湖南卫视,http://j.x.bkpcp.top/jx/HUNANHD
|
湖南卫视,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: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/3221226493/1.m3u8
|
||||||
湖南卫视,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/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://satellitepull.cnr.cn/live/wx32hljws/playlist.m3u8
|
||||||
黑龙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056
|
黑龙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010056
|
||||||
黑龙江卫视,http://j.x.bkpcp.top/jx/HEILJHD
|
黑龙江卫视,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://[2409:8087:5e00:24::1e]:6060/200000001898/460000089800010066/1.m3u8
|
||||||
山西卫视,http://qwt.zhibotv.top:2016/全网通.php?id=山西卫视
|
山西卫视,http://qwt.zhibotv.top:2016/全网通.php?id=山西卫视
|
||||||
山西卫视,http://satellitepull.cnr.cn/live/wxssxws/playlist.m3u8
|
山西卫视,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://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010114
|
||||||
山西卫视,http://j.x.bkpcp.top/jx/SXWS
|
山西卫视,http://j.x.bkpcp.top/jx/SXWS
|
||||||
山西卫视,http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225624/index.m3u8
|
山西卫视,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://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: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://[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://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://zhfivel02.cztv.com/channel01/1080p.m3u8?auth_key=2524708799-0-0-adde67b1b344fdd5e512f30a4ae31915
|
||||||
浙江卫视,http://php.jdshipin.com/TVOD/hnyd.php?id=200000001898/460000089800010070
|
浙江卫视,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://goo.bkpcp.top/mg/zjws
|
||||||
浙江卫视,http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8
|
浙江卫视,http://l.cztvcloud.com/channels/lantian/SXpinghu3/720p.m3u8
|
||||||
浙江卫视,http://[2409:8087:74f0:22::5]:6410/270000001128/9900000531/index.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#
|
安徽频道,#genre#
|
||||||
安徽导视,http://dspdhls.appcoo.com:8888/live/dspd/index.m3u8
|
安徽导视,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
|
||||||
海峡卫视,http://hlsbkmgsplive.miguvideo.com/migu/kailu/haixiaws/57/20230724/01.m3u8?msisdn=&Channel_ID=&ContentId=&HlsSubType=&HlsProfileId=&encrypt=
|
海峡卫视,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://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
|
福建新闻,http://satellitepull.cnr.cn/live/wx32fjxwgb/playlist.m3u8
|
||||||
福建新闻,https://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://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#
|
甘肃频道,#genre#
|
||||||
甘肃经济,https://hls.gstv.com.cn/49048r/10iv1j.m3u8
|
甘肃经济,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#
|
||||||
|
|
||||||
海南频道,#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://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000111/1.m3u8
|
||||||
海南新闻,http://ls.qingting.fm/live/1861.m3u8
|
海南新闻,http://ls.qingting.fm/live/1861.m3u8
|
||||||
海南自贸,http://[2409:8087:5e00:24::1e]:6060/000000001000/4600001000000000116/1.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://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://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
|
金鹰卡通,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://[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://php.jdshipin.com/TVOD/hljyd.php?id=3221226434
|
||||||
哈尔滨影视,http://111.43.126.240:9003/hls/5/index.m3u8
|
哈尔滨影视,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/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://stream.hrbtv.net/zxpd/sd/live.m3u8
|
||||||
哈尔滨生活,http://111.43.126.240:9003/hls/3/index.m3u8
|
哈尔滨生活,http://111.43.126.240:9003/hls/3/index.m3u8
|
||||||
哈尔滨生活,https://stream.hrbtv.net/shpd/sd/live.m3u8
|
哈尔滨生活,https://stream.hrbtv.net/shpd/sd/live.m3u8
|
||||||
哈尔滨生活,https://stream.hrbtv.net/shpd/playlist.m3u8
|
|
||||||
哈尔滨生活,http://stream.hrbtv.net/shpd/sd/live.m3u8
|
哈尔滨生活,http://stream.hrbtv.net/shpd/sd/live.m3u8
|
||||||
哈尔滨娱乐,https://stream.hrbtv.net/ylpd/sd/live.m3u8
|
哈尔滨娱乐,https://stream.hrbtv.net/ylpd/sd/live.m3u8
|
||||||
哈尔滨娱乐,http://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#
|
辽宁频道,#genre#
|
||||||
辽宁都市,https://ls.qingting.fm/live/1099/64k.m3u8
|
辽宁都市,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://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://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://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://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
|
朝阳新闻综合,http://120.76.248.139/live/bfgd/4200000282.m3u8
|
||||||
|
|
||||||
内蒙古频道,#genre#
|
内蒙古频道,#genre#
|
||||||
|
@ -761,11 +753,15 @@ CCTV-17,http://[2409:8087:8:21::18]:6610/otttv.bj.chinamobile.com/PLTV/88888888/
|
||||||
山东频道,#genre#
|
山东频道,#genre#
|
||||||
山东齐鲁,http://61.156.228.12:8154/tsfile/live/1001_1.m3u8?key=txiptv&playlive=1&authid=0
|
山东齐鲁,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://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://58.57.40.22:9901/tsfile/live/1023_1.m3u8
|
||||||
|
山东文旅,http://221.2.148.205:8154/tsfile/live/1004_1.m3u8?key=txiptv&playlive=1&authid=0
|
||||||
|
山东文旅,http://221.2.148.205:8154/tsfile/live/1004_1.m3u8?key=txiptv&amp;playlive=1&amp;authid=0
|
||||||
山东综艺,http://123.129.70.178:9901/tsfile/live/1001_1.m3u8
|
山东综艺,http://123.129.70.178:9901/tsfile/live/1001_1.m3u8
|
||||||
山东综艺,http://111.14.181.15:9901/tsfile/live/1004_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/60260.m3u8
|
||||||
山东新闻,http://ls.qingting.fm/live/60180.m3u8
|
山东新闻,http://ls.qingting.fm/live/60180.m3u8
|
||||||
|
山东少儿,http://111.14.181.15:9901/tsfile/live/1005_1.m3u8
|
||||||
|
|
||||||
山西频道,#genre#
|
山西频道,#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]/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://[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://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://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://zhfivel02.cztv.com/channel03/1080p.m3u8?auth_key=2524708799-0-0-76c0751e0f656453baf39803124fc08a
|
||||||
浙江经济生活,http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8
|
浙江经济生活,http://l.cztvcloud.com/channels/lantian/SXxiaoshan2/720p.m3u8
|
||||||
|
@ -900,9 +897,7 @@ CHC影迷电影,http://eastscreen.tv/ooooo.php
|
||||||
|
|
||||||
港·澳·台,#genre#
|
港·澳·台,#genre#
|
||||||
凤凰中文,https://cdn.iptv8k.top/dl/jrys.php?id=19&time=20240926215313&ip=111.229.253.40
|
凤凰中文,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://php.jdshipin.com/TVOD/iptv.php
|
||||||
凤凰资讯,http://playtv-live.ifeng.com/live/06OLEEWQKN4_audio.m3u8
|
|
||||||
凤凰资讯,http://php.jdshipin.com/TVOD/iptv.php
|
凤凰资讯,http://php.jdshipin.com/TVOD/iptv.php
|
||||||
凤凰资讯,http://cdn3.132.us.kg/live/fhzx/stream.m3u8
|
凤凰资讯,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
|
凤凰香港,https://cdn.iptv8k.top/dl/jrys.php?id=18&time=20240926215313&ip=111.229.253.40
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
BIN
欧歌/spider.jar
BIN
欧歌/spider.jar
Binary file not shown.
|
@ -1 +0,0 @@
|
||||||
http://160.202.244.9:2489
|
|
|
@ -0,0 +1 @@
|
||||||
|
https://oldapp.xfconnect.top
|
|
@ -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"
|
||||||
|
}
|
|
@ -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"
|
||||||
|
}
|
|
@ -1,4 +0,0 @@
|
||||||
{
|
|
||||||
"分类": "短剧$duanju#电影$dianying#电视剧$dianshiju#动漫$dongman#综艺$zongyi",
|
|
||||||
"分类url": "https://www.duanjuwang.cc/vodtype/{cateId}/page/{catePg}.html"
|
|
||||||
}
|
|
|
@ -1,6 +1,16 @@
|
||||||
{
|
{
|
||||||
"简介": "p_txt show_part\">&&</p>",
|
"首页": "0",
|
||||||
"副标题": "v_note\">&&</div>",
|
"请求头": "User-Agent$MOBILE_UA#Accept$text/html,application/xhtml+xml,application/xml;;q=0.9,image/avif,image/webp,image/apng,*/*;;q=0.8,application/signed-exchange;;v=b3;;q=0.7&&Accept-Language@zh-CN,zh;;q=0.9",
|
||||||
"分类url": "https://saohuody.com/list/{cateId}-{catePg}.html",
|
"分类url": "https://shdy2.com/list/{cateId}-{catePg}.html",
|
||||||
"分类": "国产剧$12#港剧$13#台剧$14#日剧$15#韩剧$16#美剧$17#海外$18#泰剧$19#动作$5#喜剧$6#爱情$7#科幻$8#恐怖$9#剧情$10#战争$11#动画$33"
|
"分类": "剧集$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"
|
||||||
}
|
}
|
|
@ -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\":&&,"
|
||||||
|
}
|
405
潇洒/api.json
405
潇洒/api.json
|
@ -73,14 +73,16 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "闪影",
|
"key": "追忆",
|
||||||
"name": "闪影|APP",
|
"name": "追忆|APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppYs",
|
"api": "csp_AppSy",
|
||||||
"searchable": 1,
|
"ext": {
|
||||||
"quickSearch": 1,
|
"url": "http://110.42.7.130:1866",
|
||||||
"filterable": 1,
|
"key1": "aassddwwxxllsx1x",
|
||||||
"ext": "http://38.47.213.61:41271/mogai_api.php/v1.vod"
|
"key2": "2083c87e98b6ce08",
|
||||||
|
"key3": "2083c87e98b6ce08"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "行动",
|
"key": "行动",
|
||||||
|
@ -94,58 +96,90 @@
|
||||||
"key3": "aassddwwxxllsx1x"
|
"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": "咖啡",
|
"key": "咖啡",
|
||||||
"name": "咖啡|APP",
|
"name": "咖啡|APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppGet2",
|
"api": "csp_AppGet",
|
||||||
"ext": {
|
"ext": {
|
||||||
"url": "",
|
"url": "",
|
||||||
"site": "https://cdn-tupic-duofun-neimenggu.56uxi.com/2.txt",
|
"site": "https://omofun.lol/1.txt",
|
||||||
"dataKey": "qwertyuiopqwertt",
|
"dataKey": "skdhalkshqklwkj1",
|
||||||
"dataIv": "qwertyuiopqwertt",
|
"dataIv": "skdhalkshqklwkj1",
|
||||||
"deviceId": "",
|
"deviceId": "",
|
||||||
"version": "109",
|
"version": "109",
|
||||||
"ua": "okhttp/3.10.0"
|
"ua": "okhttp/3.10.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "知了",
|
"key": "魔方",
|
||||||
"name": "知了|APP",
|
"name": "魔方|APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": {
|
"ext": {
|
||||||
"url": "https://zzos.cc",
|
"url": "",
|
||||||
"dataKey": "zzoccc2025555555",
|
"site": "https://www.snysw.xyz/mfys.txt",
|
||||||
"dataIv": "zzoccc2025555555",
|
"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": "",
|
"deviceId": "",
|
||||||
"version": "119"
|
"version": "119"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "APP4K",
|
"key": "蓝光",
|
||||||
"name": "蓝光|APP",
|
"name": "蓝光|APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": {
|
"ext": {
|
||||||
"url": "http://59.153.167.186",
|
"url": "http://122.228.193.2:9654",
|
||||||
"dataKey": "SDSFET23215FDSF2",
|
"dataKey": "ca94b06ca3c7d80e",
|
||||||
"dataIv": "SDSFET23215FDSF2",
|
"dataIv": "ca94b06ca3c7d80e",
|
||||||
"deviceId": "",
|
"deviceId": "",
|
||||||
"version": "119"
|
"version": "119"
|
||||||
}
|
}
|
||||||
|
@ -157,8 +191,8 @@
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": {
|
"ext": {
|
||||||
"url": "",
|
"url": "http://124.223.27.166:130",
|
||||||
"site": "https://apicoss-alimama-com-1307821617.file.myqcloud.com/Uploadsget",
|
"site": "",
|
||||||
"dataKey": "q7gj4f9br3fls6nh",
|
"dataKey": "q7gj4f9br3fls6nh",
|
||||||
"dataIv": "q7gj4f9br3fls6nh",
|
"dataIv": "q7gj4f9br3fls6nh",
|
||||||
"deviceId": "",
|
"deviceId": "",
|
||||||
|
@ -195,20 +229,6 @@
|
||||||
"version": ""
|
"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": "雄鹰",
|
"key": "雄鹰",
|
||||||
"name": "雄鹰|APP",
|
"name": "雄鹰|APP",
|
||||||
|
@ -259,7 +279,7 @@
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppGet2",
|
"api": "csp_AppGet2",
|
||||||
"ext": {
|
"ext": {
|
||||||
"url": "https://qjappcms.cs4k.top",
|
"url": "https://newappcms.cs4k.top",
|
||||||
"dataKey": "Z98KXaLtO2wC1Pte",
|
"dataKey": "Z98KXaLtO2wC1Pte",
|
||||||
"dataIv": "Z98KXaLtO2wC1Pte",
|
"dataIv": "Z98KXaLtO2wC1Pte",
|
||||||
"deviceId": "",
|
"deviceId": "",
|
||||||
|
@ -281,34 +301,6 @@
|
||||||
"version": ""
|
"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": "米诺",
|
"key": "米诺",
|
||||||
"name": "米诺|APP",
|
"name": "米诺|APP",
|
||||||
|
@ -338,29 +330,16 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "桃子",
|
"key": "瓜萌",
|
||||||
"name": "桃子|APP",
|
"name": "瓜萌|APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": {
|
"ext": {
|
||||||
"url": "https://appcms.tzys.xyz",
|
"url": "",
|
||||||
"dataKey": "KL6vlZkw6WL5x90U",
|
"site": "https://www.guahd.com/1.txt",
|
||||||
"dataIv": "KL6vlZkw6WL5x90U",
|
"dataKey": "f2A7D4B9E8C16531",
|
||||||
"deviceId": "4b4c36766c5a6b7736574c3578393055",
|
"dataIv": "f2A7D4B9E8C16531",
|
||||||
"version": "119"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "魔方",
|
|
||||||
"name": "魔方|APP",
|
|
||||||
"type": 3,
|
|
||||||
"quickSearch": 1,
|
|
||||||
"api": "csp_AppGet",
|
|
||||||
"ext": {
|
|
||||||
"url": "https://mfsp33.top",
|
|
||||||
"dataKey": "1234567887654321",
|
|
||||||
"dataIv": "1234567887654321",
|
|
||||||
"deviceId": "",
|
"deviceId": "",
|
||||||
"version": ""
|
"version": ""
|
||||||
}
|
}
|
||||||
|
@ -393,20 +372,6 @@
|
||||||
"version": "200"
|
"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": "晴天",
|
"key": "晴天",
|
||||||
"name": "晴天|APP",
|
"name": "晴天|APP",
|
||||||
|
@ -421,20 +386,6 @@
|
||||||
"version": "119"
|
"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": "橘子",
|
"key": "橘子",
|
||||||
"name": "橘子|APP",
|
"name": "橘子|APP",
|
||||||
|
@ -442,27 +393,14 @@
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": {
|
"ext": {
|
||||||
"url": "https://api1.bffree.cn",
|
"url": "",
|
||||||
|
"site": "http://t.bffree.cn/1.txt",
|
||||||
"dataKey": "2015692015692015",
|
"dataKey": "2015692015692015",
|
||||||
"dataIv": "2015692015692015",
|
"dataIv": "2015692015692015",
|
||||||
"deviceId": "",
|
"deviceId": "",
|
||||||
"version": "300"
|
"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": "雨滴",
|
"key": "雨滴",
|
||||||
"name": "雨滴|APP",
|
"name": "雨滴|APP",
|
||||||
|
@ -520,27 +458,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "在看",
|
"key": "白蛇",
|
||||||
"name": "在看|APP",
|
"name": "白蛇|APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": {
|
"ext": {
|
||||||
"url": "http://149.88.64.161:9525",
|
"url": "",
|
||||||
"dataKey": "123456789ABCDEFG",
|
"site": "http://tengxunyunaliyun.oss-cn-shanghai.aliyuncs.com/tengxunyun.txt",
|
||||||
"dataIv": "123456789ABCDEFG",
|
|
||||||
"deviceId": "",
|
|
||||||
"version": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "星河",
|
|
||||||
"name": "星河|APP",
|
|
||||||
"type": 3,
|
|
||||||
"quickSearch": 1,
|
|
||||||
"api": "csp_AppGet",
|
|
||||||
"ext": {
|
|
||||||
"url": "http://121.62.22.204:9876",
|
|
||||||
"dataKey": "f5e2tx53ykp6s2c9",
|
"dataKey": "f5e2tx53ykp6s2c9",
|
||||||
"dataIv": "f5e2tx53ykp6s2c9",
|
"dataIv": "f5e2tx53ykp6s2c9",
|
||||||
"deviceId": "",
|
"deviceId": "",
|
||||||
|
@ -615,19 +540,6 @@
|
||||||
"jxurl": "https://www.ququkan.cc"
|
"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": "哔哩视频",
|
"key": "哔哩视频",
|
||||||
"name": "哔哩|视频",
|
"name": "哔哩|视频",
|
||||||
|
@ -682,7 +594,7 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "小斑快映",
|
"key": "小斑快映",
|
||||||
"name": "小斑快映|4K弹幕",
|
"name": "快映|4K弹幕",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_PanWebShare",
|
"api": "csp_PanWebShare",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
|
@ -920,16 +832,6 @@
|
||||||
"type": "list"
|
"type": "list"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "懒盘",
|
|
||||||
"name": "懒盘|4K弹幕",
|
|
||||||
"type": 3,
|
|
||||||
"api": "./js/cloud.min.js",
|
|
||||||
"ext": "./js/懒盘.js",
|
|
||||||
"style": {
|
|
||||||
"type": "list"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "百酷",
|
"key": "百酷",
|
||||||
"name": "百酷|4K弹幕",
|
"name": "百酷|4K弹幕",
|
||||||
|
@ -1015,16 +917,6 @@
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"changeable": 1
|
"changeable": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "米搜",
|
|
||||||
"name": "米搜|搜索",
|
|
||||||
"type": 3,
|
|
||||||
"api": "./js/cloud.min.js",
|
|
||||||
"ext": "./js/米搜.js",
|
|
||||||
"style": {
|
|
||||||
"type": "list"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "人人分享站",
|
"key": "人人分享站",
|
||||||
"name": "人人|搜索",
|
"name": "人人|搜索",
|
||||||
|
@ -1045,16 +937,6 @@
|
||||||
"type": "list"
|
"type": "list"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "夸克盘搜",
|
|
||||||
"name": "盘搜|搜索",
|
|
||||||
"type": 3,
|
|
||||||
"api": "./js/cloud.min.js",
|
|
||||||
"ext": "./js/夸克盘搜.js",
|
|
||||||
"style": {
|
|
||||||
"type": "list"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "星芽短剧",
|
"key": "星芽短剧",
|
||||||
"name": "星芽|短剧",
|
"name": "星芽|短剧",
|
||||||
|
@ -1087,11 +969,26 @@
|
||||||
"playerType": 2
|
"playerType": 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "短剧网",
|
"key": "爱看短剧",
|
||||||
"name": "短剧网|短剧",
|
"name": "爱看|短剧",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_HBPQ",
|
"api": "./py/爱看短剧.py",
|
||||||
"ext": "./XBPQ/短剧网.json"
|
"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": "短剧屋",
|
"key": "短剧屋",
|
||||||
|
@ -1137,6 +1034,39 @@
|
||||||
"filterable": 1,
|
"filterable": 1,
|
||||||
"playerType": 2
|
"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": "厂长影视",
|
"key": "厂长影视",
|
||||||
"name": "厂长|影视",
|
"name": "厂长|影视",
|
||||||
|
@ -1264,6 +1194,20 @@
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"filterable": 1
|
"filterable": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "明星影视",
|
||||||
|
"name": "明星|影视",
|
||||||
|
"type": 3,
|
||||||
|
"api": "csp_HBPQ",
|
||||||
|
"ext": "./XBPQ/明星影视.json"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "麦田影视",
|
||||||
|
"name": "麦田|影视",
|
||||||
|
"type": 3,
|
||||||
|
"api": "csp_HBPQ",
|
||||||
|
"ext": "./XBPQ/麦田影视.json"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "海纳影视",
|
"key": "海纳影视",
|
||||||
"name": "海纳|影视",
|
"name": "海纳|影视",
|
||||||
|
@ -1271,6 +1215,13 @@
|
||||||
"api": "csp_HBPQ",
|
"api": "csp_HBPQ",
|
||||||
"ext": "./XBPQ/海纳影视.json"
|
"ext": "./XBPQ/海纳影视.json"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "免费影视",
|
||||||
|
"name": "免费|影视",
|
||||||
|
"type": 3,
|
||||||
|
"api": "csp_HBPQ",
|
||||||
|
"ext": "./XBPQ/免费影视.json"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "面包影视",
|
"key": "面包影视",
|
||||||
"name": "面包|影视",
|
"name": "面包|影视",
|
||||||
|
@ -1562,13 +1513,6 @@
|
||||||
"api": "./js/drpy2.min.js",
|
"api": "./js/drpy2.min.js",
|
||||||
"ext": "./js/花子动漫.js"
|
"ext": "./js/花子动漫.js"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "樱花动漫",
|
|
||||||
"name": "樱花|动漫",
|
|
||||||
"type": 3,
|
|
||||||
"api": "./js/drpy2.min.js",
|
|
||||||
"ext": "./js/樱花动漫.js"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "动画片",
|
"key": "动画片",
|
||||||
"name": "动画片|动漫",
|
"name": "动画片|动漫",
|
||||||
|
@ -1634,7 +1578,10 @@
|
||||||
"api": "csp_QnMp4",
|
"api": "csp_QnMp4",
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"quickSearch": 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",
|
"key": "80S",
|
||||||
|
@ -1741,20 +1688,6 @@
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"filterable": 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": "夸克云盘",
|
"key": "夸克云盘",
|
||||||
"name": "夸克|云盘",
|
"name": "夸克|云盘",
|
||||||
|
@ -1829,12 +1762,6 @@
|
||||||
},
|
},
|
||||||
"ext": "./json/alist.json"
|
"ext": "./json/alist.json"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "网络直播",
|
|
||||||
"name": "网络|直播",
|
|
||||||
"type": 3,
|
|
||||||
"api": "./py/网络直播.py"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "88看球",
|
"key": "88看球",
|
||||||
"name": "88|看球",
|
"name": "88|看球",
|
||||||
|
@ -1845,6 +1772,18 @@
|
||||||
"type": "list"
|
"type": "list"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "网络直播",
|
||||||
|
"name": "网络|直播",
|
||||||
|
"type": 3,
|
||||||
|
"api": "./py/网络直播.py"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"key": "哔哩直播",
|
||||||
|
"name": "哔哩|直播",
|
||||||
|
"type": 3,
|
||||||
|
"api": "./py/哔哩直播.py"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "哔哩合集",
|
"key": "哔哩合集",
|
||||||
"name": "哔哩|合集",
|
"name": "哔哩|合集",
|
||||||
|
@ -2049,7 +1988,7 @@
|
||||||
"searchable": 0,
|
"searchable": 0,
|
||||||
"changeable": 0,
|
"changeable": 0,
|
||||||
"indexs": 0,
|
"indexs": 0,
|
||||||
"ext": "https://9877.kstore.space/Market/single.json"
|
"ext": "https://pizazz.s3.bitiful.net/single.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "push_agent",
|
"key": "push_agent",
|
||||||
|
|
161
潇洒/js/人人电影网.js
161
潇洒/js/人人电影网.js
|
@ -31,90 +31,83 @@ var rule = {
|
||||||
二级: {
|
二级: {
|
||||||
title: "h1&&Text",
|
title: "h1&&Text",
|
||||||
img: "img&&src",
|
img: "img&&src",
|
||||||
desc: "",
|
desc: ".info:eq(0)&&Text",
|
||||||
content: "span&&Text",
|
content: ".content&&Text",
|
||||||
tabs: `js: pdfh = jsp.pdfh;
|
tabs: `js:
|
||||||
pdfa = jsp.pdfa;
|
pdfh = jsp.pdfh;
|
||||||
pd = jsp.pd;
|
pdfa = jsp.pdfa;
|
||||||
TABS = []
|
pd = jsp.pd;
|
||||||
let d = pdfa(html, 'span a');
|
TABS = [];
|
||||||
let tabsa = [];
|
let d = pdfa(html, 'span a');
|
||||||
let tabsq = [];
|
let tabsq = [];
|
||||||
let tabsm = false;
|
let tabsb = [];
|
||||||
let tabse = false;
|
let tabsm = false;
|
||||||
d.forEach(function(it) {
|
let tabse = false;
|
||||||
let burl = pdfh(it, 'a&&href');
|
|
||||||
if (burl.startsWith("https://pan.quark.cn/s/")) {
|
d.forEach(function(it) {
|
||||||
tabsq.push("夸克网盘");
|
let burl = pdfh(it, 'a&&href');
|
||||||
} else if (burl.startsWith("magnet")) {
|
if (burl.includes("pan.quark.cn/s/")) {
|
||||||
tabsm = true;
|
tabsq.push("夸克网盘");
|
||||||
} else if (burl.startsWith("ed2k")) {
|
} else if (burl.includes("pan.baidu.com/s/")) {
|
||||||
tabse = true;
|
tabsb.push("百度网盘");
|
||||||
}
|
} else if (burl.startsWith("magnet")) {
|
||||||
});
|
tabsm = true;
|
||||||
if (tabsm === true) {
|
} else if (burl.startsWith("ed2k")) {
|
||||||
TABS.push("磁力");
|
tabse = true;
|
||||||
}
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
loopresult = title + '$' + burl;
|
});
|
||||||
listq.push(loopresult);
|
|
||||||
} else if (burl.startsWith("magnet")) {
|
|
||||||
listm.push(loopresult);
|
if (tabsb.length > 0) TABS.push("百度网盘");
|
||||||
} else if (burl.startsWith("ed2k")) {
|
if (tabsq.length > 0) TABS.push("夸克网盘");
|
||||||
liste.push(loopresult);
|
if (tabsm) TABS.push("磁力");
|
||||||
}
|
if (tabse) TABS.push("电驴");
|
||||||
});
|
log('生成TABS: ' + JSON.stringify(TABS));`,
|
||||||
if (listm.length > 0) {
|
lists: `js:
|
||||||
LISTS.push(listm.reverse());
|
pdfh = jsp.pdfh;
|
||||||
}
|
pdfa = jsp.pdfa;
|
||||||
if (liste.length > 0) {
|
pd = jsp.pd;
|
||||||
LISTS.push(liste.reverse());
|
LISTS = [];
|
||||||
}
|
let d = pdfa(html, 'span a');
|
||||||
lista.forEach(function(it) {
|
let listm = [];
|
||||||
LISTS.push([it]);
|
let liste = [];
|
||||||
});
|
let listq = [];
|
||||||
listq.forEach(function(it) {
|
let listb = [];
|
||||||
LISTS.push([it]);
|
|
||||||
});`,
|
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',
|
搜索: 'li:has(img);h2&&Text;img&&data-original;.tags&&Text;a&&href',
|
||||||
}
|
};
|
|
@ -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: {},
|
|
||||||
}
|
|
52
潇洒/js/懒盘.js
52
潇洒/js/懒盘.js
|
@ -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: {},
|
|
||||||
}
|
|
52
潇洒/js/米搜.js
52
潇洒/js/米搜.js
|
@ -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: {},
|
|
||||||
}
|
|
|
@ -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": [
|
"Classes": [
|
||||||
{
|
{
|
||||||
"type_name": "电影",
|
"type_name": "电影",
|
||||||
|
|
|
@ -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": [
|
"Classes": [
|
||||||
{
|
{
|
||||||
"type_name": "电影",
|
"type_name": "电影",
|
||||||
|
@ -30,5 +30,5 @@
|
||||||
"type_id": "42317879720298"
|
"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"
|
||||||
}
|
}
|
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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×tamp={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'))
|
|
@ -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
|
|
@ -146,7 +146,6 @@ class Spider(Spider):
|
||||||
result = {}
|
result = {}
|
||||||
cateManual = {
|
cateManual = {
|
||||||
"虎牙": "huya",
|
"虎牙": "huya",
|
||||||
"哔哩": "bili",
|
|
||||||
"抖音": "douyin",
|
"抖音": "douyin",
|
||||||
"斗鱼": "douyu",
|
"斗鱼": "douyu",
|
||||||
"网易": "wangyi"
|
"网易": "wangyi"
|
||||||
|
|
|
@ -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 ""
|
|
@ -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
|
|
@ -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 ""
|
BIN
潇洒/spider.jar
BIN
潇洒/spider.jar
Binary file not shown.
32
王二小/api.json
32
王二小/api.json
|
@ -133,6 +133,14 @@
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"changeable": 1
|
"changeable": 1
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "WexXuexi",
|
||||||
|
"name": "💓综合┃4K💓",
|
||||||
|
"type": 3,
|
||||||
|
"api": "csp_WexXuexiGuard",
|
||||||
|
"searchable": 1,
|
||||||
|
"changeable": 1
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "WexfeimaoziyuanGuard",
|
"key": "WexfeimaoziyuanGuard",
|
||||||
"name": "💓肥猫┃4K💓",
|
"name": "💓肥猫┃4K💓",
|
||||||
|
@ -200,14 +208,6 @@
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"changeable": 1
|
"changeable": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"key": "WexXuexi",
|
|
||||||
"name": "💓原盘┃4K💓",
|
|
||||||
"type": 3,
|
|
||||||
"api": "csp_WexXuexiGuard",
|
|
||||||
"searchable": 1,
|
|
||||||
"changeable": 1
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"key": "Wexalllive",
|
"key": "Wexalllive",
|
||||||
"name": "💓聚合┃直播💓",
|
"name": "💓聚合┃直播💓",
|
||||||
|
@ -735,6 +735,22 @@
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"changeable": 0
|
"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",
|
"key": "115",
|
||||||
"name": "💓我的┃115💓",
|
"name": "💓我的┃115💓",
|
||||||
|
|
BIN
王二小/spider.jar
BIN
王二小/spider.jar
Binary file not shown.
178
肥猫/api.json
178
肥猫/api.json
|
@ -51,7 +51,7 @@
|
||||||
"http://feimaoai.site",
|
"http://feimaoai.site",
|
||||||
"http://www.labi88.sbs",
|
"http://www.labi88.sbs",
|
||||||
"http://fmao.site",
|
"http://fmao.site",
|
||||||
"https://fmao.shop",
|
"http://fmao.shop",
|
||||||
"http://xiaocge.fun"
|
"http://xiaocge.fun"
|
||||||
],
|
],
|
||||||
"threadinfo": {
|
"threadinfo": {
|
||||||
|
@ -99,98 +99,153 @@
|
||||||
"name": "🏜┃潮流┃APP",
|
"name": "🏜┃潮流┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppRJ",
|
"api": "csp_AppRJ",
|
||||||
"ext": "vxw35/hHSj07Q+maxQzOVMq1rjRCOTXpUCx8iKu5jIg="
|
"ext": "http://v.rbotv.cn"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "梦回",
|
"key": "梦回",
|
||||||
"name": "🏈┃梦回┃APP",
|
"name": "🏈┃梦回┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppRJ",
|
"api": "csp_AppRJ",
|
||||||
"ext": "Z2MNziRBwjQxqaBuUxNkDRyvTntIkN1cOXhjyWgjCTc="
|
"ext": "http://v.lkuys.cn"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "星辉",
|
"key": "星辉",
|
||||||
"name": "🦢┃星辉┃APP",
|
"name": "🦢┃星辉┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppRJ",
|
"api": "csp_AppRJ",
|
||||||
"ext": "jsSMEuhTZIAHjnUoLBzKdlRu5exzno6M4efF8LzwjWM="
|
"ext": "http://tt.ysdqjs.cn"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "肥猫",
|
"key": "肥猫",
|
||||||
"name": "🐼┃肥猫┃APP",
|
"name": "🐼┃肥猫┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "4wSF77WNzVYxpDQF3Vf/eAoVqKf1nKdv5MpKtrhokKJN288M3lP16ZeoM36I71sJ"
|
"ext": {
|
||||||
|
"url": "https://mac.555618.xyz",
|
||||||
|
"dataKey": "#getapp@TMD@2025",
|
||||||
|
"siteApi": "get",
|
||||||
|
"version": "201"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "干饭",
|
"key": "干饭",
|
||||||
"name": "🍚┃干饭┃APP",
|
"name": "🍚┃干饭┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "Ygx7wpu8Zcm70i88iO9WMRvxQZdMqIapMqvlBKPmjCP60xrvslJlJFIwHepviTkKbgCK9nn25i0k7xnWVX0Y7g=="
|
"ext": {
|
||||||
|
"url": "./txt/coffee.txt",
|
||||||
|
"dataKey": "qwertyuiopqwertm",
|
||||||
|
"siteApi": "qiji",
|
||||||
|
"version": "301"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "光盘",
|
"key": "光盘",
|
||||||
"name": "📀┃光盘┃APP",
|
"name": "📀┃光盘┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "5ztMiKPUcHLR7TRusm5rHsPgFhlXstdsZuadxKTvmldCWgloYKsAMQA+2Sr7eCUj"
|
"ext": {
|
||||||
|
"url": "https://app.xifanys.com",
|
||||||
|
"dataKey": "HM6Ly9yeS4ya3dvL",
|
||||||
|
"siteApi": "get",
|
||||||
|
"version": "119"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "行动",
|
"key": "行动",
|
||||||
"name": "😌┃行动┃APP",
|
"name": "😌┃行动┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppSy",
|
"api": "csp_AppGet",
|
||||||
"ext": "iUYplHbim/qVptUBrzCuqk72erYn+xHvZVGawkGUOqtLGtiWlDcWpUagYzdfPYeECbG+IjVf7Mhz2ZqZ70k6X72tkUhQDNEpIN/XScTGlUE="
|
"ext": {
|
||||||
|
"url": "./txt/xfdd.txt",
|
||||||
|
"dataKey": "xasdasdqwertyuio",
|
||||||
|
"siteApi": "get",
|
||||||
|
"version": "304"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "再来",
|
"key": "再来",
|
||||||
"name": "✌️┃再来┃APP",
|
"name": "✌️┃再来┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "gKqtScS9maa2YW8G9NNOtUsSxDvraRvNMDiazqRUzDYklDH0MMxfu9ZPgRdHKBcI"
|
"ext": {
|
||||||
|
"url": "./txt/kan.txt",
|
||||||
|
"dataKey": "2268331221bobobo",
|
||||||
|
"siteApi": "get",
|
||||||
|
"version": "107"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "一碗",
|
"key": "一碗",
|
||||||
"name": "🥣┃一碗┃APP",
|
"name": "🥣┃一碗┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "cOS1UvSbYM3xW1jXF4QBcYkSAhpFDDoh7c53wGBZEyxDhNunH+Feq+RreiUkQsV1"
|
"ext": {
|
||||||
|
"url": "./txt/89.txt",
|
||||||
|
"dataKey": "#getapp@TMD@2025",
|
||||||
|
"siteApi": "get",
|
||||||
|
"version": "102"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "猫抓",
|
"key": "猫抓",
|
||||||
"name": "🐱┃猫抓┃APP",
|
"name": "🐱┃猫抓┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "uOx4WoHPKe5LbDsNX+u7yPZ/33148sHvWON6kZmflkJm9N9mwXRjT6S/UJau4nVckbCH+h6lvztfl/Ag6BM8Ng=="
|
"ext": {
|
||||||
|
"url": "https://qjappcms.ll4k.xyz",
|
||||||
|
"dataKey": "1yGA85sJ5STtE7uj",
|
||||||
|
"siteApi": "qiji",
|
||||||
|
"version": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "仓鼠",
|
"key": "仓鼠",
|
||||||
"name": "🐹┃耗子┃APP",
|
"name": "🐹┃耗子┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "uOx4WoHPKe5LbDsNX+u7yPwU6Ups0duUFWxZbQqPo2oF+jkgV7jbW6aOO1kS4+9PdDFoRHhRxKKvcUOgzloTKw=="
|
"ext": {
|
||||||
|
"url": "./txt/lanyingxmy.txt",
|
||||||
|
"dataKey": "ca94b06ca359d80e",
|
||||||
|
"siteApi": "qiji",
|
||||||
|
"version": ""
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "蔬菜",
|
"key": "蔬菜",
|
||||||
"name": "🫛┃蔬菜┃APP",
|
"name": "🫛┃蔬菜┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "II6EBjEX9APRjw9zkvfuusSMPTiiXvPm9pK9Zv0wFaq4AWWODp1x+otEA1t0ZFTSq+p0AmaiQvE9cq5Hdl/Vlg=="
|
"ext": {
|
||||||
|
"url": "http://huohu.yihn.cc",
|
||||||
|
"dataKey": "huohushipingetap",
|
||||||
|
"siteApi": "get",
|
||||||
|
"version": "140"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "黑猫",
|
"key": "黑猫",
|
||||||
"name": "🐼┃黑猫┃APP",
|
"name": "🐼┃黑猫┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"api": "csp_AppGet",
|
||||||
"ext": "cLeOXZXsq65z+2s8qkWsD+GYhlTxoLn2cNnZiAXyiQPBfOCR3nVfgmZWdkvjSaqJFD9Bmb+U0RVCI9wv8BMVIg=="
|
"ext": {
|
||||||
|
"url": "https://dm.xxdm123.top:9991",
|
||||||
|
"dataKey": "0fe3b5781782c621",
|
||||||
|
"siteApi": "get",
|
||||||
|
"version": "203"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "囧次元",
|
"key": "小丑",
|
||||||
"name": "🤡┃次元┃APP",
|
"name": "🤡┃小丑┃APP",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppGet",
|
"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",
|
"key": "csp_Jpys",
|
||||||
|
@ -212,17 +267,11 @@
|
||||||
"api": "csp_KmeiJu"
|
"api": "csp_KmeiJu"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "csp_FourK",
|
"key": "csp_Xlys",
|
||||||
"name": "🐿️┃绝对┃影视",
|
"name": "🏔️┃修罗┃磁力",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_FourK",
|
"api": "csp_Xlys",
|
||||||
"ext": "https://www.4kvm.tv"
|
"ext": "https://xl01.com.de"
|
||||||
},
|
|
||||||
{
|
|
||||||
"key": "csp_Lkdy",
|
|
||||||
"name": "🏔️┃来看┃影视",
|
|
||||||
"type": 3,
|
|
||||||
"api": "csp_Lkdy"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "csp_Tvyb",
|
"key": "csp_Tvyb",
|
||||||
|
@ -234,8 +283,7 @@
|
||||||
"key": "csp_Qiyou",
|
"key": "csp_Qiyou",
|
||||||
"name": "🥝┃奇优┃影视",
|
"name": "🥝┃奇优┃影视",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_Qiyou",
|
"api": "csp_Qiyou"
|
||||||
"ext": "http://www.dyxz2.com/"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "荐片",
|
"key": "荐片",
|
||||||
|
@ -291,7 +339,24 @@
|
||||||
"searchable": 1,
|
"searchable": 1,
|
||||||
"quickSearch": 1,
|
"quickSearch": 1,
|
||||||
"filterable": 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",
|
"key": "csp_AppXY",
|
||||||
|
@ -299,6 +364,28 @@
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_AppXY"
|
"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",
|
"key": "csp_SP360",
|
||||||
"name": "📺┃360┃官源",
|
"name": "📺┃360┃官源",
|
||||||
|
@ -328,6 +415,35 @@
|
||||||
"api": "csp_Dm84",
|
"api": "csp_Dm84",
|
||||||
"ext": "https://dm84.net"
|
"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",
|
"key": "csp_FirstAid",
|
||||||
"name": "🚑┃急救┃教学",
|
"name": "🚑┃急救┃教学",
|
||||||
|
|
|
@ -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
|
|
@ -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)
|
|
@ -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"]
|
File diff suppressed because one or more lines are too long
|
@ -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 ""
|
|
@ -0,0 +1 @@
|
||||||
|
dmFyIHJ1bGUgPSB7CiAgICB0aXRsZTogJzU25Yqo5ryrJywKICAgIGhvc3Q6ICdodHRwczovL3d3dy41NmRtLmNjLycsCiAgICB1cmw6ICdodHRwczovL3d3dy41NmRtLmNjL3R5cGUvZnljbGFzcy1meXBhZ2UuaHRtbCcsCiAgICBzZWFyY2hVcmw6ICdodHRwczovL3d3dy41NmRtLmNjL3NlYXJjaC8qKi0tLS0tLS0tLS1meXBhZ2UtLS0uaHRtbCcsCiAgICBzZWFyY2hhYmxlOiAyLCAvL+aYr+WQpuWQr+eUqOWFqOWxgOaQnOe0oiwKICAgIHF1aWNrU2VhcmNoOiAwLCAvL+aYr+WQpuWQr+eUqOW/q+mAn+aQnOe0oiwKICAgIGZpbHRlcmFibGU6IDAsIC8v5piv5ZCm5ZCv55So5YiG57G7562b6YCJLAogICAgaGVhZGVyczogewogICAgICAgICdVc2VyLUFnZW50JzogJ1VDX1VBJywgLy8gIkNvb2tpZSI6ICIiCiAgICB9LCAvLyBjbGFzc19wYXJzZTonLnN0dWktaGVhZGVyX19tZW51IGxpOmd0KDApOmx0KDcpO2EmJlRleHQ7YSYmaHJlZjsvKFxcZCspLmh0bWwnLAogICAgY2xhc3NfcGFyc2U6ICcuc251aS1oZWFkZXItbWVudS1uYXYgbGk6Z3QoMCk6bHQoNik7YSYmVGV4dDthJiZocmVmOy4qLyguKj8pLmh0bWwnLAogICAgcGxheV9wYXJzZTogdHJ1ZSwKICAgIGxhenk6IGBqczoKICAgICAgICAgICAgaWYoL1xcLihtM3U4fG1wNCkvLnRlc3QoaW5wdXQpKXsKICAgICAgICAgICAgICAgIGlucHV0ID0ge3BhcnNlOjAsdXJsOmlucHV0fQogICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgIGlmKHJ1bGUucGFyc2VfdXJsLnN0YXJ0c1dpdGgoJ2pzb246JykpewogICAgICAgICAgICAgICAgICAgIGxldCBwdXJsID0gcnVsZS5wYXJzZV91cmwucmVwbGFjZSgnanNvbjonLCcnKStpbnB1dDsKICAgICAgICAgICAgICAgICAgICBsZXQgaHRtbCA9IHJlcXVlc3QocHVybCk7CiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSB7cGFyc2U6MCx1cmw6SlNPTi5wYXJzZShodG1sKS51cmx9CiAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICBpbnB1dD0gcnVsZS5wYXJzZV91cmwraW5wdXQ7IAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGAsCiAgICBsaW1pdDogNiwKICAgIOaOqOiNkDogJy5jQ0JmX0ZBQUVmYmM7bGk7YSYmdGl0bGU7Lmxhenlsb2FkJiZkYXRhLW9yaWdpbmFsOy5kQURfQkJDSSYmVGV4dDthJiZocmVmJywKICAgIGRvdWJsZTogdHJ1ZSwgLy8g5o6o6I2Q5YaF5a655piv5ZCm5Y+M5bGC5a6a5L2NCiAgICDkuIDnuqc6ICcuY0NCZl9GQUFFZmJjIGxpO2EmJnRpdGxlO2EmJmRhdGEtb3JpZ2luYWw7LmRBRF9CQkNJJiZUZXh0O2EmJmhyZWYnLAogICAg5LqM57qnOiB7CiAgICAgICAgInRpdGxlIjogImgxJiZUZXh0IiwKICAgICAgICAiaW1nIjogIi5zdHVpLWNvbnRlbnRfX3RodW1iIC5sYXp5bG9hZCYmZGF0YS1vcmlnaW5hbCIsCiAgICAgICAgImRlc2MiOiAiLmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMCkmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMSkmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMikmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoMykmJlRleHQ7LmNDQmZfREFCQ2NhY19faGNJZGVFIHA6ZXEoNCkmJlRleHQiLAogICAgICAgICJjb250ZW50IjogIi5kZXRhaWwmJlRleHQiLAogICAgICAgICJ0YWJzIjogIi5jaGFubmVsLXRhYiBsaSIsCiAgICAgICAgImxpc3RzIjogIi5wbGF5LWxpc3QtY29udGVudDplcSgjaWQpIGxpIgogICAgfSwKICAgIOaQnOe0ojogJy5jQ0JmX0ZBQUVmYmNfX2RiRDthJiZ0aXRsZTsubGF6eWxvYWQmJmRhdGEtb3JpZ2luYWw7LmRBRF9CQkNJJiZUZXh0O2EmJmhyZWY7LmNDQmZfRkFBRWZiY19faGNJZGVFJiZwOmVxKDApIHAmJlRleHQnLAp9
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
14541
肥猫/lives/live.txt
14541
肥猫/lives/live.txt
File diff suppressed because it is too large
Load Diff
BIN
肥猫/spider.jar
BIN
肥猫/spider.jar
Binary file not shown.
|
@ -0,0 +1 @@
|
||||||
|
http://app.555618.xyz:1766
|
|
@ -0,0 +1 @@
|
||||||
|
http://111.170.175.120:8596
|
|
@ -0,0 +1 @@
|
||||||
|
http://getapp.hiapp.com.cn/
|
|
@ -0,0 +1 @@
|
||||||
|
http://122.228.193.2:9988
|
|
@ -0,0 +1 @@
|
||||||
|
http://110.42.7.59:9066
|
|
@ -4,7 +4,7 @@
|
||||||
"sites": [
|
"sites": [
|
||||||
{
|
{
|
||||||
"key": "豆",
|
"key": "豆",
|
||||||
"name": "修复荐片厂长【神秘的哥哥们】",
|
"name": "修复926看球【神秘的哥哥们】",
|
||||||
"type": 3,
|
"type": 3,
|
||||||
"api": "csp_DouDouGuard",
|
"api": "csp_DouDouGuard",
|
||||||
"indexs": 1,
|
"indexs": 1,
|
||||||
|
@ -292,7 +292,8 @@
|
||||||
"changeable": 0,
|
"changeable": 0,
|
||||||
"style": {
|
"style": {
|
||||||
"type": "list"
|
"type": "list"
|
||||||
}
|
},
|
||||||
|
"ext": "uqGL1fpJNAUa4uUHi9iMsef1+C/R"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "88",
|
"key": "88",
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
BIN
饭太硬/spider.jar
BIN
饭太硬/spider.jar
Binary file not shown.
Loading…
Reference in New Issue