Delete plugin directory
This commit is contained in:
parent
5c7e270a25
commit
dd783d3b53
BIN
plugin/0.jar
BIN
plugin/0.jar
Binary file not shown.
@ -1,687 +0,0 @@
|
|||||||
{
|
|
||||||
"spider" : "./0.jar",
|
|
||||||
"lives" : [
|
|
||||||
{
|
|
||||||
"group" : "redirect",
|
|
||||||
"channels" : [
|
|
||||||
{
|
|
||||||
"name" : "live",
|
|
||||||
"urls" : [
|
|
||||||
"proxy://do=live&type=txt&ext=clan://live.txt"]
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"sites" : [
|
|
||||||
{
|
|
||||||
"key" : "py_kuaikan",
|
|
||||||
"name" : "快看",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_kuaikan",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_kuaikan.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_alist",
|
|
||||||
"name" : " 🦂Alist",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_alist",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_alist.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_lezhu",
|
|
||||||
"name" : "乐猪",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_lezhu",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_lezhu.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_3qu",
|
|
||||||
"name" : "3QU",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_3qu",
|
|
||||||
"searchable" : 0,
|
|
||||||
"quickSearch" : 0,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_3qu.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_cyys",
|
|
||||||
"name" : "创艺",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_cyys",
|
|
||||||
"searchable" : 0,
|
|
||||||
"quickSearch" : 0,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_cyys.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_wmkk",
|
|
||||||
"name" : "完美看看(半残)",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_wmkk",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_wmkk.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_cup",
|
|
||||||
"name" : "茶杯",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_cup",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_cup.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_star",
|
|
||||||
"name" : "星光",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_star",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_star.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_bilibili",
|
|
||||||
"name" : "哔哩",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_bilibili",
|
|
||||||
"searchable" : 0,
|
|
||||||
"quickSearch" : 0,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_bilibili.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_bilivd",
|
|
||||||
"name" : "B站(带搜索)",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_bilivd",
|
|
||||||
"searchable" : 0,
|
|
||||||
"quickSearch" : 0,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_bilivd.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_cctv",
|
|
||||||
"name" : "央视",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_cctv",
|
|
||||||
"searchable" : 0,
|
|
||||||
"quickSearch" : 0,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_cctv.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_czspp",
|
|
||||||
"name" : "厂长",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_czspp",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_czspp.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_zxzj",
|
|
||||||
"name" : "在线之家",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_zxzj",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_zxzj.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_voflix",
|
|
||||||
"name" : "Voflix",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_voflix",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_voflix.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_bilimd",
|
|
||||||
"name" : "B站影视",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_bilimd",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_bilimd.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_gimytv",
|
|
||||||
"name" : "剧迷",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_gimytv",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_gimytv.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_genmov",
|
|
||||||
"name" : "跟剧",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_genmov",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_genmov.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_huya",
|
|
||||||
"name" : "虎牙",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_huya",
|
|
||||||
"searchable" : 0,
|
|
||||||
"quickSearch" : 0,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_huya.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_douyu",
|
|
||||||
"name" : "斗鱼",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_douyu",
|
|
||||||
"searchable" : 0,
|
|
||||||
"quickSearch" : 0,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_douyu.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_cokemv",
|
|
||||||
"name" : "COKE",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_cokemv",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_cokemv.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_xmaomi",
|
|
||||||
"name" : "猫咪",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_xmaomi",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 1,
|
|
||||||
"ext" : "clan://plugin/py_xmaomi.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_gitcafe",
|
|
||||||
"name" : "小纸条",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_gitcafe",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 0,
|
|
||||||
"ext" : "clan://plugin/py_gitcafe.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_zhaozy",
|
|
||||||
"name" : "找资源",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_zhaozy",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 0,
|
|
||||||
"ext" : "clan://plugin/py_zhaozy.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_yiso",
|
|
||||||
"name" : "易搜",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_yiso",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 0,
|
|
||||||
"ext" : "clan://plugin/py_yiso.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "py_pansou",
|
|
||||||
"name" : "盘搜",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_pansou",
|
|
||||||
"searchable" : 1,
|
|
||||||
"quickSearch" : 1,
|
|
||||||
"filterable" : 0,
|
|
||||||
"ext" : "clan://plugin/py_pansou.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key" : "push_agent",
|
|
||||||
"name" : "阿里",
|
|
||||||
"type" : 3,
|
|
||||||
"api" : "py_ali",
|
|
||||||
"searchable" : 0,
|
|
||||||
"quickSearch" : 0,
|
|
||||||
"filterable" : 0,
|
|
||||||
"ext" : "clan://plugin/py_ali.py"
|
|
||||||
}],
|
|
||||||
"parses" : [
|
|
||||||
{
|
|
||||||
"name" : "解析聚合",
|
|
||||||
"type" : 3,
|
|
||||||
"url" : "Demo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "Json并发",
|
|
||||||
"type" : 2,
|
|
||||||
"url" : "Parallel"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "Json轮询",
|
|
||||||
"type" : 2,
|
|
||||||
"url" : "Sequence"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "网络搜集02",
|
|
||||||
"type" : 1,
|
|
||||||
"url" : "https://json.pangujiexi.com/json.php?url=",
|
|
||||||
"ext" : {
|
|
||||||
"flag" : [
|
|
||||||
"youku",
|
|
||||||
"优酷",
|
|
||||||
"qq",
|
|
||||||
"腾讯",
|
|
||||||
"qiyi",
|
|
||||||
"爱奇艺",
|
|
||||||
"奇艺"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "网络搜集03",
|
|
||||||
"type" : 1,
|
|
||||||
"url" : "https://vip.aiaine.com/api/?key=8FN8gNAySnvJiMllxZ&url=",
|
|
||||||
"ext" : {
|
|
||||||
"flag" : [
|
|
||||||
"Itnb",
|
|
||||||
"wuduzy"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "网络搜集04",
|
|
||||||
"type" : 1,
|
|
||||||
"url" : "http://api.vip123kan.vip/?url=",
|
|
||||||
"ext" : {
|
|
||||||
"flag" : [
|
|
||||||
"youku",
|
|
||||||
"优酷",
|
|
||||||
"mgtv",
|
|
||||||
"芒果",
|
|
||||||
"qq",
|
|
||||||
"腾讯",
|
|
||||||
"qiyi",
|
|
||||||
"爱奇艺",
|
|
||||||
"qq",
|
|
||||||
"xigua",
|
|
||||||
"奇艺"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "网络搜集05",
|
|
||||||
"type" : 1,
|
|
||||||
"url" : "https://a.dxzj88.com/jxrrm/jiami.php?url=",
|
|
||||||
"ext" : {
|
|
||||||
"flag" : [
|
|
||||||
"qq",
|
|
||||||
"腾讯",
|
|
||||||
"qiyi",
|
|
||||||
"爱奇艺",
|
|
||||||
"奇艺",
|
|
||||||
"youku",
|
|
||||||
"优酷",
|
|
||||||
"sohu",
|
|
||||||
"芒果",
|
|
||||||
"mgtv",
|
|
||||||
"xigua",
|
|
||||||
"wuduzy",
|
|
||||||
"bilibili",
|
|
||||||
"pptv",
|
|
||||||
"leduo",
|
|
||||||
"Clk4",
|
|
||||||
"哔哩",
|
|
||||||
"renrenmi",
|
|
||||||
"ltnb",
|
|
||||||
"rx"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "网络搜集06",
|
|
||||||
"type" : 1,
|
|
||||||
"url" : "https://sz.dxzj88.com/jxrjrm/jiaomi.php?url=",
|
|
||||||
"ext" : {
|
|
||||||
"flag" : [
|
|
||||||
"qq",
|
|
||||||
"腾讯",
|
|
||||||
"qiyi",
|
|
||||||
"爱奇艺",
|
|
||||||
"奇艺",
|
|
||||||
"youku",
|
|
||||||
"优酷",
|
|
||||||
"sohu",
|
|
||||||
"芒果",
|
|
||||||
"mgtv",
|
|
||||||
"xigua",
|
|
||||||
"wuduzy",
|
|
||||||
"bilibili",
|
|
||||||
"pptv",
|
|
||||||
"leduo",
|
|
||||||
"Clk4",
|
|
||||||
"哔哩",
|
|
||||||
"renrenmi",
|
|
||||||
"ltnb",
|
|
||||||
"rx"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "网络搜集07",
|
|
||||||
"type" : 1,
|
|
||||||
"url" : "https://vip.aiaine.com/api/?key=8FN8gNAySnvJiMllxZ&url=",
|
|
||||||
"ext" : {
|
|
||||||
"flag" : [
|
|
||||||
"ltnb"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "网络搜集08",
|
|
||||||
"type" : 1,
|
|
||||||
"url" : "https://svip.rongxingvr.top/api/?key=niBgMGXVdCQhsmeEBK&url=",
|
|
||||||
"ext" : {
|
|
||||||
"flag" : [
|
|
||||||
"youku",
|
|
||||||
"qq",
|
|
||||||
"mgtv",
|
|
||||||
"bilibili",
|
|
||||||
"wasu",
|
|
||||||
"xigua",
|
|
||||||
"renrenmi",
|
|
||||||
"优酷",
|
|
||||||
"芒果"]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name" : "网络搜集10",
|
|
||||||
"type" : 1,
|
|
||||||
"url" : "https://json.5lp.net/json.php?url=",
|
|
||||||
"ext" : {
|
|
||||||
"flag" : [
|
|
||||||
"qq",
|
|
||||||
"腾讯",
|
|
||||||
"qiyi",
|
|
||||||
"爱奇艺",
|
|
||||||
"奇艺",
|
|
||||||
"youku",
|
|
||||||
"优酷",
|
|
||||||
"mgtv",
|
|
||||||
"芒果",
|
|
||||||
"renrenmi",
|
|
||||||
"Itnb"]
|
|
||||||
}
|
|
||||||
}],
|
|
||||||
"flags" : [
|
|
||||||
"youku",
|
|
||||||
"qq",
|
|
||||||
"iqiyi",
|
|
||||||
"qiyi",
|
|
||||||
"letv",
|
|
||||||
"sohu",
|
|
||||||
"letv",
|
|
||||||
"tudou",
|
|
||||||
"pptv",
|
|
||||||
"mgtv",
|
|
||||||
"wasu",
|
|
||||||
"bilibili",
|
|
||||||
"leduo",
|
|
||||||
"fq3",
|
|
||||||
"fq4",
|
|
||||||
"xueren",
|
|
||||||
"duoduo",
|
|
||||||
"duoduozy",
|
|
||||||
"miaoparty",
|
|
||||||
"miaoparty2",
|
|
||||||
"miaoparty3",
|
|
||||||
"renrenmi",
|
|
||||||
"优酷",
|
|
||||||
"芒果",
|
|
||||||
"腾讯",
|
|
||||||
"爱奇艺",
|
|
||||||
"奇艺",
|
|
||||||
"ltnb",
|
|
||||||
"rx",
|
|
||||||
"CL4K",
|
|
||||||
"xfyun",
|
|
||||||
"wuduzy"],
|
|
||||||
"ijk" : [
|
|
||||||
{
|
|
||||||
"group" : "软解码",
|
|
||||||
"options" : [
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "opensles",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "overlay-format",
|
|
||||||
"value" : "842225234"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "framedrop",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "soundtouch",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "start-on-prepared",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 1,
|
|
||||||
"name" : "http-detect-range-support",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 1,
|
|
||||||
"name" : "fflags",
|
|
||||||
"value" : "fastseek"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 2,
|
|
||||||
"name" : "skip_loop_filter",
|
|
||||||
"value" : "48"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "reconnect",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "enable-accurate-seek",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "mediacodec",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "mediacodec-auto-rotate",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "mediacodec-handle-resolution-change",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "mediacodec-hevc",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 1,
|
|
||||||
"name" : "dns_cache_timeout",
|
|
||||||
"value" : "600000000"
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"group" : "硬解码",
|
|
||||||
"options" : [
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "opensles",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "overlay-format",
|
|
||||||
"value" : "842225234"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "framedrop",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "soundtouch",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "start-on-prepared",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 1,
|
|
||||||
"name" : "http-detect-range-support",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 1,
|
|
||||||
"name" : "fflags",
|
|
||||||
"value" : "fastseek"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 2,
|
|
||||||
"name" : "skip_loop_filter",
|
|
||||||
"value" : "48"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "reconnect",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "enable-accurate-seek",
|
|
||||||
"value" : "0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "mediacodec",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "mediacodec-auto-rotate",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "mediacodec-handle-resolution-change",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 4,
|
|
||||||
"name" : "mediacodec-hevc",
|
|
||||||
"value" : "1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"category" : 1,
|
|
||||||
"name" : "dns_cache_timeout",
|
|
||||||
"value" : "600000000"
|
|
||||||
}]
|
|
||||||
}],
|
|
||||||
"ads" : [
|
|
||||||
"mimg.0c1q0l.cn",
|
|
||||||
"www.googletagmanager.com",
|
|
||||||
"www.google-analytics.com",
|
|
||||||
"mc.usihnbcq.cn",
|
|
||||||
"mg.g1mm3d.cn",
|
|
||||||
"mscs.svaeuzh.cn",
|
|
||||||
"cnzz.hhttm.top",
|
|
||||||
"tp.vinuxhome.com",
|
|
||||||
"cnzz.mmstat.com",
|
|
||||||
"www.baihuillq.com",
|
|
||||||
"s23.cnzz.com",
|
|
||||||
"z3.cnzz.com",
|
|
||||||
"c.cnzz.com",
|
|
||||||
"stj.v1vo.top",
|
|
||||||
"z12.cnzz.com",
|
|
||||||
"img.mosflower.cn",
|
|
||||||
"tips.gamevvip.com",
|
|
||||||
"ehwe.yhdtns.com",
|
|
||||||
"xdn.cqqc3.com",
|
|
||||||
"www.jixunkyy.cn",
|
|
||||||
"sp.chemacid.cn",
|
|
||||||
"hm.baidu.com",
|
|
||||||
"s9.cnzz.com",
|
|
||||||
"z6.cnzz.com",
|
|
||||||
"um.cavuc.com",
|
|
||||||
"mav.mavuz.com",
|
|
||||||
"wofwk.aoidf3.com",
|
|
||||||
"z5.cnzz.com",
|
|
||||||
"xc.hubeijieshikj.cn",
|
|
||||||
"tj.tianwenhu.com",
|
|
||||||
"xg.gars57.cn",
|
|
||||||
"k.jinxiuzhilv.com",
|
|
||||||
"cdn.bootcss.com",
|
|
||||||
"ppl.xunzhuo123.com",
|
|
||||||
"xomk.jiangjunmh.top",
|
|
||||||
"img.xunzhuo123.com",
|
|
||||||
"z1.cnzz.com",
|
|
||||||
"s13.cnzz.com",
|
|
||||||
"xg.huataisangao.cn",
|
|
||||||
"z7.cnzz.com",
|
|
||||||
"xg.huataisangao.cn",
|
|
||||||
"z2.cnzz.com",
|
|
||||||
"s96.cnzz.com",
|
|
||||||
"q11.cnzz.com",
|
|
||||||
"thy.dacedsfa.cn",
|
|
||||||
"xg.whsbpw.cn",
|
|
||||||
"s19.cnzz.com",
|
|
||||||
"z8.cnzz.com",
|
|
||||||
"s4.cnzz.com",
|
|
||||||
"f5w.as12df.top",
|
|
||||||
"ae01.alicdn.com",
|
|
||||||
"www.92424.cn",
|
|
||||||
"k.wudejia.com",
|
|
||||||
"vivovip.mmszxc.top",
|
|
||||||
"qiu.xixiqiu.com",
|
|
||||||
"cdnjs.hnfenxun.com",
|
|
||||||
"cms.qdwght.com"],
|
|
||||||
"wallpaper" : "https://picsum.photos/1080",
|
|
||||||
"spider" : ""
|
|
||||||
}
|
|
191
plugin/py_3qu.py
191
plugin/py_3qu.py
@ -1,191 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
# !/usr/bin/python
|
|
||||||
import sys
|
|
||||||
import re
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import urllib.parse
|
|
||||||
import json
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "快播影视"
|
|
||||||
|
|
||||||
def init(self, extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
|
|
||||||
def homeContent(self, filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"电影": "movie",
|
|
||||||
"剧集": "serie",
|
|
||||||
"综艺": "variety",
|
|
||||||
"动漫": "anime"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name': k,
|
|
||||||
'type_id': cateManual[k]
|
|
||||||
})
|
|
||||||
|
|
||||||
result['class'] = classes
|
|
||||||
if (filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {
|
|
||||||
'list': []
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def categoryContent(self, tid, pg, filter, extend):
|
|
||||||
result = {}
|
|
||||||
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
|
|
||||||
url = 'https://www.3qu.live/videos/{0}?page={1}'.format(tid, pg)
|
|
||||||
rsp = self.fetch(url,headers=header)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
aList = root.xpath("//div[@class='main-content-box']/div/div/div/div/div/div/a")
|
|
||||||
videos = []
|
|
||||||
for a in aList:
|
|
||||||
name = a.xpath('./@title')[0]
|
|
||||||
picl = a.xpath('./@style')[0]
|
|
||||||
pica = re.findall(r"url\(\'(.*)\'\);", picl)[0]
|
|
||||||
pic = 'https://www.3qu.live{0}'.format(pica)
|
|
||||||
sidh = a.xpath("./@href")[0]
|
|
||||||
sid = self.regStr(sidh,'/videos/(\\S+).html')
|
|
||||||
videos.append({
|
|
||||||
"vod_id": sid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": ""
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 100
|
|
||||||
result['total'] = 99999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def detailContent(self, array):
|
|
||||||
tid = array[0]
|
|
||||||
url = 'https://www.3qu.live/videos/{0}.html'.format(tid)
|
|
||||||
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
|
|
||||||
rsp = self.fetch(url,headers=header)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
divContent = root.xpath("//div[@class='video-detail row']")[0]
|
|
||||||
title = divContent.xpath(".//div[@class='info-box']/a/h1/text()")[0]
|
|
||||||
pica = divContent.xpath(".//div[@class='thumb-box']/img/@src")[0]
|
|
||||||
pic = 'https://www.3qu.live{0}'.format(pica)
|
|
||||||
vod = {
|
|
||||||
"vod_id": tid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": "",
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": "",
|
|
||||||
"vod_actor": "",
|
|
||||||
"vod_director": "",
|
|
||||||
"vod_content": ""
|
|
||||||
}
|
|
||||||
infoArray = divContent.xpath(".//div[@class='info-box']/ul/li")
|
|
||||||
for info in infoArray:
|
|
||||||
content = info.xpath('string(.)')
|
|
||||||
flag = "类型" in content
|
|
||||||
if flag == True:
|
|
||||||
infon = content.strip().split(' ')
|
|
||||||
for inf in infon:
|
|
||||||
if inf.startswith('类型'):
|
|
||||||
vod['type_name'] = inf.replace("类型:", "")
|
|
||||||
if inf.startswith('地区'):
|
|
||||||
vod['vod_area'] = inf.replace("地区:", "")
|
|
||||||
if inf.startswith('语言'):
|
|
||||||
vod['vod_remarks'] = inf.replace("语言:", "")
|
|
||||||
if content.startswith('演员'):
|
|
||||||
vod['vod_actor'] = content.replace("演员:", "")
|
|
||||||
if content.startswith('年份'):
|
|
||||||
yearl = content.split(' ')
|
|
||||||
year = yearl[0].replace("年份:", "")
|
|
||||||
vod['vod_year'] = year
|
|
||||||
if content.startswith('导演'):
|
|
||||||
vod['vod_director'] = content.replace("导演:", "")
|
|
||||||
if content.startswith('简介'):
|
|
||||||
vod['vod_content'] = content.replace("简介:", "")
|
|
||||||
vodList = root.xpath(".//div[@class='tab-content']/div[@id='playlist']/a")
|
|
||||||
playUrl = ''
|
|
||||||
for vl in vodList:
|
|
||||||
name = vl.xpath("./text()")[0]
|
|
||||||
did = vl.xpath("./@data-id")[0]
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(name,tid,did)
|
|
||||||
vod['vod_play_from'] = '快播影视'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def searchContent(self, key, quick):
|
|
||||||
header = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
|
|
||||||
url = 'https://www.3qu.live/api/v1/search?page=1&q={0}&type=all&period=0'.format(key)
|
|
||||||
rsp = self.fetch(url, headers=header)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
videos = []
|
|
||||||
vodList = jRoot['data']['videos']
|
|
||||||
for vod in vodList:
|
|
||||||
id = vod['id']
|
|
||||||
title = vod['name']
|
|
||||||
img = vod['coverURL']
|
|
||||||
pic = 'https://www.3qu.live{0}'.format(img)
|
|
||||||
videos.append({
|
|
||||||
"vod_id": id,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": ""
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list': videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self, flag, id, vipFlags):
|
|
||||||
result = {}
|
|
||||||
ids = id.split("_")
|
|
||||||
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
|
|
||||||
url = 'https://www.3qu.live/api/v1/videos/{0}/{1}/playUrl'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url,headers=header)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
apiurl = jRoot['data']['url']
|
|
||||||
url = 'https://www.3qu.live{0}'.format(apiurl)
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] =url
|
|
||||||
result["header"] = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def isVideoFormat(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def localProxy(self, param):
|
|
||||||
action = {
|
|
||||||
'url': '',
|
|
||||||
'header': '',
|
|
||||||
'param': '',
|
|
||||||
'type': 'string',
|
|
||||||
'after': ''
|
|
||||||
}
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
405
plugin/py_ali.py
405
plugin/py_ali.py
@ -1,405 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
import requests
|
|
||||||
import time
|
|
||||||
import re
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "阿里云盘"
|
|
||||||
def init(self,extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
if flag == 'AliYun':
|
|
||||||
return self.originContent(flag,id,vipFlags)
|
|
||||||
elif flag == 'AliYun原画':
|
|
||||||
return self.fhdContent(flag,id,vipFlags)
|
|
||||||
else:
|
|
||||||
return {}
|
|
||||||
def fhdContent(self,flag,id,vipFlags):
|
|
||||||
self.login()
|
|
||||||
ids = id.split('+')
|
|
||||||
shareId = ids[0]
|
|
||||||
shareToken = ids[1]
|
|
||||||
fileId = ids[2]
|
|
||||||
category = ids[3]
|
|
||||||
url = self.getDownloadUrl(shareId,shareToken,fileId,category)
|
|
||||||
print(url)
|
|
||||||
|
|
||||||
noRsp = requests.get(url,headers=self.header, allow_redirects=False,verify = False)
|
|
||||||
realUrl = ''
|
|
||||||
if 'Location' in noRsp.headers:
|
|
||||||
realUrl = noRsp.headers['Location']
|
|
||||||
if 'location' in noRsp.headers and len(realUrl) == 0 :
|
|
||||||
realUrl = noRsp.headers['location']
|
|
||||||
newHeader = {
|
|
||||||
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36",
|
|
||||||
"referer":"https://www.aliyundrive.com/",
|
|
||||||
}
|
|
||||||
result = {
|
|
||||||
'parse':'0',
|
|
||||||
'playUrl':'',
|
|
||||||
'url':realUrl,
|
|
||||||
'header':newHeader
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def originContent(self,flag,id,vipFlags):
|
|
||||||
self.login()
|
|
||||||
ids = id.split('+')
|
|
||||||
shareId = ids[0]
|
|
||||||
shareToken = ids[1]
|
|
||||||
fileId = ids[2]
|
|
||||||
url = '{0}?do=push_agent&api=python&type=m3u8&share_id={1}&file_id={2}'.format(self.localProxyUrl,shareId,fileId)
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'parse':'0',
|
|
||||||
'playUrl':'',
|
|
||||||
'url':url,
|
|
||||||
'header':''
|
|
||||||
}
|
|
||||||
|
|
||||||
# shareToken = self.getToken(shareId,'')
|
|
||||||
# self.getMediaSlice(shareId,shareToken,fileId)
|
|
||||||
|
|
||||||
|
|
||||||
# map = {
|
|
||||||
# 'share_id':'p1GJYEqgeb2',
|
|
||||||
# 'file_id':'62ed1b95b1048d60ffc246669f5e0999e90b8c2f',
|
|
||||||
# 'media_id':'1'
|
|
||||||
# }
|
|
||||||
|
|
||||||
# self.proxyMedia(map)
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
def detailContent(self,array):
|
|
||||||
tid = array[0]
|
|
||||||
# shareId = self.regStr(href,'www.aliyundrive.com\\/s\\/([^\\/]+)(\\/folder\\/([^\\/]+))?')
|
|
||||||
# todo =========================================================================================
|
|
||||||
m = re.search('www.aliyundrive.com\\/s\\/([^\\/]+)(\\/folder\\/([^\\/]+))?', tid)
|
|
||||||
col = m.groups()
|
|
||||||
shareId = col[0]
|
|
||||||
fileId = col[2]
|
|
||||||
|
|
||||||
infoUrl = 'https://api.aliyundrive.com/adrive/v3/share_link/get_share_by_anonymous'
|
|
||||||
|
|
||||||
infoForm = {'share_id':shareId}
|
|
||||||
infoRsp = requests.post(infoUrl,json = infoForm,headers=self.header)
|
|
||||||
infoJo = json.loads(infoRsp.text)
|
|
||||||
|
|
||||||
infoJa = []
|
|
||||||
if 'file_infos' in infoJo:
|
|
||||||
infoJa = infoJo['file_infos']
|
|
||||||
if len(infoJa) <= 0 :
|
|
||||||
return ''
|
|
||||||
fileInfo = {}
|
|
||||||
# todo
|
|
||||||
fileInfo = infoJa[0]
|
|
||||||
print(fileId)
|
|
||||||
if fileId == None or len(fileId) <= 0:
|
|
||||||
fileId = fileInfo['file_id']
|
|
||||||
|
|
||||||
vodList = {
|
|
||||||
'vod_id':tid,
|
|
||||||
'vod_name':infoJo['share_name'],
|
|
||||||
'vod_pic':infoJo['avatar'],
|
|
||||||
'vod_content':tid,
|
|
||||||
'vod_play_from':'AliYun原画'
|
|
||||||
}
|
|
||||||
fileType = fileInfo['type']
|
|
||||||
if fileType != 'folder':
|
|
||||||
if fileType != 'file' or fileInfo['category'] != video:
|
|
||||||
return ''
|
|
||||||
fileId = 'root'
|
|
||||||
|
|
||||||
shareToken = self.getToken(shareId,'')
|
|
||||||
hashMap = {}
|
|
||||||
self.listFiles(hashMap,shareId,shareToken,fileId)
|
|
||||||
|
|
||||||
sortedMap = sorted(hashMap.items(), key=lambda x: x[0])
|
|
||||||
arrayList = []
|
|
||||||
playList = []
|
|
||||||
|
|
||||||
for sm in sortedMap:
|
|
||||||
arrayList.append(sm[0]+'$'+sm[1])
|
|
||||||
playList.append('#'.join(arrayList))
|
|
||||||
playList.append('#'.join(arrayList))
|
|
||||||
vodList['vod_play_url'] = '$$$'.join(playList)
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[vodList]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
authorization = ''
|
|
||||||
timeoutTick = 0
|
|
||||||
localTime = 0
|
|
||||||
expiresIn = 0
|
|
||||||
shareTokenMap = {}
|
|
||||||
expiresMap = {}
|
|
||||||
localMedia = {}
|
|
||||||
header = {
|
|
||||||
"Referer":"https://www.aliyundrive.com/",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
|
|
||||||
}
|
|
||||||
localProxyUrl = 'http://127.0.0.1:UndCover/proxy'
|
|
||||||
|
|
||||||
def redirectResponse(tUrl):
|
|
||||||
rsp = requests.get(tUrl, allow_redirects=False,verify = False)
|
|
||||||
if 'Location' in rsp.headers:
|
|
||||||
return redirectResponse(rsp.headers['Location'])
|
|
||||||
else:
|
|
||||||
return rsp
|
|
||||||
|
|
||||||
def getDownloadUrl(self,shareId,token,fileId,category):
|
|
||||||
lShareId = shareId
|
|
||||||
lFileId = fileId
|
|
||||||
params = {
|
|
||||||
"share_id": lShareId,
|
|
||||||
"category": "live_transcoding",
|
|
||||||
"file_id": lFileId,
|
|
||||||
"template_id": ""
|
|
||||||
}
|
|
||||||
customHeader = self.header.copy()
|
|
||||||
customHeader['x-share-token'] = token
|
|
||||||
customHeader['authorization'] = self.authorization
|
|
||||||
url = 'https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info'
|
|
||||||
if category == 'video':
|
|
||||||
rsp = requests.post(url,json = params,headers=customHeader)
|
|
||||||
rspJo = json.loads(rsp.text)
|
|
||||||
lShareId = rspJo['share_id']
|
|
||||||
lFileId = rspJo['file_id']
|
|
||||||
jo = {
|
|
||||||
|
|
||||||
}
|
|
||||||
if category == 'video':
|
|
||||||
jo['share_id'] = lShareId
|
|
||||||
jo['file_id'] = lFileId
|
|
||||||
jo['expire_sec'] = 600
|
|
||||||
if category == 'audio':
|
|
||||||
jo['share_id'] = lShareId
|
|
||||||
jo['file_id'] = lFileId
|
|
||||||
jo['get_audio_play_info'] = True
|
|
||||||
downloadUrl = 'https://api.aliyundrive.com/v2/file/get_share_link_download_url'
|
|
||||||
downloadRsp = requests.post(downloadUrl,json = jo,headers=customHeader)
|
|
||||||
resultJo = json.loads(downloadRsp.text)
|
|
||||||
return resultJo['download_url']
|
|
||||||
|
|
||||||
def getMediaSlice(self,shareId,token,fileId):
|
|
||||||
params = {
|
|
||||||
"share_id": shareId,
|
|
||||||
"category": "live_transcoding",
|
|
||||||
"file_id": fileId,
|
|
||||||
"template_id": ""
|
|
||||||
}
|
|
||||||
customHeader = self.header.copy()
|
|
||||||
customHeader['x-share-token'] = token
|
|
||||||
customHeader['authorization'] = self.authorization
|
|
||||||
url = 'https://api.aliyundrive.com/v2/file/get_share_link_video_preview_play_info'
|
|
||||||
|
|
||||||
rsp = requests.post(url,json = params,headers=customHeader)
|
|
||||||
rspJo = json.loads(rsp.text)
|
|
||||||
|
|
||||||
quality = ['FHD','HD','SD']
|
|
||||||
videoList = rspJo['video_preview_play_info']['live_transcoding_task_list']
|
|
||||||
highUrl = ''
|
|
||||||
for q in quality:
|
|
||||||
if len(highUrl) > 0:
|
|
||||||
break
|
|
||||||
for video in videoList:
|
|
||||||
if(video['template_id'] == q):
|
|
||||||
highUrl = video['url']
|
|
||||||
break
|
|
||||||
if len(highUrl) == 0:
|
|
||||||
highUrl = videoList[0]['url']
|
|
||||||
|
|
||||||
noRsp = requests.get(highUrl,headers=self.header, allow_redirects=False,verify = False)
|
|
||||||
m3u8Url = ''
|
|
||||||
if 'Location' in noRsp.headers:
|
|
||||||
m3u8Url = noRsp.headers['Location']
|
|
||||||
if 'location' in noRsp.headers and len(m3u8Url) == 0 :
|
|
||||||
m3u8Url = noRsp.headers['location']
|
|
||||||
m3u8Rsp = requests.get(m3u8Url,headers=self.header)
|
|
||||||
m3u8Content = m3u8Rsp.text
|
|
||||||
|
|
||||||
tmpArray = m3u8Url.split('/')[0:-1]
|
|
||||||
host = '/'.join(tmpArray) + '/'
|
|
||||||
|
|
||||||
m3u8List = []
|
|
||||||
mediaMap = {}
|
|
||||||
slices = m3u8Content.split("\n")
|
|
||||||
count = 0
|
|
||||||
for slice in slices:
|
|
||||||
tmpSlice = slice
|
|
||||||
if 'x-oss-expires' in tmpSlice:
|
|
||||||
count = count + 1
|
|
||||||
mediaMap[str(count)] = host+tmpSlice
|
|
||||||
|
|
||||||
tmpSlice = "{0}?do=push_agent&api=python&type=media&share_id={1}&file_id={2}&media_id={3}".format(self.localProxyUrl,shareId,fileId,count)
|
|
||||||
m3u8List.append(tmpSlice)
|
|
||||||
|
|
||||||
self.localMedia[fileId] = mediaMap
|
|
||||||
|
|
||||||
return '\n'.join(m3u8List)
|
|
||||||
|
|
||||||
def proxyMedia(self,map):
|
|
||||||
shareId = map['share_id']
|
|
||||||
fileId = map['file_id']
|
|
||||||
mediaId = map['media_id']
|
|
||||||
shareToken = self.getToken(shareId,'')
|
|
||||||
|
|
||||||
refresh = False
|
|
||||||
url = ''
|
|
||||||
ts = 0
|
|
||||||
if fileId in self.localMedia:
|
|
||||||
fileMap = self.localMedia[fileId]
|
|
||||||
if mediaId in fileMap:
|
|
||||||
url = fileMap[mediaId]
|
|
||||||
if len(url) > 0:
|
|
||||||
ts = int(self.regStr(url,"x-oss-expires=(\\d+)&"))
|
|
||||||
|
|
||||||
# url = self.localMedia[fileId][mediaId]
|
|
||||||
|
|
||||||
# ts = int(self.regStr(url,"x-oss-expires=(\\d+)&"))
|
|
||||||
|
|
||||||
self.localTime = int(time.time())
|
|
||||||
|
|
||||||
if ts - self.localTime <= 60:
|
|
||||||
self.getMediaSlice(shareId,shareToken,fileId)
|
|
||||||
url = self.localMedia[fileId][mediaId]
|
|
||||||
|
|
||||||
action = {
|
|
||||||
'url':url,
|
|
||||||
'header':self.header,
|
|
||||||
'param':'',
|
|
||||||
'type':'stream',
|
|
||||||
'after':''
|
|
||||||
}
|
|
||||||
print(action)
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
||||||
|
|
||||||
def proxyM3U8(self,map):
|
|
||||||
shareId = map['share_id']
|
|
||||||
fileId = map['file_id']
|
|
||||||
|
|
||||||
shareToken = self.getToken(shareId,'')
|
|
||||||
content = self.getMediaSlice(shareId,shareToken,fileId)
|
|
||||||
|
|
||||||
action = {
|
|
||||||
'url':'',
|
|
||||||
'header':'',
|
|
||||||
'param':'',
|
|
||||||
'type':'string',
|
|
||||||
'after':''
|
|
||||||
}
|
|
||||||
|
|
||||||
return [200, "application/octet-stream", action, content]
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
typ = param['type']
|
|
||||||
if typ == "m3u8":
|
|
||||||
return self.proxyM3U8(param)
|
|
||||||
if typ == "media":
|
|
||||||
return self.proxyMedia(param)
|
|
||||||
return None
|
|
||||||
|
|
||||||
def getToken(self,shareId,sharePwd):
|
|
||||||
self.localTime = int(time.time())
|
|
||||||
shareToken = ''
|
|
||||||
if shareId in self.shareTokenMap:
|
|
||||||
shareToken = self.shareTokenMap[shareId]
|
|
||||||
# todo
|
|
||||||
expire = self.expiresMap[shareId]
|
|
||||||
if len(shareToken) > 0 and expire - self.localTime > 600:
|
|
||||||
return shareToken
|
|
||||||
params = {
|
|
||||||
'share_id':shareId,
|
|
||||||
'share_pwd':sharePwd
|
|
||||||
}
|
|
||||||
url = 'https://api.aliyundrive.com/v2/share_link/get_share_token'
|
|
||||||
rsp = requests.post(url,json = params,headers=self.header)
|
|
||||||
jo = json.loads(rsp.text)
|
|
||||||
newShareToken = jo['share_token']
|
|
||||||
self.expiresMap[shareId] = self.localTime + int(jo['expires_in'])
|
|
||||||
self.shareTokenMap[shareId] = newShareToken
|
|
||||||
|
|
||||||
print(self.expiresMap)
|
|
||||||
print(self.shareTokenMap)
|
|
||||||
|
|
||||||
return newShareToken
|
|
||||||
|
|
||||||
def listFiles(self,map,shareId,shareToken,fileId):
|
|
||||||
url = 'https://api.aliyundrive.com/adrive/v3/file/list'
|
|
||||||
newHeader = self.header.copy()
|
|
||||||
newHeader['x-share-token'] = shareToken
|
|
||||||
params = {
|
|
||||||
'image_thumbnail_process':'image/resize,w_160/format,jpeg',
|
|
||||||
'image_url_process':'image/resize,w_1920/format,jpeg',
|
|
||||||
'limit':200,
|
|
||||||
'order_by':'updated_at',
|
|
||||||
'order_direction':'DESC',
|
|
||||||
'parent_file_id':fileId,
|
|
||||||
'share_id':shareId,
|
|
||||||
'video_thumbnail_process':'video/snapshot,t_1000,f_jpg,ar_auto,w_300'
|
|
||||||
}
|
|
||||||
maker = ''
|
|
||||||
arrayList = []
|
|
||||||
for i in range(1,51):
|
|
||||||
if i >= 2 and len(maker) == 0:
|
|
||||||
break
|
|
||||||
params['marker'] = maker
|
|
||||||
rsp = requests.post(url,json = params,headers=newHeader)
|
|
||||||
jo = json.loads(rsp.text)
|
|
||||||
ja = jo['items']
|
|
||||||
for jt in ja:
|
|
||||||
if jt['type'] == 'folder':
|
|
||||||
arrayList.append(jt['file_id'])
|
|
||||||
else:
|
|
||||||
if 'video' in jt['mime_type'] or 'video' in jt['category']:
|
|
||||||
repStr = jt['name'].replace("#", "_").replace("$", "_")
|
|
||||||
map[repStr] = shareId + "+" + shareToken + "+" + jt['file_id'] + "+" + jt['category']
|
|
||||||
# print(repStr,shareId + "+" + shareToken + "+" + jt['file_id'])
|
|
||||||
maker = jo['next_marker']
|
|
||||||
i = i + 1
|
|
||||||
|
|
||||||
for item in arrayList:
|
|
||||||
self.listFiles(map,shareId,shareToken,item)
|
|
||||||
|
|
||||||
def login(self):
|
|
||||||
self.localTime = int(time.time())
|
|
||||||
url = 'https://api.aliyundrive.com/token/refresh'
|
|
||||||
if len(self.authorization) == 0 or self.timeoutTick - self.localTime <= 600:
|
|
||||||
form = {
|
|
||||||
'refresh_token':'81461f2e9d0b4ffb86612db403824b8a'
|
|
||||||
}
|
|
||||||
rsp = requests.post(url,json = form,headers=self.header)
|
|
||||||
jo = json.loads(rsp.text)
|
|
||||||
self.authorization = jo['token_type'] + ' ' + jo['access_token']
|
|
||||||
self.expiresIn = int(jo['expires_in'])
|
|
||||||
self.timeoutTick = self.localTime + self.expiresIn
|
|
||||||
|
|
||||||
# print(self.authorization)
|
|
||||||
# print(self.timeoutTick)
|
|
||||||
# print(self.localTime)
|
|
||||||
# print(self.expiresIn)
|
|
@ -1,166 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
# !/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "Alist"
|
|
||||||
|
|
||||||
def init(self, extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
|
|
||||||
def isVideoFormat(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def homeContent(self, filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"🔮嗨翻":"https://pan.hikerfans.com",
|
|
||||||
"🦀9T(Adult)":"https://drive.9t.ee",
|
|
||||||
"🐱梓澪の妙妙屋":"https://xn--i0v44m.xyz",
|
|
||||||
"🚆资源小站":"https://pan.142856.xyz",
|
|
||||||
"🌤晴园的宝藏库":"https://alist.52qy.repl.co",
|
|
||||||
"🐭米奇妙妙屋":"https://anime.mqmmw.ga",
|
|
||||||
"💂小兵组网盘影视":"https://6vv.app",
|
|
||||||
"📀小光盘":"https://alist.xiaoguanxiaocheng.life",
|
|
||||||
"🐋一只鱼":"https://alist.youte.ml",
|
|
||||||
"🌊七米蓝":"https://al.chirmyram.com",
|
|
||||||
"🌴非盘":"http://www.feifwp.top",
|
|
||||||
"🥼帅盘":"https://hi.shuaipeng.wang",
|
|
||||||
"🐉神族九帝":"https://alist.shenzjd.com",
|
|
||||||
"☃姬路白雪":"https://pan.jlbx.xyz",
|
|
||||||
"🎧听闻网盘":"https://wangpan.sangxuesheng.com",
|
|
||||||
"💾DISK":"http://124.222.140.243:8080",
|
|
||||||
"🌨云播放":"https://quanzi.laoxianghuijia.cn",
|
|
||||||
"✨星梦":"https://pan.bashroot.top",
|
|
||||||
"🌊小江":"https://dyj.me",
|
|
||||||
"💫触光":"https://pan.ichuguang.com",
|
|
||||||
"🕵好汉吧":"https://8023.haohanba.cn",
|
|
||||||
"🥗AUNEY":"http://121.227.25.116:8008",
|
|
||||||
"🎡资源小站":"https://960303.xyz/",
|
|
||||||
"🐝神器云": "https://quanzi.laoxianghuijia.cn",
|
|
||||||
"🏝fenwe":"http://www.fenwe.tk:5244",
|
|
||||||
"🎢轻弹浅唱":"https://g.xiang.lol"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name': k,
|
|
||||||
"type_flag": "1",
|
|
||||||
'type_id': cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
if (filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {
|
|
||||||
'list': []
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def categoryContent(self, tid, pg, filter, extend):
|
|
||||||
result = {}
|
|
||||||
ulen = len(self.config['url'])
|
|
||||||
pat = tid[ulen:] + '/'
|
|
||||||
param = {
|
|
||||||
"path": pat
|
|
||||||
}
|
|
||||||
rsp = self.postJson(self.config['url'] + '/api/fs/list', param)
|
|
||||||
jo = json.loads(rsp.text)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['content']
|
|
||||||
for vod in vodList:
|
|
||||||
img = vod['thumb']
|
|
||||||
if len(img) == 0:
|
|
||||||
if vod['type'] == 1:
|
|
||||||
img = "http://img1.3png.com/281e284a670865a71d91515866552b5f172b.png"
|
|
||||||
aid = pat
|
|
||||||
tag = "file"
|
|
||||||
remark = "文件"
|
|
||||||
if vod['type'] == 1:
|
|
||||||
tag = "folder"
|
|
||||||
remark = "文件夹"
|
|
||||||
aid = self.config['url'] + aid + vod['name']
|
|
||||||
else:
|
|
||||||
aid = aid + vod['name']
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": vod['name'],
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_tag": tag,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = 1
|
|
||||||
result['pagecount'] = 1
|
|
||||||
result['limit'] = 999
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def detailContent(self, array):
|
|
||||||
fileName = array[0]
|
|
||||||
param = {
|
|
||||||
"path": fileName,
|
|
||||||
"password": "",
|
|
||||||
"page_num": 1,
|
|
||||||
"page_size": 100
|
|
||||||
}
|
|
||||||
rsp = self.postJson(self.config['url'] + '/api/fs/get', param)
|
|
||||||
jo = json.loads(rsp.text)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']
|
|
||||||
url = vodList['raw_url']
|
|
||||||
vId = self.config['url'] + fileName
|
|
||||||
name = vodList['name']
|
|
||||||
pic = vodList['thumb']
|
|
||||||
tag = "file"
|
|
||||||
if vodList['type'] == 1:
|
|
||||||
tag = "folder"
|
|
||||||
vod = {
|
|
||||||
"vod_id": vId,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_tag": tag,
|
|
||||||
"vod_play_from": "播放",
|
|
||||||
"vod_play_url": name + '$' + url
|
|
||||||
}
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def searchContent(self, key, quick):
|
|
||||||
result = {
|
|
||||||
'list': []
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self, flag, id, vipFlags):
|
|
||||||
result = {}
|
|
||||||
url = id
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {},
|
|
||||||
"url": 'https://al.chirmyram.com'
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self, param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,291 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
|
|
||||||
import time
|
|
||||||
from urllib.parse import quote_plus
|
|
||||||
import requests
|
|
||||||
from bs4 import BeautifulSoup
|
|
||||||
import ddddocr
|
|
||||||
import urllib3
|
|
||||||
import re
|
|
||||||
import hashlib
|
|
||||||
from Crypto.Cipher import AES
|
|
||||||
from binascii import b2a_hex
|
|
||||||
from cryptography.hazmat.primitives import padding
|
|
||||||
from cryptography.hazmat.primitives.ciphers import algorithms
|
|
||||||
import zlib
|
|
||||||
import base64
|
|
||||||
|
|
||||||
|
|
||||||
urllib3.util.timeout.Timeout._validate_timeout = lambda *args: 5 if args[2] != 'total' else None
|
|
||||||
|
|
||||||
Tag = "bdys01"
|
|
||||||
Tag_name = "哔滴影视"
|
|
||||||
siteUrl = "https://www.bdys01.com"
|
|
||||||
|
|
||||||
|
|
||||||
def getHeaders(url):
|
|
||||||
headers = {}
|
|
||||||
if url:
|
|
||||||
headers.setdefault("Referer", url)
|
|
||||||
headers.setdefault("Accept-Encoding", "gzip, deflate, br")
|
|
||||||
headers.setdefault("DNT", "1")
|
|
||||||
headers.setdefault("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0")
|
|
||||||
headers.setdefault("Accept", "*/*")
|
|
||||||
headers.setdefault("Accept-Language", "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2")
|
|
||||||
return headers
|
|
||||||
|
|
||||||
|
|
||||||
def cacu(code):
|
|
||||||
if "=" in code:
|
|
||||||
code = code[:code.find("=")]
|
|
||||||
elif code[-1] == "2" or code[-1] == "7":
|
|
||||||
code = code[:-1]
|
|
||||||
if code[-1] == "4" or code[-1] == "-":
|
|
||||||
code = code[:-1]
|
|
||||||
code = code.replace("I", "1")
|
|
||||||
code = code.replace("l", "1")
|
|
||||||
if code.isdigit():
|
|
||||||
if len(code) > 4:
|
|
||||||
code = code[:4]
|
|
||||||
return int(code[:2]) - int(code[2:])
|
|
||||||
elif "+" in code:
|
|
||||||
code = code.split("+")
|
|
||||||
return int(code[0]) + int(code[1])
|
|
||||||
elif "-" in code:
|
|
||||||
code = code.split("-")
|
|
||||||
return int(code[0]) - int(code[1])
|
|
||||||
elif "x" in code:
|
|
||||||
code = code.split("x")
|
|
||||||
return int(code[0]) * int(code[1])
|
|
||||||
|
|
||||||
|
|
||||||
def verifyCode(key):
|
|
||||||
retry = 5
|
|
||||||
while retry:
|
|
||||||
try:
|
|
||||||
session = requests.session()
|
|
||||||
ocr = ddddocr.DdddOcr()
|
|
||||||
img = session.get(
|
|
||||||
url=f"https://www.bdys01.com/search/verifyCode?t={str(int(round(time.time() * 1000)))}",
|
|
||||||
headers=getHeaders(siteUrl)
|
|
||||||
).content
|
|
||||||
# with open("verifyCode.jpg", 'wb') as f:
|
|
||||||
# f.write(img)
|
|
||||||
code = cacu(ocr.classification(img))
|
|
||||||
url = f"{siteUrl}/search/{quote_plus(key)}?code={code}"
|
|
||||||
res = session.get(
|
|
||||||
url=url,
|
|
||||||
headers=getHeaders(url.split("?")[0])
|
|
||||||
).text
|
|
||||||
if "/search/verifyCode?t=" not in res:
|
|
||||||
return res
|
|
||||||
# time.sleep(1)
|
|
||||||
except Exception as e:
|
|
||||||
print(e)
|
|
||||||
if e.__class__.__name__ == 'ConnectTimeout':
|
|
||||||
break
|
|
||||||
finally:
|
|
||||||
retry = retry - 1
|
|
||||||
|
|
||||||
|
|
||||||
def pkcs7_padding(data):
|
|
||||||
padder = padding.PKCS7(algorithms.AES.block_size).padder()
|
|
||||||
padded_data = padder.update(data) + padder.finalize()
|
|
||||||
return padded_data
|
|
||||||
|
|
||||||
|
|
||||||
def encrypt(text, key):
|
|
||||||
cryptor = AES.new(key.encode('utf-8'), AES.MODE_ECB)
|
|
||||||
ciphertext = cryptor.encrypt(pkcs7_padding(text.encode('utf-8')))
|
|
||||||
return b2a_hex(ciphertext).decode().upper()
|
|
||||||
|
|
||||||
|
|
||||||
def get_lines(path):
|
|
||||||
try:
|
|
||||||
lines = []
|
|
||||||
pid = re.search("pid = (\d*)", requests.get(url=f'{siteUrl}{path}', headers=getHeaders(siteUrl)).text).group(1)
|
|
||||||
t = str(int(round(time.time() * 1000)))
|
|
||||||
key = hashlib.md5(f"{pid}-{t}".encode(encoding='UTF-8')).hexdigest()[0:16]
|
|
||||||
sg = encrypt(f"{pid}-{t}", key)
|
|
||||||
play_url = f"{siteUrl}/lines?t={t}&sg={sg}&pid={pid}"
|
|
||||||
data = requests.get(url=play_url, headers=getHeaders(play_url)).json()["data"]
|
|
||||||
if len(data) == 1:
|
|
||||||
play_line = requests.post(
|
|
||||||
url=f"{siteUrl}/god/{pid}",
|
|
||||||
data={
|
|
||||||
"t": t,
|
|
||||||
"sg": sg,
|
|
||||||
"verifyCode": 666
|
|
||||||
},
|
|
||||||
headers=getHeaders(siteUrl)
|
|
||||||
).json().get("url", "")
|
|
||||||
if not play_line:
|
|
||||||
play_line = requests.post(
|
|
||||||
url=f"{siteUrl}/god/{pid}?type=1",
|
|
||||||
data={
|
|
||||||
"t": t,
|
|
||||||
"sg": sg,
|
|
||||||
"verifyCode": 888
|
|
||||||
},
|
|
||||||
headers=getHeaders(siteUrl)
|
|
||||||
).json().get("url", "")
|
|
||||||
if "rkey" in play_line:
|
|
||||||
realurl = play_line.replace("?rkey", str(int(round(time.time() * 1000))) + ".mp4?ver=6010&rkey")
|
|
||||||
elif "ixigua" in play_line:
|
|
||||||
realurl = play_line
|
|
||||||
else:
|
|
||||||
realurl = play_line.replace("http:", "https:") + "/" + str(int(round(time.time() * 1000))) + ".mp4"
|
|
||||||
lines.append(realurl)
|
|
||||||
else:
|
|
||||||
for item in data:
|
|
||||||
if item == "m3u8_2" or item == "m3u8":
|
|
||||||
play_lines = data[item].split(",")
|
|
||||||
for line in play_lines:
|
|
||||||
if "mp4" in line:
|
|
||||||
lines.append(line)
|
|
||||||
else:
|
|
||||||
lines.append(line.replace("www.bde4.cc", "www.bdys01.com"))
|
|
||||||
elif item == "url3":
|
|
||||||
if "mp4" in data[item]:
|
|
||||||
lines.append(data[item])
|
|
||||||
else:
|
|
||||||
lines.append(data[item])
|
|
||||||
return lines
|
|
||||||
except Exception as e:
|
|
||||||
print(e)
|
|
||||||
return []
|
|
||||||
|
|
||||||
|
|
||||||
def add_domain(matched):
|
|
||||||
url = "https://vod.bdys.me/" + matched.group(0)
|
|
||||||
return url
|
|
||||||
|
|
||||||
|
|
||||||
def searchContent(key, token):
|
|
||||||
try:
|
|
||||||
res = verifyCode(key)
|
|
||||||
searchResult = BeautifulSoup(res, "html.parser")
|
|
||||||
videos = []
|
|
||||||
lists = searchResult.select("div.row.row-0")
|
|
||||||
for vod in lists:
|
|
||||||
vod_name = vod.select_one("div.card-body.py-0.pe-1").a["title"]
|
|
||||||
if key in vod_name:
|
|
||||||
videos.append({
|
|
||||||
"vod_id": f'{Tag}${vod.a["href"].split(".")[0]}',
|
|
||||||
"vod_name": vod_name,
|
|
||||||
"vod_pic": vod.img["src"],
|
|
||||||
"vod_remarks": Tag_name + " " + vod.select_one("div.card-body.py-0.pe-1").a.get_text()
|
|
||||||
})
|
|
||||||
return videos
|
|
||||||
except Exception as e:
|
|
||||||
print(e)
|
|
||||||
return []
|
|
||||||
|
|
||||||
|
|
||||||
def detailContent(ids, token):
|
|
||||||
try:
|
|
||||||
id = ids.split("$")[-1]
|
|
||||||
url = f"{siteUrl}/{id}.htm"
|
|
||||||
doc = BeautifulSoup(requests.get(url=url, headers=getHeaders(siteUrl)).text, "html.parser").select_one(
|
|
||||||
"div.container-xl.clear-padding-sm.my-3.py-1")
|
|
||||||
# 取基本数据
|
|
||||||
sourcediv = doc.select_one("div.card-body")
|
|
||||||
module_info_items = sourcediv.select("p")
|
|
||||||
director = ""
|
|
||||||
actor = ""
|
|
||||||
vod_remarks = ""
|
|
||||||
type_name = ""
|
|
||||||
vod_year = ""
|
|
||||||
vod_area = ""
|
|
||||||
for item in module_info_items:
|
|
||||||
if item.strong:
|
|
||||||
if "导演" in item.strong.get_text():
|
|
||||||
director = ",".join(i.get_text() for i in item.select("a"))
|
|
||||||
elif "主演" in item.strong.get_text():
|
|
||||||
actor = ",".join(i.get_text() for i in item.select("a"))
|
|
||||||
elif "摘要" in item.strong.get_text():
|
|
||||||
vod_remarks = item.span.get_text()
|
|
||||||
elif "类型" in item.strong.get_text():
|
|
||||||
type_name = ",".join(i.get_text() for i in item.select("a"))
|
|
||||||
elif "上映日期" in item.strong.get_text():
|
|
||||||
vod_year = ",".join(i.get_text() for i in item.select("a"))
|
|
||||||
elif "制片国家/地区" in item.strong.get_text():
|
|
||||||
vod_area = item.get_text().replace("制片国家/地区", "").replace("[", "").replace("]", "")
|
|
||||||
vodList = {
|
|
||||||
"vod_id": f'{Tag}${id}',
|
|
||||||
"vod_name": sourcediv.h2.get_text(),
|
|
||||||
"vod_pic": sourcediv.img["src"],
|
|
||||||
"type_name": type_name,
|
|
||||||
"vod_year": vod_year,
|
|
||||||
"vod_area": vod_area,
|
|
||||||
"vod_remarks": vod_remarks,
|
|
||||||
"vod_actor": actor,
|
|
||||||
"vod_director": director,
|
|
||||||
"vod_content": doc.select_one("div.card.collapse").select_one("div.card-body").get_text().strip(),
|
|
||||||
}
|
|
||||||
|
|
||||||
vod_play = {}
|
|
||||||
# 取播放列表数据
|
|
||||||
sources = doc.select("a.btn.btn-square")
|
|
||||||
lines_count = 0
|
|
||||||
for source in sources:
|
|
||||||
lines_count = len(get_lines(source["href"]))
|
|
||||||
if lines_count:
|
|
||||||
break
|
|
||||||
for i in range(lines_count):
|
|
||||||
sourceName = f"线路{i + 1}"
|
|
||||||
vodItems = []
|
|
||||||
playList = ""
|
|
||||||
for source in sources:
|
|
||||||
vodItems.append(
|
|
||||||
source.get_text() + "$" + f"{Tag}___" + source["href"].split(".")[0] + f"__{(i + 1) % lines_count}")
|
|
||||||
if len(vodItems):
|
|
||||||
playList = "#".join(vodItems)
|
|
||||||
vod_play.setdefault(sourceName, playList)
|
|
||||||
if len(vod_play):
|
|
||||||
vod_play_from = "$$$".join(vod_play.keys())
|
|
||||||
vod_play_url = "$$$".join(vod_play.values())
|
|
||||||
vodList.setdefault("vod_play_from", vod_play_from)
|
|
||||||
vodList.setdefault("vod_play_url", vod_play_url)
|
|
||||||
return [vodList]
|
|
||||||
except Exception as e:
|
|
||||||
print(e)
|
|
||||||
return []
|
|
||||||
|
|
||||||
|
|
||||||
def playerContent(ids, flag, token):
|
|
||||||
try:
|
|
||||||
ids = ids.split("___")
|
|
||||||
url = ids[-1].split("__")[0]
|
|
||||||
play_from = int(ids[-1].split("__")[-1])
|
|
||||||
lines = get_lines(f"{url}.htm")
|
|
||||||
m3u8_url = lines[play_from]
|
|
||||||
if m3u8_url.endswith("m3u8"):
|
|
||||||
data = list(requests.get(url=m3u8_url, headers=getHeaders("")).content)[3354:]
|
|
||||||
data = zlib.decompress(bytes(data), 16 + zlib.MAX_WBITS).decode()
|
|
||||||
m3u8_raw_data = re.sub(r".*?\.ts", add_domain, data)
|
|
||||||
m3u8_url = f"data:application/vnd.apple.mpegurl;base64,{base64.b64encode(m3u8_raw_data.encode('utf-8')).decode()}"
|
|
||||||
return {
|
|
||||||
"header": "",
|
|
||||||
"parse": "0",
|
|
||||||
"playUrl": "",
|
|
||||||
"url": m3u8_url
|
|
||||||
}
|
|
||||||
except Exception as e:
|
|
||||||
print(e)
|
|
||||||
return {}
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
# res = searchContent("灰影人", "")
|
|
||||||
# res = detailContent('bdys01$/dongzuo/22321', "")
|
|
||||||
# func = "playerContent"
|
|
||||||
res = playerContent("bdys01___/play/22321-0__0", "", "")
|
|
||||||
# res = eval(func)("68614-1-1")
|
|
||||||
# res = get_lines("/play/22321-0.htm")
|
|
||||||
print(res)
|
|
@ -1,356 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
import time
|
|
||||||
import base64
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "哔哩"
|
|
||||||
def init(self,extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"选美":"选美",
|
|
||||||
"模特":"模特",
|
|
||||||
"泳装":"泳装",
|
|
||||||
"内衣":"内衣",
|
|
||||||
"腾讯直播":"腾讯直播",
|
|
||||||
"腾讯演唱会":"腾讯演唱会",
|
|
||||||
"腾讯音乐会":"腾讯音乐会",
|
|
||||||
"舞蹈":"舞蹈",
|
|
||||||
"宅舞":"宅舞",
|
|
||||||
"街舞":"街舞",
|
|
||||||
"明星舞蹈":"明星舞蹈",
|
|
||||||
"韩舞":"韩舞",
|
|
||||||
"古典舞":"古典舞",
|
|
||||||
"翻跳":"翻跳",
|
|
||||||
"中国舞":"中国舞",
|
|
||||||
"古风舞":"古风舞",
|
|
||||||
"现代舞":"现代舞",
|
|
||||||
"爵士舞":"爵士舞",
|
|
||||||
"芭蕾":"芭蕾",
|
|
||||||
"编舞":"编舞",
|
|
||||||
"POPPING":"POPPING",
|
|
||||||
"极乐净土":"极乐净土",
|
|
||||||
"桃源恋歌":"桃源恋歌",
|
|
||||||
"新宝岛":"新宝岛",
|
|
||||||
"拉丁舞":"拉丁舞",
|
|
||||||
"蹦迪":"蹦迪",
|
|
||||||
"民族舞":"民族舞",
|
|
||||||
"抖肩舞":"抖肩舞",
|
|
||||||
"齐舞":"齐舞",
|
|
||||||
"机械舞":"机械舞",
|
|
||||||
"广场舞":"广场舞",
|
|
||||||
"BDF":"BDF",
|
|
||||||
"练习室":"练习室",
|
|
||||||
"美女舞蹈":"美女舞蹈",
|
|
||||||
"牛仔裤":"牛仔裤",
|
|
||||||
"黑丝":"黑丝",
|
|
||||||
"超短裤":"超短裤",
|
|
||||||
"超短裙":"超短裙",
|
|
||||||
"舞蹈综合":"舞蹈综合",
|
|
||||||
"舞蹈教程":"舞蹈教程",
|
|
||||||
"华语现场":"华语现场",
|
|
||||||
"欧美现场":"欧美现场",
|
|
||||||
"日语现场":"日语现场",
|
|
||||||
"韩语现场":"韩语现场",
|
|
||||||
"国语现场":"国语现场",
|
|
||||||
"粤语现场":"粤语现场",
|
|
||||||
"live":"live",
|
|
||||||
"音乐剧":"音乐剧",
|
|
||||||
"演唱会":"演唱会",
|
|
||||||
"音乐节":"音乐节",
|
|
||||||
"MV":"MV",
|
|
||||||
"华语MV":"华语MV",
|
|
||||||
"欧美MV":"欧美MV",
|
|
||||||
"日语MV":"日语MV",
|
|
||||||
"韩语MV":"韩语MV",
|
|
||||||
"国语MV":"国语MV",
|
|
||||||
"粤语MV":"粤语MV",
|
|
||||||
"闽南语MV":"闽南语MV",
|
|
||||||
"东南亚MV":"东南亚MV",
|
|
||||||
"英语MV":"英语MV",
|
|
||||||
"俄语MV":"俄语MV",
|
|
||||||
"印度MV":"印度MV",
|
|
||||||
"自制MV":"自制MV",
|
|
||||||
"韩国女星MV":"韩国女星MV",
|
|
||||||
"李孝利MV":"李孝利MV",
|
|
||||||
"李知恩MV":"李知恩MV",
|
|
||||||
"林允儿MV":"林允儿MV",
|
|
||||||
"金泫雅MV":"金泫雅MV",
|
|
||||||
"金泰妍MV":"金泰妍MV",
|
|
||||||
"李宣美MV":"李宣美MV",
|
|
||||||
"崔雪莉MV":"崔雪莉MV",
|
|
||||||
"安喜延MV":"安喜延MV",
|
|
||||||
"金亚荣MV":"金亚荣MV",
|
|
||||||
"李知恩MV":"李知恩MV",
|
|
||||||
"李贞贤MV":"李贞贤MV",
|
|
||||||
"洪真英MV":"洪真英MV",
|
|
||||||
"日本女星MV":"日本女星MV",
|
|
||||||
"YUIMV":"YUIMV",
|
|
||||||
"幸田来未MV":"幸田来未MV",
|
|
||||||
"安室奈美惠MV":"安室奈美惠MV",
|
|
||||||
"滨崎步MV":"滨崎步MV",
|
|
||||||
"古谷仁美MV":"古谷仁美MV",
|
|
||||||
"宇多田光MV":"宇多田光MV",
|
|
||||||
"伊藤由奈MV":"伊藤由奈MV",
|
|
||||||
"玉置成实MV":"玉置成实MV",
|
|
||||||
"仓木麻衣MV":"仓木麻衣MV",
|
|
||||||
"AngelaAkiMV":"AngelaMV",
|
|
||||||
"中岛美雪MV":"中岛美雪MV",
|
|
||||||
"女星MV":"女星MV",
|
|
||||||
"戴佩妮MV":"戴佩妮MV",
|
|
||||||
"邓紫棋MV":"邓紫棋MV",
|
|
||||||
"张韶涵MV":"张韶涵MV",
|
|
||||||
"蔡健雅MV":"蔡健雅MV",
|
|
||||||
"莫文蔚MV":"莫文蔚MV",
|
|
||||||
"刘若英MV":"刘若英MV",
|
|
||||||
"邓丽君MV":"邓丽君MV",
|
|
||||||
"蔡依林MV":"蔡依林MV",
|
|
||||||
"李宇春MV":"李宇春MV",
|
|
||||||
"徐佳莹MV":"徐佳莹MV",
|
|
||||||
"杨千嬅MV":"杨千嬅MV",
|
|
||||||
"张靓颖MV":"张靓颖MV",
|
|
||||||
"杨丞琳MV":"杨丞琳MV",
|
|
||||||
"萧亚轩MV":"萧亚轩MV",
|
|
||||||
"容祖儿MV":"容祖儿MV",
|
|
||||||
"梅艳芳MV":"梅艳芳MV",
|
|
||||||
"孙燕姿MV":"孙燕姿MV",
|
|
||||||
"袁娅维MV":"袁娅维MV",
|
|
||||||
"王菲MV":"王菲MV",
|
|
||||||
"梁静茹MV":"梁静茹MV",
|
|
||||||
"周慧敏MV":"周慧敏MV",
|
|
||||||
"张惠妹MV":"张惠妹MV",
|
|
||||||
"周笔畅MV":"周笔畅MV",
|
|
||||||
"谭维维MV":"谭维维MV",
|
|
||||||
"陈慧娴MV":"陈慧娴MV",
|
|
||||||
"郭静MV":"郭静MV",
|
|
||||||
"那英MV":"那英MV",
|
|
||||||
"韩红MV":"韩红MV",
|
|
||||||
"林忆莲MV":"林忆莲MV",
|
|
||||||
"李玟MV":"李玟MV",
|
|
||||||
"徐小凤MV":"徐小凤MV",
|
|
||||||
"卓依婷MV":"卓依婷MV",
|
|
||||||
"郁可唯MV":"郁可唯MV",
|
|
||||||
"田震MV":"田震MV",
|
|
||||||
"凤飞飞MV":"凤飞飞MV",
|
|
||||||
"谭晶MV":"谭晶MV",
|
|
||||||
"叶倩文MV":"叶倩文MV",
|
|
||||||
"王心凌MV":"王心凌MV",
|
|
||||||
"郭采洁MV":"郭采洁MV",
|
|
||||||
"阿黛尔MV":"阿黛尔MV",
|
|
||||||
"LadyGagaMV":"LadyGagaMV",
|
|
||||||
"布兰妮MV":"布兰妮MV",
|
|
||||||
"洛天依MV":"洛天依MV",
|
|
||||||
"初音未来MV":"初音未来MV",
|
|
||||||
"女团":"女团",
|
|
||||||
"中国女团":"中国女团",
|
|
||||||
"SNH48":"SNH48",
|
|
||||||
"S.H.E":"S.H.E",
|
|
||||||
"Twins":"Twins",
|
|
||||||
"火箭少女101":"火箭少女101",
|
|
||||||
"BY2":"BY2",
|
|
||||||
"S.I.N.G":"S.I.N.G",
|
|
||||||
"3unshine":"3unshine",
|
|
||||||
"蜜蜂少女队":"蜜蜂少女队",
|
|
||||||
"七朵组合":"七朵组合",
|
|
||||||
"GNZ48":"GNZ48",
|
|
||||||
"韩国女团":"韩国女团",
|
|
||||||
"TWICE":"TWICE",
|
|
||||||
"4MINUTE":"4MINUTE",
|
|
||||||
"EXID":"EXID",
|
|
||||||
"KARA":"KARA",
|
|
||||||
"TARA":"TARA",
|
|
||||||
"BLACKPINK":"BLACKPINK",
|
|
||||||
"LOONA":"LOONA",
|
|
||||||
"ITZY":"ITZY",
|
|
||||||
"RedVelvet":"RedVelvet",
|
|
||||||
"Everglow":"Everglow",
|
|
||||||
"Mamamoo":"Mamamoo",
|
|
||||||
"少女时代":"少女时代",
|
|
||||||
"S.E.S":"S.E.S",
|
|
||||||
"FIN.K.L":"FIN.K.L",
|
|
||||||
"2NE1":"2NE1",
|
|
||||||
"WonderGirls":"WonderGirls",
|
|
||||||
"IZ*ONE":"IZ*ONE",
|
|
||||||
"Sistar":"Sistar",
|
|
||||||
"Apink":"Apink",
|
|
||||||
"AOA":"AOA",
|
|
||||||
"GFRIEND":"GFRIEND",
|
|
||||||
"f(x)":"f(x)",
|
|
||||||
"(G)I-DLE":"(G)I-DLE",
|
|
||||||
"Itzy":"Itzy",
|
|
||||||
"Oh!GG":"Oh!GG",
|
|
||||||
"GirlCrush":"GirlCrush",
|
|
||||||
"日本女团":"日本女团",
|
|
||||||
"AKB48":"AKB48",
|
|
||||||
"SKE48":"SKE48",
|
|
||||||
"NMB48":"NMB48",
|
|
||||||
"JKT48":"JKT48",
|
|
||||||
"HKT48":"HKT48",
|
|
||||||
"AKB48TeamTP":"AKB48TeamTP",
|
|
||||||
"Perfume":"Perfume",
|
|
||||||
"桃色幸运草Z":"桃色幸运草Z",
|
|
||||||
"乃木坂46乃":"乃木坂46乃",
|
|
||||||
"樱坂46":"樱坂46",
|
|
||||||
"日向坂46":"日向坂46",
|
|
||||||
"E-girls":"E-girls",
|
|
||||||
"NiziU":"NiziU",
|
|
||||||
"BiSH":"BiSH",
|
|
||||||
"早安少女组":"早安少女组",
|
|
||||||
"戏曲":"戏曲",
|
|
||||||
"演唱会":"演唱会",
|
|
||||||
"相声小品":"相声小品",
|
|
||||||
"动物世界":"动物世界",
|
|
||||||
"儿童少儿":"儿童少儿"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name':k,
|
|
||||||
'type_id':cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
if(filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {
|
|
||||||
'list':[]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
rsp = self.fetch("https://www.bilibili.com/")
|
|
||||||
self.cookies = rsp.cookies
|
|
||||||
return rsp.cookies
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&duration=4&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.cookies)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url,cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">","").replace("</em>","")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
typeName = jo['tname']
|
|
||||||
vod = {
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":"",
|
|
||||||
"vod_director":"",
|
|
||||||
"vod_content":desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part']
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part,aid,cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {
|
|
||||||
'list':[]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
# https://www.555dianying.cc/vodplay/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid=%20%20{1}&qn=112'.format(ids[0],ids[1])
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,214 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
from requests import session, utils
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import base64
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "B站影视"
|
|
||||||
def init(self,extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"番剧": "1",
|
|
||||||
"国创": "4",
|
|
||||||
"电影": "2",
|
|
||||||
"综艺": "7",
|
|
||||||
"电视剧": "5",
|
|
||||||
"纪录片": "3"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name':k,
|
|
||||||
'type_id':cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
if(filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {
|
|
||||||
'list':[]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
cookies = ''
|
|
||||||
def getCookie(self):
|
|
||||||
#在cookies_str中填入会员或大会员cookie,以获得更好的体验
|
|
||||||
cookies_str = "innersign=0; buvid3=606BE156-AE37-AEA8-7052-9DA0B21766E776404infoc; b_nut=1663302976; i-wanna-go-back=-1; b_ut=7; b_lsid=4106252F6_18344933A90; _uuid=586AAEB7-6B88-A691-F7AC-95C27E57F53C43036infoc; buvid4=B6FF1449-4361-1C76-DEFC-4AFCA1777B7E78304-022091612-PdJr0jKE6N5TamfAEX9uACD1RXvklspbNdlcIQEFLMu0d9wS3G3sdA%3D%3D; buvid_fp=2a9b54d5e06aa54293dc7544e000552d"
|
|
||||||
cookies_dic = dict([co.strip().split('=') for co in cookies_str.split(';')])
|
|
||||||
rsp = session()
|
|
||||||
cookies_jar = utils.cookiejar_from_dict(cookies_dic)
|
|
||||||
rsp.cookies = cookies_jar
|
|
||||||
content = self.fetch("http://api.bilibili.com/x/web-interface/nav", cookies=rsp.cookies)
|
|
||||||
res = json.loads(content.text)
|
|
||||||
if res["code"] == 0:
|
|
||||||
self.cookies = rsp.cookies
|
|
||||||
else:
|
|
||||||
rsp = self.fetch("https://www.bilibili.com/")
|
|
||||||
self.cookies = rsp.cookies
|
|
||||||
return rsp.cookies
|
|
||||||
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = 'https://api.bilibili.com/pgc/season/index/result?order=2&season_status=-1&style_id=-1&sort=0&area=-1&pagesize=20&type=1&st={0}&season_type={0}&page={1}'.format(tid,pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url, cookies=self.cookies)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['season_id']).strip()
|
|
||||||
title = vod['title'].strip()
|
|
||||||
img = vod['cover'].strip()
|
|
||||||
remark = vod['index_show'].strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id":aid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def cleanSpace(self,str):
|
|
||||||
return str.replace('\n','').replace('\t','').replace('\r','').replace(' ','')
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "http://api.bilibili.com/pgc/view/web/season?season_id={0}".format(aid)
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['result']
|
|
||||||
id = jo['season_id']
|
|
||||||
title = jo['title']
|
|
||||||
pic = jo['cover']
|
|
||||||
areas = jo['areas'][0]['name']
|
|
||||||
typeName = jo['share_sub_title']
|
|
||||||
dec = jo['evaluate']
|
|
||||||
remark = jo['new_ep']['desc']
|
|
||||||
vod = {
|
|
||||||
"vod_id":id,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":typeName,
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":areas,
|
|
||||||
"vod_remarks":remark,
|
|
||||||
"vod_actor":"",
|
|
||||||
"vod_director":"",
|
|
||||||
"vod_content":dec
|
|
||||||
}
|
|
||||||
ja = jo['episodes']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
eid = tmpJo['id']
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['title'].replace("#", "-")
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part, eid, cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站影视'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=media_bangumi&keyword={0}'.format(key) # 番剧搜索
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url, cookies=self.cookies)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
rs = jo['data']
|
|
||||||
if rs['numResults'] == 0:
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=media_ft&keyword={0}'.format(key) # 影视搜索
|
|
||||||
rspRetry = self.fetch(url, cookies=self.cookies)
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['season_id']).strip()
|
|
||||||
title = vod['title'].strip().replace("<em class=\"keyword\">", "").replace("</em>", "")
|
|
||||||
img = vod['eps'][0]['cover'].strip()
|
|
||||||
remark = vod['index_show']
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list': videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
result = {}
|
|
||||||
ids = id.split("_")
|
|
||||||
header = {
|
|
||||||
"Referer": "https://www.bilibili.com",
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
url = 'https://api.bilibili.com/pgc/player/web/playurl?qn=116&ep_id={0}&cid={1}'.format(ids[0],ids[1])
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url,cookies=self.cookies,headers=header)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
if jRoot['message'] != 'success':
|
|
||||||
print("需要大会员权限才能观看")
|
|
||||||
return {}
|
|
||||||
jo = jRoot['result']
|
|
||||||
ja = jo['durl']
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer":"https://www.bilibili.com",
|
|
||||||
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,231 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
# !/usr/bin/python
|
|
||||||
import sys
|
|
||||||
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
import requests
|
|
||||||
from requests import session, utils
|
|
||||||
import os
|
|
||||||
import time
|
|
||||||
import base64
|
|
||||||
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "哔哩"
|
|
||||||
|
|
||||||
def init(self, extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
|
|
||||||
def isVideoFormat(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def homeContent(self, filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"Zard": "Zard",
|
|
||||||
"玩具汽车": "玩具汽车",
|
|
||||||
"儿童": "儿童",
|
|
||||||
"幼儿": "幼儿",
|
|
||||||
"儿童玩具": "儿童玩具",
|
|
||||||
"昆虫": "昆虫",
|
|
||||||
"动物世界": "动物世界",
|
|
||||||
"纪录片": "纪录片",
|
|
||||||
"相声小品": "相声小品",
|
|
||||||
"搞笑": "搞笑",
|
|
||||||
"假窗-白噪音": "窗+白噪音",
|
|
||||||
"演唱会": "演唱会"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name': k,
|
|
||||||
'type_id': cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
if (filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {
|
|
||||||
'list': []
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
cookies = ''
|
|
||||||
|
|
||||||
def getCookie(self):
|
|
||||||
# 在cookies_str中填入会员或大会员cookie,以获得更好的体验。
|
|
||||||
cookies_str = "innersign=0; buvid3=606BE156-AE37-AEA8-7052-9DA0B21766E776404infoc; b_nut=1663302976; i-wanna-go-back=-1; b_ut=7; b_lsid=4106252F6_18344933A90; _uuid=586AAEB7-6B88-A691-F7AC-95C27E57F53C43036infoc; buvid4=B6FF1449-4361-1C76-DEFC-4AFCA1777B7E78304-022091612-PdJr0jKE6N5TamfAEX9uACD1RXvklspbNdlcIQEFLMu0d9wS3G3sdA%3D%3D; buvid_fp=2a9b54d5e06aa54293dc7544e000552d"
|
|
||||||
cookies_dic = dict([co.strip().split('=') for co in cookies_str.split(';')])
|
|
||||||
rsp = session()
|
|
||||||
cookies_jar = utils.cookiejar_from_dict(cookies_dic)
|
|
||||||
rsp.cookies = cookies_jar
|
|
||||||
content = self.fetch("http://api.bilibili.com/x/web-interface/nav", cookies=rsp.cookies)
|
|
||||||
res = json.loads(content.text)
|
|
||||||
if res["code"] == 0:
|
|
||||||
self.cookies = rsp.cookies
|
|
||||||
else:
|
|
||||||
rsp = self.fetch("https://www.bilibili.com/")
|
|
||||||
self.cookies = rsp.cookies
|
|
||||||
return rsp.cookies
|
|
||||||
|
|
||||||
def categoryContent(self, tid, pg, filter, extend):
|
|
||||||
result = {}
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}&page={1}'.format(tid, pg)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url, cookies=self.cookies)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].replace("<em class=\"keyword\">", "").replace("</em>", "").replace(""", '"')
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def cleanSpace(self, str):
|
|
||||||
return str.replace('\n', '').replace('\t', '').replace('\r', '').replace(' ', '')
|
|
||||||
|
|
||||||
def detailContent(self, array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "https://api.bilibili.com/x/web-interface/view?aid={0}".format(aid)
|
|
||||||
rsp = self.fetch(url, headers=self.header)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['title'].replace("<em class=\"keyword\">", "").replace("</em>", "")
|
|
||||||
pic = jo['pic']
|
|
||||||
desc = jo['desc']
|
|
||||||
timeStamp = jo['pubdate']
|
|
||||||
timeArray = time.localtime(timeStamp)
|
|
||||||
year = str(time.strftime("%Y", timeArray))
|
|
||||||
dire = jo['owner']['name']
|
|
||||||
typeName = jo['tname']
|
|
||||||
remark = str(jo['duration']).strip()
|
|
||||||
vod = {
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": typeName,
|
|
||||||
"vod_year": year,
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": remark,
|
|
||||||
"vod_actor": "",
|
|
||||||
"vod_director": dire,
|
|
||||||
"vod_content": desc
|
|
||||||
}
|
|
||||||
ja = jo['pages']
|
|
||||||
playUrl = ''
|
|
||||||
for tmpJo in ja:
|
|
||||||
cid = tmpJo['cid']
|
|
||||||
part = tmpJo['part'].replace("#", "-")
|
|
||||||
playUrl = playUrl + '{0}${1}_{2}#'.format(part, aid, cid)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = 'B站视频'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def searchContent(self, key, quick):
|
|
||||||
header = {
|
|
||||||
"Referer": "https://www.bilibili.com",
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
url = 'https://api.bilibili.com/x/web-interface/search/type?search_type=video&keyword={0}'.format(key)
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url, cookies=self.cookies,headers=header)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
if jo['code'] != 0:
|
|
||||||
rspRetry = self.fetch(url, cookies=self.getCookie())
|
|
||||||
content = rspRetry.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']['result']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = str(vod['aid']).strip()
|
|
||||||
title = vod['title'].replace("<em class=\"keyword\">", "").replace("</em>", "").replace(""", '"')
|
|
||||||
img = 'https:' + vod['pic'].strip()
|
|
||||||
remark = str(vod['duration']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list': videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self, flag, id, vipFlags):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
ids = id.split("_")
|
|
||||||
url = 'https://api.bilibili.com:443/x/player/playurl?avid={0}&cid={1}&qn=116'.format(ids[0], ids[1])
|
|
||||||
if len(self.cookies) <= 0:
|
|
||||||
self.getCookie()
|
|
||||||
rsp = self.fetch(url, cookies=self.cookies)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['durl']
|
|
||||||
|
|
||||||
maxSize = -1
|
|
||||||
position = -1
|
|
||||||
for i in range(len(ja)):
|
|
||||||
tmpJo = ja[i]
|
|
||||||
if maxSize < int(tmpJo['size']):
|
|
||||||
maxSize = int(tmpJo['size'])
|
|
||||||
position = i
|
|
||||||
|
|
||||||
url = ''
|
|
||||||
if len(ja) > 0:
|
|
||||||
if position == -1:
|
|
||||||
position = 0
|
|
||||||
url = ja[position]['url']
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"Referer": "https://www.bilibili.com",
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self, param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,194 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
import time
|
|
||||||
import base64
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "央视"
|
|
||||||
def init(self,extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"等着我": "TOPC1451378757637200",
|
|
||||||
"我爱发明": "TOPC1569314345479107",
|
|
||||||
"动物世界": "TOPC1451378967257534",
|
|
||||||
"我爱发明2021": "TOPC1451557970755294",
|
|
||||||
"自然传奇": "TOPC1451558150787467",
|
|
||||||
"探索发现": "TOPC1451557893544236",
|
|
||||||
"地理中国": "TOPC1451557421544786",
|
|
||||||
"人与自然": "TOPC1451525103989666",
|
|
||||||
"人文地理": "TOPC1451469288523874",
|
|
||||||
"远方的家": "TOPC1451541349400938",
|
|
||||||
"全景自然": "TOPC1451469617360656",
|
|
||||||
"魅力纪录": "TOPC1451465982926341",
|
|
||||||
"秘境之眼": "TOPC1554187056533820",
|
|
||||||
"自然": "TOPC1451469660736687",
|
|
||||||
"动画大放映": "TOPC1451559025546574",
|
|
||||||
"新闻联播": "TOPC1451528971114112",
|
|
||||||
"焦点访谈": "TOPC1451558976694518",
|
|
||||||
"海峡两岸": "TOPC1451540328102649",
|
|
||||||
"今日关注": "TOPC1451540389082713",
|
|
||||||
"今日亚洲": "TOPC1451540448405749",
|
|
||||||
"防务新观察": "TOPC1451526164984187",
|
|
||||||
"共同关注": "TOPC1451558858788377",
|
|
||||||
"深度国际": "TOPC1451540709098112",
|
|
||||||
"环宇视野": "TOPC1451469241240836",
|
|
||||||
"环球视线": "TOPC1451558926200436",
|
|
||||||
"世界周刊": "TOPC1451558687534149",
|
|
||||||
"东方时空": "TOPC1451558532019883",
|
|
||||||
"新闻调查": "TOPC1451558819463311",
|
|
||||||
"环球科技视野": "TOPC1451463780801881",
|
|
||||||
"讲武堂": "TOPC1451526241359341",
|
|
||||||
"国宝发现": "TOPC1571034869935436",
|
|
||||||
"国宝档案": "TOPC1451540268188575",
|
|
||||||
"天下财经": "TOPC1451531385787654",
|
|
||||||
"走进科学": "TOPC1451558190239536",
|
|
||||||
"解码科技史": "TOPC1570876640457386",
|
|
||||||
"法律讲堂": "TOPC1451542824484472",
|
|
||||||
"百家讲坛": "TOPC1451557052519584",
|
|
||||||
"名家书场": "TOPC1579401761622774",
|
|
||||||
"星光大道": "TOPC1451467630488780",
|
|
||||||
"非常6+1": "TOPC1451467940101208",
|
|
||||||
"中国节拍": "TOPC1570025984977611",
|
|
||||||
"一鸣惊人": "TOPC1451558692971175",
|
|
||||||
"金牌喜剧班": "TOPC1611826337610628",
|
|
||||||
"九州大戏台": "TOPC1451558399948678",
|
|
||||||
"乡村大舞台": "TOPC1563179546003162",
|
|
||||||
"家庭幽默大赛": "TOPC1451375222891702",
|
|
||||||
"综艺盛典": "TOPC1451985071887935",
|
|
||||||
"环球综艺": "TOPC1571300682556971",
|
|
||||||
"中国好歌曲": "TOPC1451984949453678",
|
|
||||||
"广场舞金曲": "TOPC1528685010104859",
|
|
||||||
"曲苑杂谈": "TOPC1451984417763860",
|
|
||||||
"锦绣梨园": "TOPC1451558363250650",
|
|
||||||
"梨园周刊": "TOPC1574909786070351",
|
|
||||||
"外国人在中国": "TOPC1451541113743615",
|
|
||||||
"华人世界": "TOPC1451539822927345",
|
|
||||||
"武林大会": "TOPC1451551891055866",
|
|
||||||
"棋牌乐": "TOPC1451550531682936",
|
|
||||||
"动物传奇": "TOPC1451984181884527",
|
|
||||||
"美食中国": "TOPC1571034804976375",
|
|
||||||
"田间示范秀": "TOPC1563178908227191",
|
|
||||||
"三农群英会": "TOPC1600745974233265",
|
|
||||||
"乡村振兴面对面": "TOPC1568966531726705",
|
|
||||||
"超级新农人": "TOPC1597627647957699",
|
|
||||||
"印象乡村": "TOPC1563178734372977" }
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name':k,
|
|
||||||
'type_id':cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
if(filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {
|
|
||||||
'list':[]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
extend['id'] = tid
|
|
||||||
extend['p'] = pg
|
|
||||||
filterParams = ["id", "p", "d"]
|
|
||||||
params = ["", "", ""]
|
|
||||||
for idx in range(len(filterParams)):
|
|
||||||
fp = filterParams[idx]
|
|
||||||
if fp in extend.keys():
|
|
||||||
params[idx] = '{0}={1}'.format(filterParams[idx],extend[fp])
|
|
||||||
suffix = '&'.join(params)
|
|
||||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByColumn?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
|
||||||
if not tid.startswith('TOPC'):
|
|
||||||
url = 'https://api.cntv.cn/NewVideo/getVideoListByAlbumIdNew?{0}&n=20&sort=desc&mode=0&serviceId=tvcctv&t=json'.format(suffix)
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
jo = json.loads(rsp.text)
|
|
||||||
vodList = jo['data']['list']
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
guid = vod['guid']
|
|
||||||
title = vod['title']
|
|
||||||
img = vod['image']
|
|
||||||
brief = vod['brief']
|
|
||||||
videos.append({
|
|
||||||
"vod_id":guid+"###"+img,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":img,
|
|
||||||
"vod_remarks":''
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0].split('###')
|
|
||||||
tid = aid[0]
|
|
||||||
url = "https://vdn.apps.cntv.cn/api/getHttpVideoInfo.do?pid={0}".format(tid)
|
|
||||||
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
jo = json.loads(rsp.text)
|
|
||||||
title = jo['title'].strip()
|
|
||||||
link = jo['hls_url'].strip()
|
|
||||||
vod = {
|
|
||||||
"vod_id":tid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":aid[1],
|
|
||||||
"type_name":'',
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":"",
|
|
||||||
"vod_director":"",
|
|
||||||
"vod_content":""
|
|
||||||
}
|
|
||||||
vod['vod_play_from'] = 'CCTV'
|
|
||||||
vod['vod_play_url'] = title+"$"+link
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {
|
|
||||||
'list':[]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
result = {}
|
|
||||||
rsp = self.fetch(id,headers=self.header)
|
|
||||||
content = rsp.text.strip()
|
|
||||||
arr = content.split('\n')
|
|
||||||
urlPrefix = self.regStr(id,'(http[s]?://[a-zA-z0-9.]+)/')
|
|
||||||
url = urlPrefix + arr[-1]
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = ''
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {"TOPC1451557970755294": [{"key": "d", "name": "年份", "value": [{"n": "全部", "v": ""}, {"n": "2021", "v": "2021"}, {"n": "2020", "v": "2020"}, {"n": "2019", "v": "2019"}, {"n": "2018", "v": "2018"}, {"n": "2017", "v": "2017"}, {"n": "2016", "v": "2016"}, {"n": "2015", "v": "2015"}, {"n": "2014", "v": "2014"}, {"n": "2013", "v": "2013"}, {"n": "2012", "v": "2012"}, {"n": "2011", "v": "2011"}, {"n": "2010", "v": "2010"}, {"n": "2009", "v": "2009"}]}]}
|
|
||||||
}
|
|
||||||
header = {
|
|
||||||
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36"
|
|
||||||
}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
File diff suppressed because one or more lines are too long
241
plugin/py_cup.py
241
plugin/py_cup.py
File diff suppressed because one or more lines are too long
@ -1,216 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
# !/usr/bin/python
|
|
||||||
import sys
|
|
||||||
import re
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import urllib.parse
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "创艺影视"
|
|
||||||
|
|
||||||
def init(self, extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
|
|
||||||
def homeContent(self, filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"电影": "1",
|
|
||||||
"剧集": "2",
|
|
||||||
"动漫": "4",
|
|
||||||
"综艺": "3",
|
|
||||||
"纪录片": "30"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name': k,
|
|
||||||
'type_id': cateManual[k]
|
|
||||||
})
|
|
||||||
|
|
||||||
result['class'] = classes
|
|
||||||
if (filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {
|
|
||||||
'list': []
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def categoryContent(self, tid, pg, filter, extend):
|
|
||||||
result = {}
|
|
||||||
header = {"User-Agent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36"}
|
|
||||||
url = 'https://www.30dian.cn/vodtype/{0}-{1}.html'.format(tid, pg)
|
|
||||||
rsp = self.fetch(url,headers=header)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
aList = root.xpath("//div[@class='myui-panel myui-panel-bg clearfix']/div/div/ul/li")
|
|
||||||
videos = []
|
|
||||||
for a in aList:
|
|
||||||
name = a.xpath('./div/a/@title')[0]
|
|
||||||
pic = a.xpath('./div/a/@data-original')[0]
|
|
||||||
mark = a.xpath("./div/a/span/span[@class='tag']/text()")[0]
|
|
||||||
sid = a.xpath("./div/a/@href")[0].replace("/", "").replace("voddetail", "").replace(".html", "")
|
|
||||||
videos.append({
|
|
||||||
"vod_id": sid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": mark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 999
|
|
||||||
result['limit'] = 5
|
|
||||||
result['total'] = 9999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def detailContent(self, array):
|
|
||||||
tid = array[0]
|
|
||||||
url = 'https://www.30dian.cn/voddetail/{0}.html'.format(tid)
|
|
||||||
header = {"User-Agent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36"}
|
|
||||||
rsp = self.fetch(url,headers=header)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
divContent = root.xpath("//div[@class='col-lg-wide-75 col-md-wide-7 col-xs-1 padding-0']")[0]
|
|
||||||
title = divContent.xpath(".//div[@class='myui-content__detail']/h1/text()")[0]
|
|
||||||
pic = divContent.xpath(".//div[@class='myui-content__thumb']/a/img/@data-original")[0]
|
|
||||||
det = divContent.xpath(".//div[@class='col-pd text-collapse content']/span[@class='data']")[0]
|
|
||||||
if det.text is None:
|
|
||||||
detail = det.xpath(".//p/text()")[0]
|
|
||||||
else:
|
|
||||||
detail = det.text
|
|
||||||
vod = {
|
|
||||||
"vod_id": tid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": "",
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": "",
|
|
||||||
"vod_actor": "",
|
|
||||||
"vod_director": "",
|
|
||||||
"vod_content": detail
|
|
||||||
}
|
|
||||||
infoArray = divContent.xpath(".//div[@class='myui-content__detail']/p[contains(@class,'data')]")
|
|
||||||
for info in infoArray:
|
|
||||||
content = info.xpath('string(.)')
|
|
||||||
flag = "分类" in content
|
|
||||||
if flag == True:
|
|
||||||
infon = content.replace("\t","").replace("\n","").strip().split('\r')
|
|
||||||
for inf in infon:
|
|
||||||
if inf.startswith('分类'):
|
|
||||||
vod['type_name'] = inf.replace("分类:", "")
|
|
||||||
if inf.startswith('地区'):
|
|
||||||
vod['vod_area'] = inf.replace("地区:", "")
|
|
||||||
if inf.startswith('年份'):
|
|
||||||
vod['vod_year'] = inf.replace("年份:", "")
|
|
||||||
if content.startswith('主演'):
|
|
||||||
vod['vod_actor'] = content.replace("\xa0", "/").replace("主演:", "").strip('/')
|
|
||||||
if content.startswith('更新'):
|
|
||||||
vod['vod_remarks'] = content.replace("更新:", "")
|
|
||||||
if content.startswith('导演'):
|
|
||||||
vod['vod_director'] = content.replace("\xa0", "").replace("导演:", "").strip('/')
|
|
||||||
|
|
||||||
vod_play_from = '$$$'
|
|
||||||
playFrom = []
|
|
||||||
vodHeader = divContent.xpath(".//div[@class='myui-panel_hd']/div/ul/li/a[contains(@href,'playlist')]/text()")
|
|
||||||
for v in vodHeader:
|
|
||||||
playFrom.append(v.replace(" ", ""))
|
|
||||||
vod_play_from = vod_play_from.join(playFrom)
|
|
||||||
|
|
||||||
vod_play_url = '$$$'
|
|
||||||
playList = []
|
|
||||||
vodList = divContent.xpath(".//div[contains(@id,'playlist')]")
|
|
||||||
for vl in vodList:
|
|
||||||
vodItems = []
|
|
||||||
aList = vl.xpath('./ul/li/a')
|
|
||||||
if len(aList) <= 0:
|
|
||||||
name = '无法找到播放源'
|
|
||||||
tId = '00000'
|
|
||||||
vodItems.append(name + "$" + tId)
|
|
||||||
else:
|
|
||||||
for tA in aList:
|
|
||||||
href = tA.xpath('./@href')[0]
|
|
||||||
name = tA.xpath("./text()")[0].replace(" ", "")
|
|
||||||
tId = self.regStr(href, '/vodplay/(\\S+).html')
|
|
||||||
vodItems.append(name + "$" + tId)
|
|
||||||
joinStr = '#'
|
|
||||||
joinStr = joinStr.join(vodItems)
|
|
||||||
playList.append(joinStr)
|
|
||||||
vod_play_url = vod_play_url.join(playList)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = vod_play_from
|
|
||||||
vod['vod_play_url'] = vod_play_url
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def searchContent(self, key, quick):
|
|
||||||
url = 'https://www.30dian.cn/vodsearch/-------------.html?wd={0}'.format(key)
|
|
||||||
header = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36"}
|
|
||||||
rsp = self.fetch(url, headers=header)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
aList = root.xpath("//ul[contains(@class,'myui-vodlist__media clearfix')]/li")
|
|
||||||
videos = []
|
|
||||||
for a in aList:
|
|
||||||
name = a.xpath(".//div[@class='detail']/h4/a/text()")[0]
|
|
||||||
pic = a.xpath(".//a[contains(@class,'myui-vodlist__thumb')]//@data-original")[0]
|
|
||||||
mark = a.xpath(".//span[@class='tag']/text()")[0]
|
|
||||||
sid = a.xpath(".//div[@class='detail']/h4/a/@href")[0]
|
|
||||||
sid = self.regStr(sid,'/voddetail/(\\S+).html')
|
|
||||||
videos.append({
|
|
||||||
"vod_id": sid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": mark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list': videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self, flag, id, vipFlags):
|
|
||||||
result = {}
|
|
||||||
header = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Linux; Android 4.4.2; Nexus 4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36"}
|
|
||||||
if id == '00000':
|
|
||||||
return {}
|
|
||||||
url = 'https://www.30dian.cn/vodplay/{0}.html'.format(id)
|
|
||||||
rsp = self.fetch(url,headers=header)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
scripts = root.xpath("//div[@class='embed-responsive clearfix']/script[@type='text/javascript']/text()")[0]
|
|
||||||
ukey = re.findall(r"url(.*)url_next", scripts)[0].replace('"', "").replace(',', "").replace(':', "")
|
|
||||||
purl = urllib.parse.unquote(ukey)
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] =purl
|
|
||||||
result["header"] = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def isVideoFormat(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def localProxy(self, param):
|
|
||||||
action = {
|
|
||||||
'url': '',
|
|
||||||
'header': '',
|
|
||||||
'param': '',
|
|
||||||
'type': 'string',
|
|
||||||
'after': ''
|
|
||||||
}
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,244 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
# !/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import base64
|
|
||||||
from Crypto.Cipher import AES
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "厂长资源"
|
|
||||||
|
|
||||||
def init(self, extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
|
|
||||||
def homeContent(self, filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"豆瓣电影Top250": "dbtop250",
|
|
||||||
"最新电影": "zuixindianying",
|
|
||||||
"电视剧": "dsj",
|
|
||||||
"国产剧": "gcj",
|
|
||||||
"美剧": "meijutt",
|
|
||||||
"韩剧": "hanjutv",
|
|
||||||
"番剧": "fanju",
|
|
||||||
"动漫": "dm"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name': k,
|
|
||||||
'type_id': cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
return result
|
|
||||||
|
|
||||||
def homeVideoContent(self):
|
|
||||||
rsp = self.fetch("https://czspp.com")
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
aList = root.xpath("//div[@class='mi_btcon']//ul/li")
|
|
||||||
videos = []
|
|
||||||
for a in aList:
|
|
||||||
name = a.xpath('./a/img/@alt')[0]
|
|
||||||
pic = a.xpath('./a/img/@data-original')[0]
|
|
||||||
mark = a.xpath("./div[@class='hdinfo']/span/text()")[0]
|
|
||||||
sid = a.xpath("./a/@href")[0]
|
|
||||||
sid = self.regStr(sid, "/movie/(\\S+).html")
|
|
||||||
videos.append({
|
|
||||||
"vod_id": sid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": mark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list': videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def categoryContent(self, tid, pg, filter, extend):
|
|
||||||
result = {}
|
|
||||||
url = 'https://czspp.com/{0}/page/{1}'.format(tid, pg)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
aList = root.xpath("//div[contains(@class,'mi_cont')]//ul/li")
|
|
||||||
videos = []
|
|
||||||
for a in aList:
|
|
||||||
name = a.xpath('./a/img/@alt')[0]
|
|
||||||
pic = a.xpath('./a/img/@data-original')[0]
|
|
||||||
mark = a.xpath("./div[@class='hdinfo']/span/text()")[0]
|
|
||||||
sid = a.xpath("./a/@href")[0]
|
|
||||||
sid = self.regStr(sid, "/movie/(\\S+).html")
|
|
||||||
videos.append({
|
|
||||||
"vod_id": sid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": mark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def detailContent(self, array):
|
|
||||||
tid = array[0]
|
|
||||||
url = 'https://czspp.com/movie/{0}.html'.format(tid)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
node = root.xpath("//div[@class='dyxingq']")[0]
|
|
||||||
pic = node.xpath(".//div[@class='dyimg fl']/img/@src")[0]
|
|
||||||
title = node.xpath('.//h1/text()')[0]
|
|
||||||
detail = root.xpath(".//div[@class='yp_context']//p/text()")[0]
|
|
||||||
vod = {
|
|
||||||
"vod_id": tid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": "",
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": "",
|
|
||||||
"vod_actor": "",
|
|
||||||
"vod_director": "",
|
|
||||||
"vod_content": detail
|
|
||||||
}
|
|
||||||
infoArray = node.xpath(".//ul[@class='moviedteail_list']/li")
|
|
||||||
for info in infoArray:
|
|
||||||
content = info.xpath('string(.)')
|
|
||||||
if content.startswith('类型'):
|
|
||||||
tpyen = ''
|
|
||||||
for inf in info:
|
|
||||||
tn = inf.text
|
|
||||||
tpyen = tpyen +'/'+'{0}'.format(tn)
|
|
||||||
vod['type_name'] = tpyen.strip('/')
|
|
||||||
if content.startswith('地区'):
|
|
||||||
tpyeare = ''
|
|
||||||
for inf in info:
|
|
||||||
tn = inf.text
|
|
||||||
tpyeare = tpyeare +'/'+'{0}'.format(tn)
|
|
||||||
vod['vod_area'] = tpyeare.strip('/')
|
|
||||||
if content.startswith('豆瓣'):
|
|
||||||
vod['vod_remarks'] = content
|
|
||||||
if content.startswith('主演'):
|
|
||||||
tpyeact = ''
|
|
||||||
for inf in info:
|
|
||||||
tn = inf.text
|
|
||||||
tpyeact = tpyeact +'/'+'{0}'.format(tn)
|
|
||||||
vod['vod_actor'] = tpyeact.strip('/')
|
|
||||||
if content.startswith('导演'):
|
|
||||||
tpyedire = ''
|
|
||||||
for inf in info:
|
|
||||||
tn = inf.text
|
|
||||||
tpyedire = tpyedire +'/'+'{0}'.format(tn)
|
|
||||||
vod['vod_director'] = tpyedire .strip('/')
|
|
||||||
vod_play_from = '$$$'
|
|
||||||
playFrom = ['厂长']
|
|
||||||
vod_play_from = vod_play_from.join(playFrom)
|
|
||||||
vod_play_url = '$$$'
|
|
||||||
playList = []
|
|
||||||
vodList = root.xpath("//div[@class='paly_list_btn']")
|
|
||||||
for vl in vodList:
|
|
||||||
vodItems = []
|
|
||||||
aList = vl.xpath('./a')
|
|
||||||
for tA in aList:
|
|
||||||
href = tA.xpath('./@href')[0]
|
|
||||||
name = tA.xpath('./text()')[0]
|
|
||||||
tId = self.regStr(href, '/v_play/(\\S+).html')
|
|
||||||
vodItems.append(name + "$" + tId)
|
|
||||||
joinStr = '#'
|
|
||||||
joinStr = joinStr.join(vodItems)
|
|
||||||
playList.append(joinStr)
|
|
||||||
vod_play_url = vod_play_url.join(playList)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = vod_play_from
|
|
||||||
vod['vod_play_url'] = vod_play_url
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def searchContent(self, key, quick):
|
|
||||||
url = 'https://czspp.com/xssearch?q={0}'.format(key)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
vodList = root.xpath("//div[contains(@class,'mi_ne_kd')]/ul/li/a")
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
name = vod.xpath('./img/@alt')[0]
|
|
||||||
pic = vod.xpath('./img/@data-original')[0]
|
|
||||||
href = vod.xpath('./@href')[0]
|
|
||||||
tid = self.regStr(href, 'movie/(\\S+).html')
|
|
||||||
res = vod.xpath('./div[@class="jidi"]/span/text()')
|
|
||||||
if len(res) == 0:
|
|
||||||
remark = '全1集'
|
|
||||||
else:
|
|
||||||
remark = vod.xpath('./div[@class="jidi"]/span/text()')[0]
|
|
||||||
videos.append({
|
|
||||||
"vod_id": tid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list': videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"
|
|
||||||
}
|
|
||||||
def parseCBC(self, enc, key, iv):
|
|
||||||
keyBytes = key.encode("utf-8")
|
|
||||||
ivBytes = iv.encode("utf-8")
|
|
||||||
cipher = AES.new(keyBytes, AES.MODE_CBC, ivBytes)
|
|
||||||
msg = cipher.decrypt(enc)
|
|
||||||
paddingLen = msg[len(msg) - 1]
|
|
||||||
return msg[0:-paddingLen]
|
|
||||||
|
|
||||||
def playerContent(self, flag, id, vipFlags):
|
|
||||||
url = 'https://czspp.com/v_play/{0}.html'.format(id)
|
|
||||||
pat = '\\"([^\\"]+)\\";var [\\d\\w]+=function dncry.*md5.enc.Utf8.parse\\(\\"([\\d\\w]+)\\".*md5.enc.Utf8.parse\\(([\\d]+)\\)'
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
html = rsp.text
|
|
||||||
content = self.regStr(html, pat)
|
|
||||||
if content == '':
|
|
||||||
return {}
|
|
||||||
key = self.regStr(html, pat, 2)
|
|
||||||
iv = self.regStr(html, pat, 3)
|
|
||||||
decontent = self.parseCBC(base64.b64decode(content), key, iv).decode()
|
|
||||||
urlPat = 'video: \\{url: \\\"([^\\\"]+)\\\"'
|
|
||||||
vttPat = 'subtitle: \\{url:\\\"([^\\\"]+\\.vtt)\\\"'
|
|
||||||
str3 = self.regStr(decontent, urlPat)
|
|
||||||
str4 = self.regStr(decontent, vttPat)
|
|
||||||
self.loadVtt(str3)
|
|
||||||
result = {
|
|
||||||
'parse': '0',
|
|
||||||
'playUrl': '',
|
|
||||||
'url': str3,
|
|
||||||
'header': ''
|
|
||||||
}
|
|
||||||
if len(str4) > 0:
|
|
||||||
result['subf'] = '/vtt/utf-8'
|
|
||||||
# result['subt'] = Proxy.localProxyUrl() + "?do=czspp&url=" + URLEncoder.encode(str4)
|
|
||||||
result['subt'] = ''
|
|
||||||
return result
|
|
||||||
|
|
||||||
def loadVtt(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def isVideoFormat(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def localProxy(self, param):
|
|
||||||
action = {}
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,147 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getName(self):
|
|
||||||
return "斗鱼"
|
|
||||||
def init(self,extend=""):
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"热门游戏": "热门游戏",
|
|
||||||
"一起看": "一起看",
|
|
||||||
"主机游戏": "主机游戏",
|
|
||||||
"原创IP": "原创IP",
|
|
||||||
"王者荣耀":"王者荣耀",
|
|
||||||
"英雄联盟":"英雄联盟",
|
|
||||||
"第五人格":"第五人格",
|
|
||||||
"火影忍者":"火影忍者",
|
|
||||||
"和平精英":"和平精英",
|
|
||||||
"DOTA2":"DOTA2",
|
|
||||||
"CF手游":"CF手游"
|
|
||||||
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name': k,
|
|
||||||
'type_id': cateManual[k]
|
|
||||||
})
|
|
||||||
|
|
||||||
result['class'] = classes
|
|
||||||
if (filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = 'http://live.yj1211.work/api/live/getRecommendByPlatformArea?platform=douyu&size=20&area={0}&page={1}'.format(tid, pg)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = (vod['roomId']).strip()
|
|
||||||
title = vod['roomName'].strip()
|
|
||||||
img = vod['roomPic'].strip()
|
|
||||||
remark = (vod['categoryName']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "http://live.yj1211.work/api/live/getRoomInfo?platform=douyu&roomId={0}".format(aid)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['roomName']
|
|
||||||
pic = jo['roomPic']
|
|
||||||
desc = str(jo['online'])
|
|
||||||
dire = jo['ownerName']
|
|
||||||
typeName = jo['categoryName']
|
|
||||||
remark = jo['categoryName']
|
|
||||||
vod = {
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": typeName,
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": remark,
|
|
||||||
"vod_actor": '在线人数:' + desc,
|
|
||||||
"vod_director": dire,
|
|
||||||
"vod_content": ""
|
|
||||||
}
|
|
||||||
playUrl = '原画' + '${0}#'.format(aid)
|
|
||||||
vod['vod_play_from'] = '斗鱼直播'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url = 'http://live.yj1211.work/api/live/getRealUrl?platform=douyu&roomId={0}'.format(id)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['OD']
|
|
||||||
url = ja
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
def localProxy(self,param):
|
|
||||||
action = {
|
|
||||||
'url':'',
|
|
||||||
'header':'',
|
|
||||||
'param':'',
|
|
||||||
'type':'string',
|
|
||||||
'after':''
|
|
||||||
}
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
File diff suppressed because one or more lines are too long
@ -1,216 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "剧迷"
|
|
||||||
def init(self,extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
# https://gimytv.co/
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"电影": "movies",
|
|
||||||
"电视剧": "tvseries",
|
|
||||||
"综艺": "tv_show",
|
|
||||||
"动漫": "anime"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name':k,
|
|
||||||
'type_id':cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
if(filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
rsp = self.fetch("https://gimytv.co/",headers=self.header)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
aList = root.xpath("//ul[@class='myui-vodlist clearfix']/li/div/a")
|
|
||||||
videos = []
|
|
||||||
for a in aList:
|
|
||||||
name = a.xpath("./@title")[0]
|
|
||||||
pic = a.xpath("./@data-original")[0]
|
|
||||||
mark = a.xpath("./span[contains(@class, 'pic-text')]/text()")[0]
|
|
||||||
sid = a.xpath("./@href")[0]
|
|
||||||
sid = self.regStr(sid,"/(\\S+).html")
|
|
||||||
videos.append({
|
|
||||||
"vod_id":sid,
|
|
||||||
"vod_name":name,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"vod_remarks":mark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list':videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
urlParams = ["", "", "", ""]
|
|
||||||
urlParams[0] = tid
|
|
||||||
urlParams[3] = pg
|
|
||||||
suffix = ''
|
|
||||||
for key in extend:
|
|
||||||
if key == 4:
|
|
||||||
suffix = '/by/'+extend[key]
|
|
||||||
else:
|
|
||||||
urlParams[int(key)] = extend[key]
|
|
||||||
params = '-'.join(urlParams)+suffix
|
|
||||||
# https://gimytv.co/genre/tvseries--2022-/by/hits_month.html
|
|
||||||
url = 'https://gimytv.com/genre/{0}.html'.format(params)
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
aList = root.xpath("//ul[@class='myui-vodlist clearfix']/li/div/a")
|
|
||||||
videos = []
|
|
||||||
for a in aList:
|
|
||||||
name = a.xpath("./@title")[0]
|
|
||||||
pic = a.xpath("./@data-original")[0]
|
|
||||||
mark = a.xpath("./span[contains(@class, 'pic-text')]/text()")[0]
|
|
||||||
sid = a.xpath("./@href")[0]
|
|
||||||
sid = self.regStr(sid,"/(\\S+).html")
|
|
||||||
videos.append({
|
|
||||||
"vod_id":sid,
|
|
||||||
"vod_name":name,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"vod_remarks":mark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def detailContent(self,array):
|
|
||||||
tid = array[0]
|
|
||||||
url = 'https://gimytv.co/{0}.html'.format(tid)
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
node = root.xpath("//div[@class='container']")[0]
|
|
||||||
title = node.xpath(".//div[@class='myui-content__thumb']/a/@title")[0]
|
|
||||||
pic = node.xpath(".//div[@class='myui-content__thumb']/a/img/@data-original")[0]
|
|
||||||
vod = {
|
|
||||||
"vod_id":tid,
|
|
||||||
"vod_name":title,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"type_name":"",
|
|
||||||
"vod_year":"",
|
|
||||||
"vod_area":"",
|
|
||||||
"vod_remarks":"",
|
|
||||||
"vod_actor":"",
|
|
||||||
"vod_director":"",
|
|
||||||
"vod_content":""
|
|
||||||
}
|
|
||||||
infoArray = node.xpath(".//div[@class='myui-content__detail']/p")
|
|
||||||
for info in infoArray:
|
|
||||||
content = info.xpath('string(.)')
|
|
||||||
if content.startswith('分類'):
|
|
||||||
vod['type_name'] = content
|
|
||||||
# if content.startswith('年份'):
|
|
||||||
# vod['vod_year'] = content
|
|
||||||
# if content.startswith('地区'):
|
|
||||||
# vod['vod_area'] = content
|
|
||||||
if content.startswith('狀態'):
|
|
||||||
vod['vod_remarks'] = content
|
|
||||||
if content.startswith('主演'):
|
|
||||||
vod['vod_actor'] = content
|
|
||||||
if content.startswith('導演'):
|
|
||||||
vod['vod_director'] = content
|
|
||||||
# if content.startswith('剧情'):
|
|
||||||
# vod['vod_content'] = content
|
|
||||||
vod['vod_content'] = node.xpath(".//div[contains(@class,'col-pd')]/p/text()")[0]
|
|
||||||
|
|
||||||
vod_play_from = '$$$'
|
|
||||||
playFrom = []
|
|
||||||
vodHeader = root.xpath(".//div[@class='myui-panel_hd']/div/h3/text()[2]")
|
|
||||||
for v in vodHeader:
|
|
||||||
playFrom.append(v.strip())
|
|
||||||
vod_play_from = vod_play_from.join(playFrom)
|
|
||||||
|
|
||||||
vod_play_url = '$$$'
|
|
||||||
playList = []
|
|
||||||
vodList = root.xpath(".//ul[contains(@class,'myui-content__list')]")
|
|
||||||
for vl in vodList:
|
|
||||||
vodItems = []
|
|
||||||
aList = vl.xpath('./li/a')
|
|
||||||
for tA in aList:
|
|
||||||
href = tA.xpath('./@href')[0]
|
|
||||||
name = tA.xpath('./text()')[0]
|
|
||||||
tId = self.regStr(href,'/(\\S+).html')
|
|
||||||
vodItems.append(name + "$" + tId)
|
|
||||||
joinStr = '#'
|
|
||||||
joinStr = joinStr.join(vodItems)
|
|
||||||
playList.append(joinStr)
|
|
||||||
vod_play_url = vod_play_url.join(playList)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = vod_play_from
|
|
||||||
vod['vod_play_url'] = vod_play_url
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list':[
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
url = "https://gimytv.co/search/-------------.html?wd={0}".format(key)
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
aList = root.xpath("//ul[contains(@class,'myui-vodlist__media')]/li")
|
|
||||||
videos = []
|
|
||||||
for a in aList:
|
|
||||||
name = a.xpath(".//a/@title")[0]
|
|
||||||
pic = a.xpath(".//a/@data-original")[0]
|
|
||||||
mark = a.xpath(".//span[contains(@class, 'pic-text')]/text()")[0]
|
|
||||||
sid = a.xpath(".//a/@href")[0]
|
|
||||||
sid = self.regStr(sid,"/(\\S+).html")
|
|
||||||
videos.append({
|
|
||||||
"vod_id":sid,
|
|
||||||
"vod_name":name,
|
|
||||||
"vod_pic":pic,
|
|
||||||
"vod_remarks":mark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list':videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
url = 'https://gimytv.co/{0}.html'.format(id)
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
scripts = root.xpath("//script/text()")
|
|
||||||
jo = {}
|
|
||||||
for script in scripts:
|
|
||||||
if(script.startswith("var player_")):
|
|
||||||
target = script[script.index('{'):]
|
|
||||||
jo = json.loads(target)
|
|
||||||
break;
|
|
||||||
url = jo['url']
|
|
||||||
result = {}
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = ''
|
|
||||||
return result
|
|
||||||
|
|
||||||
cookie = {}
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {"movies":[{"key":0,"name":"分类","value":[{"n":"全部","v":""},{"n":"劇情片","v":"drama"},{"n":"動作片","v":"action"},{"n":"科幻片","v":"scifi"},{"n":"喜劇片","v":"comedymovie"},{"n":"愛情片","v":"romance"},{"n":"戰爭片","v":"war"},{"n":"恐怖片","v":"horror"},{"n":"動畫電影","v":"animation"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"美國","v":"美國"},{"n":"歐美","v":"歐美"},{"n":"大陸","v":"大陸"},{"n":"中國大陸","v":"中國大陸"},{"n":"韓國","v":"韓國"},{"n":"香港","v":"香港"},{"n":"日本","v":"日本"},{"n":"英國","v":"英國"}]},{"key":2,"name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"}]},{"key":4,"name":"排序","value":[{"n":"按更新","v":"time"},{"n":"周人气","v":"hits_week"},{"n":"月人气","v":"hits_month"}]}],"tvseries":[{"key":0,"name":"分类","value":[{"n":"全部","v":""},{"n":"陸劇","v":"cn"},{"n":"韓劇","v":"kr"},{"n":"美劇","v":"us"},{"n":"日劇","v":"jp"},{"n":"台劇","v":"tw"},{"n":"港劇","v":"hks"},{"n":"海外劇","v":"ot"},{"n":"紀錄片","v":"documentary"}]},{"key":2,"name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"}]},{"key":4,"name":"排序","value":[{"n":"按更新","v":"time"},{"n":"周人气","v":"hits_week"},{"n":"月人气","v":"hits_month"}]}],"anime":[{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"日本","v":"日本"},{"n":"美國","v":"美國"},{"n":"歐美","v":"歐美"},{"n":"大陸","v":"大陸"},{"n":"臺灣","v":"臺灣"},{"n":"香港","v":"香港"}]},{"key":2,"name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"}]},{"key":4,"name":"排序","value":[{"n":"按更新","v":"time"},{"n":"周人气","v":"hits_week"},{"n":"月人气","v":"hits_month"}]}],"tv_show":[{"key":0,"name":"分类","value":[{"n":"全部","v":""},{"n":"纪录片","v":"28"}]},{"key":1,"name":"地区","value":[{"n":"全部","v":""},{"n":"大陸","v":"大陸"},{"n":"中國大陸","v":"中國大陸"},{"n":"韓國","v":"韓國"},{"n":"臺灣","v":"臺灣"},{"n":"美國","v":"美國"},{"n":"歐美","v":"歐美"},{"n":"日本","v":"日本"},{"n":"香港","v":"香港"}]},{"key":2,"name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"}]},{"key":4,"name":"排序","value":[{"n":"按更新","v":"time"},{"n":"周人气","v":"hits_week"},{"n":"月人气","v":"hits_month"}]}]}
|
|
||||||
}
|
|
||||||
header = {
|
|
||||||
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36 Edg/104.0.1293.47'
|
|
||||||
}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,136 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import requests
|
|
||||||
import json
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getDependence(self):
|
|
||||||
return ['py_ali']
|
|
||||||
def getName(self):
|
|
||||||
return "py_gitcafe"
|
|
||||||
def init(self,extend):
|
|
||||||
self.ali = extend[0]
|
|
||||||
print("============py_gitcafe============")
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"华语电视" :"hyds",
|
|
||||||
"日韩电视" :"rhds",
|
|
||||||
"欧美电视" :"omds",
|
|
||||||
"其他电视" :"qtds",
|
|
||||||
"华语电影" :"hydy",
|
|
||||||
"日韩电影" :"rhdy",
|
|
||||||
"欧美电影" :"omdy",
|
|
||||||
"其他电影" :"qtdy",
|
|
||||||
"华语动漫" :"hydm",
|
|
||||||
"日韩动漫" :"rhdm",
|
|
||||||
"欧美动漫" :"omdm",
|
|
||||||
"纪录片" :"jlp",
|
|
||||||
"综艺片" :"zyp",
|
|
||||||
"教育培训" :"jypx",
|
|
||||||
"其他视频" :"qtsp",
|
|
||||||
"华语音乐" :"hyyy",
|
|
||||||
"日韩音乐" :"rhyy",
|
|
||||||
"欧美音乐" :"omyy",
|
|
||||||
"其他音乐" :"qtyy"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name':k,
|
|
||||||
'type_id':cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
if filter:
|
|
||||||
result['filter'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {}
|
|
||||||
if len(self.homeData.keys()) == 0:
|
|
||||||
url = self.baseUrl+'/alipaper/home.json'
|
|
||||||
self.homeData = self.fetch(url,headers=self.header).json()
|
|
||||||
cateList = self.homeData['data']
|
|
||||||
videos = []
|
|
||||||
for cate in cateList:
|
|
||||||
if cate['info']['code'] in self.category:
|
|
||||||
vodList = cate['data']
|
|
||||||
for vod in vodList:
|
|
||||||
videos.append({
|
|
||||||
"vod_id":"https://www.aliyundrive.com/s/" + vod['key'],
|
|
||||||
"vod_name":vod['title'],
|
|
||||||
"vod_pic":'https://txc.gtimg.com/data/375895/2022/0214/d6b96cc3799b6417d30e4715d2973f64.png',
|
|
||||||
"vod_remarks":''
|
|
||||||
})
|
|
||||||
result['list']=videos
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = self.baseUrl+'/tool/alipaper/'
|
|
||||||
form = {
|
|
||||||
"action": "viewcat",
|
|
||||||
"cat": tid,
|
|
||||||
"num":pg
|
|
||||||
}
|
|
||||||
|
|
||||||
rsp = requests.post(url,headers=self.header,data=form)
|
|
||||||
vodList = json.loads(self.cleanText(rsp.text))
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
videos.append({
|
|
||||||
"vod_id": 'https://www.aliyundrive.com/s/'+vod["key"],
|
|
||||||
"vod_name": vod["title"],
|
|
||||||
"vod_pic": "https://txc.gtimg.com/data/375895/2022/0214/d6b96cc3799b6417d30e4715d2973f64.png",
|
|
||||||
"vod_remarks": vod['cat']
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
category = ['hydm','hyds','hydy','omdm','omds','omdy','rhdm','rhds','rhdy','qtds','qtdy','qtsp','jlp','zyp']
|
|
||||||
def detailContent(self,array):
|
|
||||||
return self.ali.detailContent(array)
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {}
|
|
||||||
url = self.baseUrl+'/tool/alipaper/'
|
|
||||||
form = {
|
|
||||||
"action": "search",
|
|
||||||
"keyword": key
|
|
||||||
}
|
|
||||||
vodList = requests.post(url,headers=self.header,data=form).json()
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
videos.append({
|
|
||||||
"vod_id": 'https://www.aliyundrive.com/s/'+vod["key"],
|
|
||||||
"vod_name": vod["title"],
|
|
||||||
"vod_pic": "https://txc.gtimg.com/data/375895/2022/0214/d6b96cc3799b6417d30e4715d2973f64.png",
|
|
||||||
"vod_remarks": vod['cat']
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list':videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
return self.ali.playerContent(flag,id,vipFlags)
|
|
||||||
|
|
||||||
homeData = {}
|
|
||||||
baseUrl = 'https://gitcafe.net'
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; V2049A Build/SP1A.210812.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36",
|
|
||||||
"Referer": "https://u.gitcafe.net/"
|
|
||||||
}
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,883 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getName(self):
|
|
||||||
return "虎牙"
|
|
||||||
def init(self,extend=""):
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"一起看": "一起看",
|
|
||||||
"三国杀": "三国杀",
|
|
||||||
"网游竞技": "网游竞技",
|
|
||||||
"英雄联盟": "英雄联盟",
|
|
||||||
"王者荣耀": "王者荣耀",
|
|
||||||
"英雄联盟电竞经理": "英雄联盟电竞经理",
|
|
||||||
"一起看": "一起看",
|
|
||||||
"星秀": "星秀",
|
|
||||||
"暗黑破坏神:不朽": "暗黑破坏神:不朽",
|
|
||||||
"暗区突围": "暗区突围",
|
|
||||||
"生死狙击2": "生死狙击2",
|
|
||||||
"户外": "户外",
|
|
||||||
"金铲铲之战": "金铲铲之战",
|
|
||||||
"和平精英": "和平精英",
|
|
||||||
"英雄联盟手游": "英雄联盟手游",
|
|
||||||
"天天吃鸡": "天天吃鸡",
|
|
||||||
"lol云顶之弈": "lol云顶之弈",
|
|
||||||
"剑侠世界3": "剑侠世界3",
|
|
||||||
"不良人3": "不良人3",
|
|
||||||
"二次元": "二次元",
|
|
||||||
"穿越火线": "穿越火线",
|
|
||||||
"主机游戏": "主机游戏",
|
|
||||||
"美食": "美食",
|
|
||||||
"综合手游": "综合手游",
|
|
||||||
"暴雪专区": "暴雪专区",
|
|
||||||
"颜值": "颜值",
|
|
||||||
"CF手游": "CF手游",
|
|
||||||
"交友": "交友",
|
|
||||||
"地下城与勇士": "地下城与勇士",
|
|
||||||
"新游广场": "新游广场",
|
|
||||||
"体育": "体育",
|
|
||||||
"棋牌桌游": "棋牌桌游",
|
|
||||||
"我的世界": "我的世界",
|
|
||||||
"炉石传说": "炉石传说",
|
|
||||||
"魔兽世界": "魔兽世界",
|
|
||||||
"QQ飞车手游": "QQ飞车手游",
|
|
||||||
"DOTA2": "DOTA2",
|
|
||||||
"方舟": "方舟",
|
|
||||||
"跑跑卡丁车手游": "跑跑卡丁车手游",
|
|
||||||
"火影忍者手游": "火影忍者手游",
|
|
||||||
"球球大作战": "球球大作战",
|
|
||||||
"CS:GO": "CS:GO",
|
|
||||||
"DOTA1": "DOTA1",
|
|
||||||
"QQ飞车": "QQ飞车",
|
|
||||||
"问道": "问道",
|
|
||||||
"魔兽争霸3": "魔兽争霸3",
|
|
||||||
"逆战": "逆战",
|
|
||||||
"梦三国": "梦三国",
|
|
||||||
"三国杀": "三国杀",
|
|
||||||
"网游竞技": "网游竞技",
|
|
||||||
"手游休闲": "手游休闲",
|
|
||||||
"娱乐天地": "娱乐天地",
|
|
||||||
"放映厅": "放映厅",
|
|
||||||
"单机热游": "单机热游",
|
|
||||||
"组队": "组队",
|
|
||||||
"二次元手游": "二次元手游",
|
|
||||||
"吃喝玩乐": "吃喝玩乐",
|
|
||||||
"原神": "原神",
|
|
||||||
"MMORPG": "MMORPG",
|
|
||||||
"互动点播": "互动点播",
|
|
||||||
"动作游戏": "动作游戏",
|
|
||||||
"永劫无间": "永劫无间",
|
|
||||||
"原创": "原创",
|
|
||||||
"虎牙地方": "虎牙地方",
|
|
||||||
"传奇": "传奇",
|
|
||||||
"御龙在天": "御龙在天",
|
|
||||||
"军事游戏": "军事游戏",
|
|
||||||
"传奇类游戏": "传奇类游戏",
|
|
||||||
"射击综合游戏": "射击综合游戏",
|
|
||||||
"幻塔": "幻塔",
|
|
||||||
"战争冲突": "战争冲突",
|
|
||||||
"虎牙领主争霸": "虎牙领主争霸",
|
|
||||||
"王者模拟战": "王者模拟战",
|
|
||||||
"坦克世界": "坦克世界",
|
|
||||||
"一起玩": "一起玩",
|
|
||||||
"传奇手游": "传奇手游",
|
|
||||||
"天龙八部手游": "天龙八部手游",
|
|
||||||
"虎牙文化": "虎牙文化",
|
|
||||||
"明日之后": "明日之后",
|
|
||||||
"Dread Hunger": "Dread Hunger",
|
|
||||||
"艾尔登法环": "艾尔登法环",
|
|
||||||
"永恒之塔": "永恒之塔",
|
|
||||||
"英魂之刃": "英魂之刃",
|
|
||||||
"第五人格": "第五人格",
|
|
||||||
"COD手游": "COD手游",
|
|
||||||
"虚拟偶像": "虚拟偶像",
|
|
||||||
"音乐": "音乐",
|
|
||||||
"彩虹岛Online": "彩虹岛Online",
|
|
||||||
"趣分享": "趣分享",
|
|
||||||
"逃离塔科夫": "逃离塔科夫",
|
|
||||||
"狼人杀手游": "狼人杀手游",
|
|
||||||
"探索": "探索",
|
|
||||||
"剑灵": "剑灵",
|
|
||||||
"Apex英雄": "Apex英雄",
|
|
||||||
"炉石战棋": "炉石战棋",
|
|
||||||
"DNF手游": "DNF手游",
|
|
||||||
"欢乐麻将": "欢乐麻将",
|
|
||||||
"天涯明月刀手游": "天涯明月刀手游",
|
|
||||||
"怀旧游戏": "怀旧游戏",
|
|
||||||
"冒险岛": "冒险岛",
|
|
||||||
"俄罗斯钓鱼4": "俄罗斯钓鱼4",
|
|
||||||
"欢乐斗地主": "欢乐斗地主",
|
|
||||||
"神武4手游": "神武4手游",
|
|
||||||
"起凡:群雄逐鹿": "起凡:群雄逐鹿",
|
|
||||||
"部落:上升": "部落:上升",
|
|
||||||
"御龙在天手游": "御龙在天手游",
|
|
||||||
"体育游戏": "体育游戏",
|
|
||||||
"神武4电脑版": "神武4电脑版",
|
|
||||||
"诛仙3": "诛仙3",
|
|
||||||
"CFHD": "CFHD",
|
|
||||||
"热血江湖": "热血江湖",
|
|
||||||
"枪神纪": "枪神纪",
|
|
||||||
"QQ三国": "QQ三国",
|
|
||||||
"英雄杀": "英雄杀",
|
|
||||||
"九阴真经": "九阴真经",
|
|
||||||
"三国志战略版": "三国志战略版",
|
|
||||||
"天天狼人": "天天狼人",
|
|
||||||
"NBA2KOL系列": "NBA2KOL系列",
|
|
||||||
"征途": "征途",
|
|
||||||
"多乐棋牌": "多乐棋牌",
|
|
||||||
"问道手游": "问道手游",
|
|
||||||
"寻仙": "寻仙",
|
|
||||||
"龙之谷": "龙之谷",
|
|
||||||
"草根传奇": "草根传奇",
|
|
||||||
"阴阳师": "阴阳师",
|
|
||||||
"暗黑破坏神": "暗黑破坏神",
|
|
||||||
"直播购": "直播购",
|
|
||||||
"忍者必须死3": "忍者必须死3",
|
|
||||||
"DayZ独立版": "DayZ独立版",
|
|
||||||
"荒野行动PC版": "荒野行动PC版",
|
|
||||||
"斗战神": "斗战神",
|
|
||||||
"迷你世界": "迷你世界",
|
|
||||||
"逆水寒": "逆水寒",
|
|
||||||
"恐惧之间": "恐惧之间",
|
|
||||||
"斗罗大陆:魂师对决": "斗罗大陆:魂师对决",
|
|
||||||
"战舰世界": "战舰世界",
|
|
||||||
"反恐精英Online": "反恐精英Online",
|
|
||||||
"狼人杀": "狼人杀",
|
|
||||||
"妄想山海": "妄想山海",
|
|
||||||
"旅游": "旅游",
|
|
||||||
"刀剑英雄": "刀剑英雄",
|
|
||||||
"流放之路": "流放之路",
|
|
||||||
"摔跤城大乱斗": "摔跤城大乱斗",
|
|
||||||
"诛仙世界": "诛仙世界",
|
|
||||||
"QQ华夏": "QQ华夏",
|
|
||||||
"奶块": "奶块",
|
|
||||||
"生死狙击": "生死狙击",
|
|
||||||
"部落冲突": "部落冲突",
|
|
||||||
"魔兽世界怀旧服": "魔兽世界怀旧服",
|
|
||||||
"香肠派对": "香肠派对",
|
|
||||||
"恐鬼症": "恐鬼症",
|
|
||||||
"创造与魔法": "创造与魔法",
|
|
||||||
"完美世界手游": "完美世界手游",
|
|
||||||
"率土之滨": "率土之滨",
|
|
||||||
"星球大战系列": "星球大战系列",
|
|
||||||
"SKY光遇": "SKY光遇",
|
|
||||||
"铁甲雄兵": "铁甲雄兵",
|
|
||||||
"JJ棋牌": "JJ棋牌",
|
|
||||||
"派对": "派对",
|
|
||||||
"大唐无双零": "大唐无双零",
|
|
||||||
"梦幻新诛仙": "梦幻新诛仙",
|
|
||||||
"巅峰战舰": "巅峰战舰",
|
|
||||||
"星际战甲": "星际战甲",
|
|
||||||
"崩坏3": "崩坏3",
|
|
||||||
"欧洲卡车模拟": "欧洲卡车模拟",
|
|
||||||
"绿茵信仰": "绿茵信仰",
|
|
||||||
"狼人杀官方": "狼人杀官方",
|
|
||||||
"逃跑吧!少年": "逃跑吧!少年",
|
|
||||||
"征途2": "征途2",
|
|
||||||
"新倩女幽魂": "新倩女幽魂",
|
|
||||||
"天涯明月刀": "天涯明月刀",
|
|
||||||
"天天象棋": "天天象棋",
|
|
||||||
"倩女幽魂手游": "倩女幽魂手游",
|
|
||||||
"武侠乂手游": "武侠乂手游",
|
|
||||||
"怪物猎人:崛起": "怪物猎人:崛起",
|
|
||||||
"中国象棋": "中国象棋",
|
|
||||||
"怪物猎人物语": "怪物猎人物语",
|
|
||||||
"饥荒": "饥荒",
|
|
||||||
"失落的方舟": "失落的方舟",
|
|
||||||
"天谕手游": "天谕手游",
|
|
||||||
"重返帝国": "重返帝国",
|
|
||||||
"梦想世界3": "梦想世界3",
|
|
||||||
"大话西游2": "大话西游2",
|
|
||||||
"互动剧游": "互动剧游",
|
|
||||||
"万国觉醒": "万国觉醒",
|
|
||||||
"完美端游系列": "完美端游系列",
|
|
||||||
"斗破苍穹手游": "斗破苍穹手游",
|
|
||||||
"新笑傲江湖": "新笑傲江湖",
|
|
||||||
"多多自走棋": "多多自走棋",
|
|
||||||
"天天酷跑": "天天酷跑",
|
|
||||||
"天翼决": "天翼决",
|
|
||||||
"甜蜜之家": "甜蜜之家",
|
|
||||||
"守望先锋": "守望先锋",
|
|
||||||
"弹弹堂手游": "弹弹堂手游",
|
|
||||||
"反恐行动online": "反恐行动online",
|
|
||||||
"新剑侠情缘手游": "新剑侠情缘手游",
|
|
||||||
"英魂之刃口袋版": "英魂之刃口袋版",
|
|
||||||
"云上城之歌": "云上城之歌",
|
|
||||||
"FIFA Online系列": "FIFA Online系列",
|
|
||||||
"奇迹MU:觉醒": "奇迹MU:觉醒",
|
|
||||||
"千年3": "千年3",
|
|
||||||
"无期迷途": "无期迷途",
|
|
||||||
"造梦西游OL": "造梦西游OL",
|
|
||||||
"SCUM": "SCUM",
|
|
||||||
"超击突破": "超击突破",
|
|
||||||
"港诡实录": "港诡实录",
|
|
||||||
"丝路传说2": "丝路传说2",
|
|
||||||
"纸人": "纸人",
|
|
||||||
"无神之界": "无神之界",
|
|
||||||
"战争雷霆": "战争雷霆",
|
|
||||||
"剑网3": "剑网3",
|
|
||||||
"武林外传一世琴缘": "武林外传一世琴缘",
|
|
||||||
"命运2": "命运2",
|
|
||||||
"最强NBA": "最强NBA",
|
|
||||||
"QQ自由幻想": "QQ自由幻想",
|
|
||||||
"时空猎人3": "时空猎人3",
|
|
||||||
"逆水寒手游": "逆水寒手游",
|
|
||||||
"星际争霸": "星际争霸",
|
|
||||||
"航海王热血航线": "航海王热血航线",
|
|
||||||
"王牌竞速": "王牌竞速",
|
|
||||||
"战地5": "战地5",
|
|
||||||
"精灵盛典:黎明": "精灵盛典:黎明",
|
|
||||||
"永恒纪元:戒": "永恒纪元:戒",
|
|
||||||
"神泣": "神泣",
|
|
||||||
"骑马与砍杀系列": "骑马与砍杀系列",
|
|
||||||
"只狼:影逝二度": "只狼:影逝二度",
|
|
||||||
"北凉悍刀行": "北凉悍刀行",
|
|
||||||
"洛克王国": "洛克王国",
|
|
||||||
"植物大战僵尸": "植物大战僵尸",
|
|
||||||
"三国战纪2": "三国战纪2",
|
|
||||||
"跑跑卡丁车": "跑跑卡丁车",
|
|
||||||
"全民枪战2": "全民枪战2",
|
|
||||||
"远征Online梦想版": "远征Online梦想版",
|
|
||||||
"诛仙手游": "诛仙手游",
|
|
||||||
"方舟手游": "方舟手游",
|
|
||||||
"混沌起源": "混沌起源",
|
|
||||||
"雷曼:传奇": "雷曼:传奇",
|
|
||||||
"怪物猎人世界": "怪物猎人世界",
|
|
||||||
"育碧游戏": "育碧游戏",
|
|
||||||
"FIFA足球世界": "FIFA足球世界",
|
|
||||||
"黎明觉醒": "黎明觉醒",
|
|
||||||
"荒野乱斗": "荒野乱斗",
|
|
||||||
"007:传奇": "007:传奇",
|
|
||||||
"天下": "天下",
|
|
||||||
"极限竞速:地平线": "极限竞速:地平线",
|
|
||||||
"龙之谷2手游": "龙之谷2手游",
|
|
||||||
"蛋仔派对": "蛋仔派对",
|
|
||||||
"虎牙球球": "虎牙球球",
|
|
||||||
"Badlanders": "Badlanders",
|
|
||||||
"激战2": "激战2",
|
|
||||||
"征途2手游": "征途2手游",
|
|
||||||
"剑灵:革命": "剑灵:革命",
|
|
||||||
"绝世仙王": "绝世仙王",
|
|
||||||
"超激斗梦境": "超激斗梦境",
|
|
||||||
"航海王:燃烧意志": "航海王:燃烧意志",
|
|
||||||
"红警OL": "红警OL",
|
|
||||||
"使命召唤系列": "使命召唤系列",
|
|
||||||
"QQ幻想": "QQ幻想",
|
|
||||||
"岛": "岛",
|
|
||||||
"消逝的光芒2": "消逝的光芒2",
|
|
||||||
"海岛奇兵": "海岛奇兵",
|
|
||||||
"战意": "战意",
|
|
||||||
"三国志": "三国志",
|
|
||||||
"荒野大镖客2": "荒野大镖客2",
|
|
||||||
"黑色沙漠": "黑色沙漠",
|
|
||||||
"极光世界 弑神传": "极光世界 弑神传",
|
|
||||||
"音乐游戏": "音乐游戏",
|
|
||||||
"九灵神域": "九灵神域",
|
|
||||||
"QQ幻想世界": "QQ幻想世界",
|
|
||||||
"Lost Light(萤火突击国际服)": "Lost Light(萤火突击国际服)",
|
|
||||||
"新飞飞(FlyFF)": "新飞飞(FlyFF)",
|
|
||||||
"深空之眼": "深空之眼",
|
|
||||||
"新斗罗大陆": "新斗罗大陆",
|
|
||||||
"坦克大战": "坦克大战",
|
|
||||||
"三国战纪": "三国战纪",
|
|
||||||
"猎人:荒野的召唤": "猎人:荒野的召唤",
|
|
||||||
"真·三国无双OL": "真·三国无双OL",
|
|
||||||
"VALORANT": "VALORANT",
|
|
||||||
"风云": "风云",
|
|
||||||
"贪玩蓝月": "贪玩蓝月",
|
|
||||||
"决战平安京": "决战平安京",
|
|
||||||
"拳皇命运": "拳皇命运",
|
|
||||||
"其他单机": "其他单机",
|
|
||||||
"QQ仙侠传": "QQ仙侠传",
|
|
||||||
"奥拉星": "奥拉星",
|
|
||||||
"荣耀新三国": "荣耀新三国",
|
|
||||||
"寻仙手游": "寻仙手游",
|
|
||||||
"罗布乐思": "罗布乐思",
|
|
||||||
"盗贼之海": "盗贼之海",
|
|
||||||
"一念逍遥": "一念逍遥",
|
|
||||||
"一梦江湖": "一梦江湖",
|
|
||||||
"实况足球": "实况足球",
|
|
||||||
"Among Us": "Among Us",
|
|
||||||
"热血江湖手游": "热血江湖手游",
|
|
||||||
"皇室战争": "皇室战争",
|
|
||||||
"FIFA Online4": "FIFA Online4",
|
|
||||||
"糖豆人:终极淘汰赛": "糖豆人:终极淘汰赛",
|
|
||||||
"轩辕传奇": "轩辕传奇",
|
|
||||||
"哈利波特:魔法觉醒": "哈利波特:魔法觉醒",
|
|
||||||
"无尽的拉格朗日": "无尽的拉格朗日",
|
|
||||||
"明日方舟": "明日方舟",
|
|
||||||
"都市:天际线": "都市:天际线",
|
|
||||||
"醉逍遥": "醉逍遥",
|
|
||||||
"使命召唤:战区": "使命召唤:战区",
|
|
||||||
"王牌战争:文明重启": "王牌战争:文明重启",
|
|
||||||
"诺亚传说": "诺亚传说",
|
|
||||||
"黑色沙漠手游": "黑色沙漠手游",
|
|
||||||
"真三国无双霸": "真三国无双霸",
|
|
||||||
"希望OL": "希望OL",
|
|
||||||
"梦三国手游": "梦三国手游",
|
|
||||||
"斗罗大陆": "斗罗大陆",
|
|
||||||
"天谕": "天谕",
|
|
||||||
"梦幻诛仙手游": "梦幻诛仙手游",
|
|
||||||
"大话西游手游": "大话西游手游",
|
|
||||||
"新剑侠情缘": "新剑侠情缘",
|
|
||||||
"天天吃鸡手机版": "天天吃鸡手机版",
|
|
||||||
"九霄缳神记": "九霄缳神记",
|
|
||||||
"夜族崛起": "夜族崛起",
|
|
||||||
"雀魂麻将": "雀魂麻将",
|
|
||||||
"魂斗罗:归来": "魂斗罗:归来",
|
|
||||||
"游戏王:决斗链接": "游戏王:决斗链接",
|
|
||||||
"天命西游": "天命西游",
|
|
||||||
"笑傲江湖": "笑傲江湖",
|
|
||||||
"QQ炫舞": "QQ炫舞",
|
|
||||||
"帝国时代4": "帝国时代4",
|
|
||||||
"征途手游": "征途手游",
|
|
||||||
"漫威超级战争": "漫威超级战争",
|
|
||||||
"奥奇传说手游": "奥奇传说手游",
|
|
||||||
"双人成行": "双人成行",
|
|
||||||
"完美世界:诸神之战": "完美世界:诸神之战",
|
|
||||||
"指尖四川麻将": "指尖四川麻将",
|
|
||||||
"幽灵线:东京": "幽灵线:东京",
|
|
||||||
"庆余年手游": "庆余年手游",
|
|
||||||
"拳皇98终极之战OL": "拳皇98终极之战OL",
|
|
||||||
"剑侠世界": "剑侠世界",
|
|
||||||
"海底大作战": "海底大作战",
|
|
||||||
"单机手游": "单机手游",
|
|
||||||
"全面战争:三国": "全面战争:三国",
|
|
||||||
"鸿图之下": "鸿图之下",
|
|
||||||
"刺客信条": "刺客信条",
|
|
||||||
"青云诀2": "青云诀2",
|
|
||||||
"火影忍者OL": "火影忍者OL",
|
|
||||||
"泡泡堂": "泡泡堂",
|
|
||||||
"装甲战争": "装甲战争",
|
|
||||||
"QQ炫舞手游": "QQ炫舞手游",
|
|
||||||
"星辰变": "星辰变",
|
|
||||||
"战术小队": "战术小队",
|
|
||||||
"枪火重生": "枪火重生",
|
|
||||||
"洛奇英雄传": "洛奇英雄传",
|
|
||||||
"真三国无双": "真三国无双",
|
|
||||||
"起凡游戏三国争霸": "起凡游戏三国争霸",
|
|
||||||
"死亡之夜": "死亡之夜",
|
|
||||||
"极品飞车系列": "极品飞车系列",
|
|
||||||
"堡垒之夜": "堡垒之夜",
|
|
||||||
"任天堂专区": "任天堂专区",
|
|
||||||
"霸王2": "霸王2",
|
|
||||||
"魔戒:中土大战": "魔戒:中土大战",
|
|
||||||
"APEX手游": "APEX手游",
|
|
||||||
"猫和老鼠": "猫和老鼠",
|
|
||||||
"文明与征服": "文明与征服",
|
|
||||||
"幻世九歌": "幻世九歌",
|
|
||||||
"灵魂筹码": "灵魂筹码",
|
|
||||||
"仁王2": "仁王2",
|
|
||||||
"帝国时代系列": "帝国时代系列",
|
|
||||||
"梦幻诛仙2": "梦幻诛仙2",
|
|
||||||
"少年三国志2": "少年三国志2",
|
|
||||||
"摩尔庄园": "摩尔庄园",
|
|
||||||
"魔力宝贝": "魔力宝贝",
|
|
||||||
"球球英雄": "球球英雄",
|
|
||||||
"坦克世界闪击战": "坦克世界闪击战",
|
|
||||||
"决胜三国": "决胜三国",
|
|
||||||
"风云岛行动": "风云岛行动",
|
|
||||||
"仙境传说RO": "仙境传说RO",
|
|
||||||
"剑侠世界2手游": "剑侠世界2手游",
|
|
||||||
"时空召唤": "时空召唤",
|
|
||||||
"全面战争": "全面战争",
|
|
||||||
"鬼泣": "鬼泣",
|
|
||||||
"鬼谷八荒": "鬼谷八荒",
|
|
||||||
"地铁跑酷": "地铁跑酷",
|
|
||||||
"决斗之城": "决斗之城",
|
|
||||||
"我的勇者": "我的勇者",
|
|
||||||
"QQ华夏手游": "QQ华夏手游",
|
|
||||||
"黑暗与光明手游": "黑暗与光明手游",
|
|
||||||
"腾讯桌球": "腾讯桌球",
|
|
||||||
"帝国神话": "帝国神话",
|
|
||||||
"王牌战士": "王牌战士",
|
|
||||||
"赛尔号": "赛尔号",
|
|
||||||
"奥奇传说": "奥奇传说",
|
|
||||||
"模拟农场": "模拟农场",
|
|
||||||
"火线精英": "火线精英",
|
|
||||||
"天堂 W": "天堂 W",
|
|
||||||
"仙剑奇侠传七": "仙剑奇侠传七",
|
|
||||||
"古剑奇谭OL": "古剑奇谭OL",
|
|
||||||
"千古风流": "千古风流",
|
|
||||||
"释厄英雄": "释厄英雄",
|
|
||||||
"影之刃3": "影之刃3",
|
|
||||||
"太荒初境": "太荒初境",
|
|
||||||
"奥比岛:梦想国度": "奥比岛:梦想国度",
|
|
||||||
"机动都市阿尔法": "机动都市阿尔法",
|
|
||||||
"奥拉星手游": "奥拉星手游",
|
|
||||||
"电竞传奇": "电竞传奇",
|
|
||||||
"轩辕传奇手游": "轩辕传奇手游",
|
|
||||||
"军棋": "军棋",
|
|
||||||
"新大话西游3": "新大话西游3",
|
|
||||||
"斗罗大陆-斗神再临": "斗罗大陆-斗神再临",
|
|
||||||
"使命召唤:黑色行动4": "使命召唤:黑色行动4",
|
|
||||||
"猎魂觉醒": "猎魂觉醒",
|
|
||||||
"第九大陆": "第九大陆",
|
|
||||||
"对马岛之魂": "对马岛之魂",
|
|
||||||
"剑网1:归来": "剑网1:归来",
|
|
||||||
"疾风之刃": "疾风之刃",
|
|
||||||
"神武2": "神武2",
|
|
||||||
"口袋觉醒": "口袋觉醒",
|
|
||||||
"天堂": "天堂",
|
|
||||||
"流星群侠传": "流星群侠传",
|
|
||||||
"我叫MT4": "我叫MT4",
|
|
||||||
"飙酷车神": "飙酷车神",
|
|
||||||
"看门狗:军团": "看门狗:军团",
|
|
||||||
"绝区零": "绝区零",
|
|
||||||
"全球使命": "全球使命",
|
|
||||||
"泰坦陨落": "泰坦陨落",
|
|
||||||
"武魂2": "武魂2",
|
|
||||||
"三国之刃": "三国之刃",
|
|
||||||
"深海迷航": "深海迷航",
|
|
||||||
"宝可梦:剑盾": "宝可梦:剑盾",
|
|
||||||
"冒险男爵": "冒险男爵",
|
|
||||||
"龙武手游": "龙武手游",
|
|
||||||
"传奇天下": "传奇天下",
|
|
||||||
"热血江湖2": "热血江湖2",
|
|
||||||
"魔侠传": "魔侠传",
|
|
||||||
"火炬之光:无限": "火炬之光:无限",
|
|
||||||
"封印者": "封印者",
|
|
||||||
"新盗墓笔记": "新盗墓笔记",
|
|
||||||
"一拳超人:最强之男": "一拳超人:最强之男",
|
|
||||||
"剑侠情缘2剑歌行": "剑侠情缘2剑歌行",
|
|
||||||
"凡人修仙传Online": "凡人修仙传Online",
|
|
||||||
"非人学园": "非人学园",
|
|
||||||
"全球行动": "全球行动",
|
|
||||||
"仙剑奇侠传五": "仙剑奇侠传五",
|
|
||||||
"流放者柯南": "流放者柯南",
|
|
||||||
"封神榜(国际版)": "封神榜(国际版)",
|
|
||||||
"热血街篮": "热血街篮",
|
|
||||||
"石油骚动": "石油骚动",
|
|
||||||
"奇葩战斗家": "奇葩战斗家",
|
|
||||||
"传世无双": "传世无双",
|
|
||||||
"流星蝴蝶剑": "流星蝴蝶剑",
|
|
||||||
"武装突袭": "武装突袭",
|
|
||||||
"蛇蛇争霸": "蛇蛇争霸",
|
|
||||||
"环世界": "环世界",
|
|
||||||
"极品飞车Online": "极品飞车Online",
|
|
||||||
"霸刀群侠传online": "霸刀群侠传online",
|
|
||||||
"保卫萝卜3": "保卫萝卜3",
|
|
||||||
"渡神记": "渡神记",
|
|
||||||
"EVE星战前夜:无烬星河": "EVE星战前夜:无烬星河",
|
|
||||||
"幽灵行动:荒野": "幽灵行动:荒野",
|
|
||||||
"永恒轮回": "永恒轮回",
|
|
||||||
"三国志:幻想大陆": "三国志:幻想大陆",
|
|
||||||
"虎牙吃鸡": "虎牙吃鸡",
|
|
||||||
"天使之战": "天使之战",
|
|
||||||
"绿色征途": "绿色征途",
|
|
||||||
"炫舞时代": "炫舞时代",
|
|
||||||
"霓虹深渊": "霓虹深渊",
|
|
||||||
"四海兄弟": "四海兄弟",
|
|
||||||
"无尽传奇": "无尽传奇",
|
|
||||||
"归家异途": "归家异途",
|
|
||||||
"魔力宝贝:旅人": "魔力宝贝:旅人",
|
|
||||||
"逆境求生": "逆境求生",
|
|
||||||
"猫之城": "猫之城",
|
|
||||||
"英雄三国": "英雄三国",
|
|
||||||
"新游推荐": "新游推荐",
|
|
||||||
"赤壁": "赤壁",
|
|
||||||
"成吉思汗怀旧版": "成吉思汗怀旧版",
|
|
||||||
"无人深空": "无人深空",
|
|
||||||
"战争怒吼": "战争怒吼",
|
|
||||||
"街机游戏": "街机游戏",
|
|
||||||
"一刀流": "一刀流",
|
|
||||||
"米加小镇": "米加小镇",
|
|
||||||
"剑网3指尖对弈": "剑网3指尖对弈",
|
|
||||||
"风云龙战天下": "风云龙战天下",
|
|
||||||
"时空猎人": "时空猎人",
|
|
||||||
"天国:拯救": "天国:拯救",
|
|
||||||
"荣耀大天使": "荣耀大天使",
|
|
||||||
"龙与家园": "龙与家园",
|
|
||||||
"橙光": "橙光",
|
|
||||||
"斗罗大陆:武魂觉醒": "斗罗大陆:武魂觉醒",
|
|
||||||
"元气骑士": "元气骑士",
|
|
||||||
"无尽神域": "无尽神域",
|
|
||||||
"新水浒Q传": "新水浒Q传",
|
|
||||||
"月圆之夜": "月圆之夜",
|
|
||||||
"台球大师": "台球大师",
|
|
||||||
"圣境传说": "圣境传说",
|
|
||||||
"梦幻龙族II": "梦幻龙族II",
|
|
||||||
"仙魔决": "仙魔决",
|
|
||||||
"欢喜斗地主": "欢喜斗地主",
|
|
||||||
"未来之役": "未来之役",
|
|
||||||
"天使纪元": "天使纪元",
|
|
||||||
"天堂2:血盟": "天堂2:血盟",
|
|
||||||
"三国群英传7": "三国群英传7",
|
|
||||||
"玄中记": "玄中记",
|
|
||||||
"我在江湖之神魔道": "我在江湖之神魔道",
|
|
||||||
"战地之王": "战地之王",
|
|
||||||
"热血三国": "热血三国",
|
|
||||||
"刀塔传奇": "刀塔传奇",
|
|
||||||
"神雕侠侣2": "神雕侠侣2",
|
|
||||||
"成吉思汗3": "成吉思汗3",
|
|
||||||
"全球使命3": "全球使命3",
|
|
||||||
"九界": "九界",
|
|
||||||
"劲舞团": "劲舞团",
|
|
||||||
"皇帝成长计划2": "皇帝成长计划2",
|
|
||||||
"乱世王者": "乱世王者",
|
|
||||||
"火星求生": "火星求生",
|
|
||||||
"Party Animals": "Party Animals",
|
|
||||||
"这是我的战争": "这是我的战争",
|
|
||||||
"山海经之魔蛙传说": "山海经之魔蛙传说",
|
|
||||||
"DJMAX三部曲": "DJMAX三部曲",
|
|
||||||
"足球小将": "足球小将",
|
|
||||||
"重生细胞": "重生细胞",
|
|
||||||
"狂野飙车9:竞速传奇": "狂野飙车9:竞速传奇",
|
|
||||||
"漫威蜘蛛侠": "漫威蜘蛛侠",
|
|
||||||
"文明6": "文明6",
|
|
||||||
"反恐精英Online 2": "反恐精英Online 2",
|
|
||||||
"街头篮球": "街头篮球",
|
|
||||||
"圣斗士星矢(腾讯)": "圣斗士星矢(腾讯)",
|
|
||||||
"战舰世界闪击战": "战舰世界闪击战",
|
|
||||||
"漫漫长夜": "漫漫长夜",
|
|
||||||
"缺氧": "缺氧",
|
|
||||||
"星露谷物语": "星露谷物语",
|
|
||||||
"蘑菇战争2": "蘑菇战争2",
|
|
||||||
"神之浩劫": "神之浩劫",
|
|
||||||
"虎豹骑": "虎豹骑",
|
|
||||||
"全面战争:阿提拉": "全面战争:阿提拉",
|
|
||||||
"皇家塔防": "皇家塔防",
|
|
||||||
"泰拉瑞亚手游": "泰拉瑞亚手游",
|
|
||||||
"乱世逐鹿": "乱世逐鹿",
|
|
||||||
"戴森球计划": "戴森球计划",
|
|
||||||
"提灯与地下城": "提灯与地下城",
|
|
||||||
"禁闭求生": "禁闭求生",
|
|
||||||
"动物派对手游": "动物派对手游",
|
|
||||||
"新世界": "新世界",
|
|
||||||
"喷射战士3": "喷射战士3",
|
|
||||||
"无限法则": "无限法则",
|
|
||||||
"魔渊之刃": "魔渊之刃",
|
|
||||||
"十二之天系列": "十二之天系列",
|
|
||||||
"魔之精灵": "魔之精灵",
|
|
||||||
"马里奥专区": "马里奥专区",
|
|
||||||
"星之海洋5": "星之海洋5",
|
|
||||||
"死亡细胞": "死亡细胞",
|
|
||||||
"狩猎时刻": "狩猎时刻",
|
|
||||||
"欢乐升级": "欢乐升级",
|
|
||||||
"围棋": "围棋",
|
|
||||||
"失落的王座": "失落的王座",
|
|
||||||
"全境封锁": "全境封锁",
|
|
||||||
"伤害世界": "伤害世界",
|
|
||||||
"超神传": "超神传",
|
|
||||||
"恶魔之魂": "恶魔之魂",
|
|
||||||
"战双:帕弥什": "战双:帕弥什",
|
|
||||||
"剑网3:指尖江湖": "剑网3:指尖江湖",
|
|
||||||
"雨中冒险": "雨中冒险",
|
|
||||||
"哈迪斯": "哈迪斯",
|
|
||||||
"自由幻想手游": "自由幻想手游",
|
|
||||||
"反恐精英": "反恐精英",
|
|
||||||
"斗破仙途": "斗破仙途",
|
|
||||||
"蜘蛛侠系列": "蜘蛛侠系列",
|
|
||||||
"魔法门之英雄无敌系列": "魔法门之英雄无敌系列",
|
|
||||||
"武魂": "武魂",
|
|
||||||
"骑士物语": "骑士物语",
|
|
||||||
"剑与家园": "剑与家园",
|
|
||||||
"三界争锋": "三界争锋",
|
|
||||||
"金星登陆器": "金星登陆器",
|
|
||||||
"SD敢达Online": "SD敢达Online",
|
|
||||||
"马里奥赛车8": "马里奥赛车8",
|
|
||||||
"最终幻想系列": "最终幻想系列",
|
|
||||||
"烽火三国": "烽火三国",
|
|
||||||
"永劫无间手游": "永劫无间手游",
|
|
||||||
"航海王:启航": "航海王:启航",
|
|
||||||
"女鬼桥:开魂路": "女鬼桥:开魂路",
|
|
||||||
"武侠乂": "武侠乂",
|
|
||||||
"龙武": "龙武",
|
|
||||||
"造梦西游4手机版": "造梦西游4手机版",
|
|
||||||
"火影忍者:究极风暴系列": "火影忍者:究极风暴系列",
|
|
||||||
"Steamcraft": "Steamcraft",
|
|
||||||
"忍者村大战2": "忍者村大战2",
|
|
||||||
"新挑战": "新挑战",
|
|
||||||
"圣斗士星矢ol": "圣斗士星矢ol",
|
|
||||||
"仙之痕手游": "仙之痕手游",
|
|
||||||
"挨饿荒野": "挨饿荒野",
|
|
||||||
"攻城掠地": "攻城掠地",
|
|
||||||
"龙之国物语": "龙之国物语",
|
|
||||||
"戎马丹心之汉匈决战": "戎马丹心之汉匈决战",
|
|
||||||
"仙剑奇侠传OL手游": "仙剑奇侠传OL手游",
|
|
||||||
"群侠传": "群侠传",
|
|
||||||
"美丽水世界": "美丽水世界",
|
|
||||||
"斩魂": "斩魂",
|
|
||||||
"闪克": "闪克",
|
|
||||||
"蚁族崛起": "蚁族崛起",
|
|
||||||
"口袋妖怪": "口袋妖怪",
|
|
||||||
"全民斩仙": "全民斩仙",
|
|
||||||
"航海世纪": "航海世纪",
|
|
||||||
"野兽传奇": "野兽传奇",
|
|
||||||
"龙与地下城Online": "龙与地下城Online",
|
|
||||||
"小缇娜的奇幻之地": "小缇娜的奇幻之地",
|
|
||||||
"紫塞秋风": "紫塞秋风",
|
|
||||||
"荒野行动": "荒野行动",
|
|
||||||
"保卫萝卜2": "保卫萝卜2",
|
|
||||||
"战神": "战神",
|
|
||||||
"黄易群侠传2": "黄易群侠传2",
|
|
||||||
"全面战争:竞技场": "全面战争:竞技场",
|
|
||||||
"玄真道": "玄真道",
|
|
||||||
"蜀山剑侠传": "蜀山剑侠传",
|
|
||||||
"古剑奇谭3": "古剑奇谭3",
|
|
||||||
"有杀气童话2": "有杀气童话2",
|
|
||||||
"神将三国": "神将三国",
|
|
||||||
"原始征途": "原始征途",
|
|
||||||
"斗斗堂": "斗斗堂",
|
|
||||||
"领地人生": "领地人生",
|
|
||||||
"小森生活": "小森生活",
|
|
||||||
"塞尔达传说:荒野之息": "塞尔达传说:荒野之息",
|
|
||||||
"国战ONLINE": "国战ONLINE",
|
|
||||||
"真武传": "真武传",
|
|
||||||
"轩辕剑外传:云之遥": "轩辕剑外传:云之遥",
|
|
||||||
"禅游斗地主": "禅游斗地主",
|
|
||||||
"梦幻模拟战": "梦幻模拟战",
|
|
||||||
"大唐2": "大唐2",
|
|
||||||
"重力": "重力",
|
|
||||||
"蜀山神话": "蜀山神话",
|
|
||||||
"微软模拟飞行2020": "微软模拟飞行2020",
|
|
||||||
"狙击手:幽灵战士": "狙击手:幽灵战士",
|
|
||||||
"飞龙在天传奇": "飞龙在天传奇",
|
|
||||||
"闪烁之光": "闪烁之光",
|
|
||||||
"火影小时代": "火影小时代",
|
|
||||||
"狂刃": "狂刃",
|
|
||||||
"复仇者联盟": "复仇者联盟",
|
|
||||||
"神佑释放": "神佑释放",
|
|
||||||
"全球使命(国际版)": "全球使命(国际版)",
|
|
||||||
"环形战争": "环形战争",
|
|
||||||
"新射雕群侠传": "新射雕群侠传",
|
|
||||||
"远古战争国度(古域之战)": "远古战争国度(古域之战)",
|
|
||||||
"龙族幻想": "龙族幻想",
|
|
||||||
"剑侠情缘手游": "剑侠情缘手游",
|
|
||||||
"剑与远征手游": "剑与远征手游",
|
|
||||||
"创世理想乡": "创世理想乡",
|
|
||||||
"幻想神域": "幻想神域",
|
|
||||||
"警匪杀": "警匪杀",
|
|
||||||
"地城之光": "地城之光",
|
|
||||||
"新惊天动地": "新惊天动地",
|
|
||||||
"一剑斩仙": "一剑斩仙",
|
|
||||||
"FF14": "FF14",
|
|
||||||
"不良人2": "不良人2",
|
|
||||||
"坎公骑冠剑": "坎公骑冠剑",
|
|
||||||
"瑞奇与叮当": "瑞奇与叮当",
|
|
||||||
"最终幻想:起源": "最终幻想:起源",
|
|
||||||
"玄天之剑": "玄天之剑",
|
|
||||||
"逃脱者2": "逃脱者2",
|
|
||||||
"远征军:征服者": "远征军:征服者",
|
|
||||||
"黑暗领域2": "黑暗领域2",
|
|
||||||
"精灵与萤火意志": "精灵与萤火意志",
|
|
||||||
"三国": "三国",
|
|
||||||
"神界2": "神界2",
|
|
||||||
"诺亚之心": "诺亚之心",
|
|
||||||
"梦想世界3手游": "梦想世界3手游",
|
|
||||||
"一起玩农场": "一起玩农场",
|
|
||||||
"EVE Online": "EVE Online",
|
|
||||||
"龙族血统": "龙族血统",
|
|
||||||
"切尔诺贝利突击队": "切尔诺贝利突击队",
|
|
||||||
"蜀门": "蜀门",
|
|
||||||
"鹿鼎记": "鹿鼎记",
|
|
||||||
"五子棋": "五子棋",
|
|
||||||
"格斗游戏": "格斗游戏",
|
|
||||||
"环绕走廊": "环绕走廊",
|
|
||||||
"天穗之咲稻姬": "天穗之咲稻姬",
|
|
||||||
"重写三国志": "重写三国志",
|
|
||||||
"Factorio": "Factorio",
|
|
||||||
"废品机械师": "废品机械师",
|
|
||||||
"血染钟楼": "血染钟楼",
|
|
||||||
"神魔": "神魔",
|
|
||||||
"逆战手游": "逆战手游",
|
|
||||||
"大唐仙妖劫": "大唐仙妖劫",
|
|
||||||
"猎杀:恶魔熔炉": "猎杀:恶魔熔炉",
|
|
||||||
"头文字D": "头文字D",
|
|
||||||
"暗黑血统2": "暗黑血统2",
|
|
||||||
"奥日与黑暗森林": "奥日与黑暗森林",
|
|
||||||
"吞食天地3": "吞食天地3",
|
|
||||||
"风暴英雄": "风暴英雄",
|
|
||||||
"最后一炮": "最后一炮",
|
|
||||||
"人类一败涂地": "人类一败涂地",
|
|
||||||
"轩辕剑三:天之痕": "轩辕剑三:天之痕",
|
|
||||||
"黑暗地带:51区": "黑暗地带:51区",
|
|
||||||
"异能都市": "异能都市",
|
|
||||||
"订阅": "订阅",
|
|
||||||
"直播": "直播",
|
|
||||||
"赛事": "赛事",
|
|
||||||
"网游": "网游",
|
|
||||||
"单机": "单机",
|
|
||||||
"娱乐": "娱乐",
|
|
||||||
"手游": "手游",
|
|
||||||
"QQ飞车全国公开赛端游赛道": "QQ飞车全国公开赛端游赛道",
|
|
||||||
"暴雪游戏频道": "暴雪游戏频道",
|
|
||||||
"LCK夏季赛": "LCK夏季赛",
|
|
||||||
"英雄联盟": "英雄联盟",
|
|
||||||
"LOL云顶之弈": "LOL云顶之弈",
|
|
||||||
"穿越火线": "穿越火线",
|
|
||||||
"DNF": "DNF",
|
|
||||||
"射击综合": "射击综合",
|
|
||||||
"炉石传说": "炉石传说",
|
|
||||||
"DOTA2": "DOTA2",
|
|
||||||
"魔兽争霸3": "魔兽争霸3",
|
|
||||||
"CS:GO": "CS:GO",
|
|
||||||
"逆战": "逆战",
|
|
||||||
"生死狙击2": "生死狙击2",
|
|
||||||
"QQ飞车": "QQ飞车",
|
|
||||||
"天天吃鸡": "天天吃鸡",
|
|
||||||
"主机游戏": "主机游戏",
|
|
||||||
"我的世界": "我的世界",
|
|
||||||
"方舟": "方舟",
|
|
||||||
"永劫无间": "永劫无间",
|
|
||||||
"逃离塔科夫": "逃离塔科夫",
|
|
||||||
"怀旧游戏": "怀旧游戏",
|
|
||||||
"互动点播": "互动点播",
|
|
||||||
"Dread Hunger": "Dread Hunger",
|
|
||||||
"星秀": "星秀",
|
|
||||||
"户外": "户外",
|
|
||||||
"二次元": "二次元",
|
|
||||||
"一起看": "一起看",
|
|
||||||
"美食": "美食",
|
|
||||||
"颜值": "颜值",
|
|
||||||
"交友": "交友",
|
|
||||||
"体育": "体育",
|
|
||||||
"组队": "组队",
|
|
||||||
"王者荣耀": "王者荣耀",
|
|
||||||
"和平精英": "和平精英",
|
|
||||||
"LOL电竞经理": "LOL电竞经理",
|
|
||||||
"LOL手游": "LOL手游",
|
|
||||||
"新游广场": "新游广场",
|
|
||||||
"金铲铲之战": "金铲铲之战",
|
|
||||||
"暗区突围": "暗区突围",
|
|
||||||
"火影忍者手游": "火影忍者手游",
|
|
||||||
"CF手游": "CF手游",
|
|
||||||
"棋牌休闲": "棋牌休闲",
|
|
||||||
"原神": "原神",
|
|
||||||
"综合手游": "综合手游",
|
|
||||||
"暗黑破坏神:不朽": "暗黑破坏神:不朽",
|
|
||||||
"环形战争": "环形战争",
|
|
||||||
"二次元手游": "二次元手游",
|
|
||||||
"下载客户端": "下载客户端",
|
|
||||||
"我要直播": "我要直播"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name': k,
|
|
||||||
'type_id': cateManual[k]
|
|
||||||
})
|
|
||||||
|
|
||||||
result['class'] = classes
|
|
||||||
if (filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = 'http://live.yj1211.work/api/live/getRecommendByPlatformArea?platform=huya&size=20&area={0}&page={1}'.format(tid, pg)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
content = rsp.text
|
|
||||||
jo = json.loads(content)
|
|
||||||
videos = []
|
|
||||||
vodList = jo['data']
|
|
||||||
for vod in vodList:
|
|
||||||
aid = (vod['roomId']).strip()
|
|
||||||
title = vod['roomName'].strip()
|
|
||||||
img = vod['roomPic'].strip()
|
|
||||||
remark = (vod['categoryName']).strip()
|
|
||||||
videos.append({
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": img,
|
|
||||||
"vod_remarks": remark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
def detailContent(self,array):
|
|
||||||
aid = array[0]
|
|
||||||
url = "http://live.yj1211.work/api/live/getRoomInfo?platform=huya&roomId={0}".format(aid)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
title = jo['roomName']
|
|
||||||
pic = jo['roomPic']
|
|
||||||
desc = str(jo['online'])
|
|
||||||
dire = jo['ownerName']
|
|
||||||
typeName = jo['categoryName']
|
|
||||||
remark = jo['categoryName']
|
|
||||||
vod = {
|
|
||||||
"vod_id": aid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": typeName,
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": remark,
|
|
||||||
"vod_actor": '在线人数:' + desc,
|
|
||||||
"vod_director": dire,
|
|
||||||
"vod_content": ""
|
|
||||||
}
|
|
||||||
playUrl = '原画' + '${0}#'.format(aid)
|
|
||||||
vod['vod_play_from'] = '虎牙直播'
|
|
||||||
vod['vod_play_url'] = playUrl
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
result = {}
|
|
||||||
|
|
||||||
url = 'https://mp.huya.com/cache.php?m=Live&do=profileRoom&roomid={0}'.format(id)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
jRoot = json.loads(rsp.text)
|
|
||||||
jo = jRoot['data']
|
|
||||||
ja = jo['stream']['baseSteamInfoList'][0]['sStreamName']
|
|
||||||
url = 'http://txtest-xp2p.p2p.huya.com/src/' + ja + '.xs?ratio=4000'
|
|
||||||
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = url
|
|
||||||
result["header"] = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
|
|
||||||
}
|
|
||||||
result["contentType"] = 'video/x-flv'
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
def localProxy(self,param):
|
|
||||||
action = {
|
|
||||||
'url':'',
|
|
||||||
'header':'',
|
|
||||||
'param':'',
|
|
||||||
'type':'string',
|
|
||||||
'after':''
|
|
||||||
}
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
File diff suppressed because one or more lines are too long
@ -1,230 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
# !/usr/bin/python
|
|
||||||
import sys
|
|
||||||
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import json
|
|
||||||
import time
|
|
||||||
import base64
|
|
||||||
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "乐猪"
|
|
||||||
|
|
||||||
def init(self, extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
|
|
||||||
def isVideoFormat(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def homeContent(self, filter):
|
|
||||||
# http://www.lezhutv.com/
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"电影": "1",
|
|
||||||
"连续剧": "2",
|
|
||||||
"动漫": "4",
|
|
||||||
"综艺": "3",
|
|
||||||
"韩剧": "12",
|
|
||||||
"美剧": "15"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name': k,
|
|
||||||
'type_id': cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
if (filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
|
|
||||||
def homeVideoContent(self):
|
|
||||||
rsp = self.fetch("http://www.lezhutv.com/", headers=self.header)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
vodList = root.xpath("//div[@class='tbox2']/ul[@class='tbox_m2']/li[@class='vbox']/a")
|
|
||||||
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
name = vod.xpath("./@title")[0]
|
|
||||||
pic = vod.xpath("./@data-original")[0]
|
|
||||||
mark = vod.xpath(".//span/text()")[0]
|
|
||||||
sid = vod.xpath("./@href")[0]
|
|
||||||
sid = self.regStr(sid, "/detail/(\\S+).html")
|
|
||||||
videos.append({
|
|
||||||
"vod_id": sid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": mark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list': videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def categoryContent(self, tid, pg, filter, extend):
|
|
||||||
result = {}
|
|
||||||
if 'id' not in extend.keys():
|
|
||||||
extend['id'] = tid
|
|
||||||
extend['page'] = pg
|
|
||||||
filterParams = ["id", "area", "by", "class", "", "", "", "", "page", "", "", "year"]
|
|
||||||
params = ["", "", "", "", "", "", "", "", "", "", "", ""]
|
|
||||||
for idx in range(len(filterParams)):
|
|
||||||
fp = filterParams[idx]
|
|
||||||
if fp in extend.keys():
|
|
||||||
params[idx] = extend[fp]
|
|
||||||
suffix = '-'.join(params)
|
|
||||||
url = 'http://www.lezhutv.com/type/{0}.html'.format(suffix)
|
|
||||||
|
|
||||||
rsp = self.fetch(url, headers=self.header)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
vodList = root.xpath("//div[@class='tbox2']/ul[@class='tbox_m2']/li[@class='vbox']/a")
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
name = vod.xpath("./@title")[0]
|
|
||||||
pic = vod.xpath("./@data-original")[0]
|
|
||||||
mark = vod.xpath(".//span/text()")[0]
|
|
||||||
sid = vod.xpath("./@href")[0]
|
|
||||||
sid = self.regStr(sid, "/detail/(\\S+).html")
|
|
||||||
videos.append({
|
|
||||||
"vod_id": sid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": mark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def detailContent(self, array):
|
|
||||||
tid = array[0]
|
|
||||||
url = 'http://www.lezhutv.com/detail/{0}.html'.format(tid)
|
|
||||||
rsp = self.fetch(url, headers=self.header)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
node = root.xpath("//div[@class='data']")[0]
|
|
||||||
title = node.xpath(".//h4/text()")[0]
|
|
||||||
pic = root.xpath(".//div[@class='img item-lazy']/@data-original")[0]
|
|
||||||
vod = {
|
|
||||||
"vod_id": tid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": "",
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": "",
|
|
||||||
"vod_actor": "",
|
|
||||||
"vod_director": "",
|
|
||||||
"vod_content": ""
|
|
||||||
}
|
|
||||||
infoArray = node.xpath(".//div[@class='module-info-item']")
|
|
||||||
for info in infoArray:
|
|
||||||
content = info.xpath('string(.)')
|
|
||||||
# if content.startswith('分類'):
|
|
||||||
# vod['type_name'] = content
|
|
||||||
# if content.startswith('年份'):
|
|
||||||
# vod['vod_year'] = content
|
|
||||||
# if content.startswith('地区'):
|
|
||||||
# vod['vod_area'] = content
|
|
||||||
#if content.startswith('片长'):
|
|
||||||
# vod['vod_remarks'] = content.replace('\n', '').replace('\t', '')
|
|
||||||
if content.startswith('主演'):
|
|
||||||
vod['vod_actor'] = content.replace('\n', '').replace('\t', '')
|
|
||||||
if content.startswith('导演'):
|
|
||||||
vod['vod_director'] = content.replace('\n', '').replace('\t', '')
|
|
||||||
# if content.startswith('剧情'):
|
|
||||||
# vod['vod_content'] = content.replace('\n','').replace('\t','')
|
|
||||||
vod['vod_content'] = root.xpath(".//div[@class='tbox_js']/text()")[0]
|
|
||||||
vod_play_from = '$$$'
|
|
||||||
playFrom = []
|
|
||||||
vodHeader = root.xpath(".//div[@class='tbox2 tabs']/div/h3/text()")
|
|
||||||
|
|
||||||
for v in vodHeader:
|
|
||||||
playFrom.append(v.strip())
|
|
||||||
vod_play_from = vod_play_from.join(playFrom)
|
|
||||||
|
|
||||||
vod_play_url = '$$$'
|
|
||||||
playList = []
|
|
||||||
vodList = root.xpath(".//div[@class='tbox2 tabs']/div[@class='tabs_block2']/ul")
|
|
||||||
|
|
||||||
for vl in vodList:
|
|
||||||
vodItems = []
|
|
||||||
aList = vl.xpath('./li/a')
|
|
||||||
for tA in aList:
|
|
||||||
href = tA.xpath('./@href')[0]
|
|
||||||
name = tA.xpath('.//text()')[0]
|
|
||||||
tId = self.regStr(href, '/play/(\\S+).html')
|
|
||||||
vodItems.append(name + "$" + tId)
|
|
||||||
joinStr = '#'
|
|
||||||
joinStr = joinStr.join(vodItems)
|
|
||||||
playList.append(joinStr)
|
|
||||||
vod_play_url = vod_play_url.join(playList)
|
|
||||||
|
|
||||||
vod['vod_play_from'] = vod_play_from
|
|
||||||
vod['vod_play_url'] = vod_play_url
|
|
||||||
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def searchContent(self, key, quick):
|
|
||||||
url = "http://www.lezhutv.com/index.php?m=vod-search&wd={0}".format(key)
|
|
||||||
rsp = self.fetch(url, headers=self.header)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
vodList = root.xpath("//div[@class='tbox']/ul[@class='tbox_m']/li[@class='vbox']/a")
|
|
||||||
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
name = vod.xpath("./@title")[0]
|
|
||||||
pic = vod.xpath("./@data-original")[0]
|
|
||||||
mark = vod.xpath(".//span/text()")[0]
|
|
||||||
sid = vod.xpath("./@href")[0]
|
|
||||||
sid = self.regStr(sid, "/detail/(\\S+).html")
|
|
||||||
videos.append({
|
|
||||||
"vod_id": sid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": mark
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list': videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self, flag, id, vipFlags):
|
|
||||||
# https://meijuchong.cc/static/js/playerconfig.js
|
|
||||||
result = {}
|
|
||||||
url = 'http://www.lezhutv.com/play/{0}.html'.format(id)
|
|
||||||
rsp = self.fetch(url, headers=self.header)
|
|
||||||
view_path = self.regStr(rsp.text, 'var view_path = \'(\\S+)\';')
|
|
||||||
result["parse"] = 1
|
|
||||||
result["playUrl"] = 'http://www.lezhutv.com/hls2/index.php?url='
|
|
||||||
result["url"] = view_path
|
|
||||||
result["header"] = ''
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {"1":[{"key":"id","name":"类型","value":[{"n":"全部","v":"1"},{"n":"动作","v":"6"},{"n":"喜剧","v":"7"},{"n":"爱情","v":"8"},{"n":"科幻","v":"9"},{"n":"恐怖","v":"10"},{"n":"剧情","v":"11"},{"n":"战争","v":"12"},{"n":"动画","v":"23"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"喜剧","v":"喜剧"},{"n":"爱情","v":"爱情"},{"n":"恐怖","v":"恐怖"},{"n":"动作","v":"动作"},{"n":"科幻","v":"科幻"},{"n":"剧情","v":"剧情"},{"n":"战争","v":"战争"},{"n":"警匪","v":"警匪"},{"n":"犯罪","v":"犯罪"},{"n":"动画","v":"动画"},{"n":"奇幻","v":"奇幻"},{"n":"武侠","v":"武侠"},{"n":"冒险","v":"冒险"},{"n":"枪战","v":"枪战"},{"n":"恐怖","v":"恐怖"},{"n":"悬疑","v":"悬疑"},{"n":"惊悚","v":"惊悚"},{"n":"经典","v":"经典"},{"n":"青春","v":"青春"},{"n":"文艺","v":"文艺"},{"n":"微电影","v":"微电影"},{"n":"古装","v":"古装"},{"n":"历史","v":"历史"},{"n":"运动","v":"运动"},{"n":"农村","v":"农村"},{"n":"儿童","v":"儿童"},{"n":"网络电影","v":"网络电影"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国香港","v":"中国香港"},{"n":"中国台湾","v":"中国台湾"},{"n":"美国","v":"美国"},{"n":"法国","v":"法国"},{"n":"英国","v":"英国"},{"n":"日本","v":"日本"},{"n":"韩国","v":"韩国"},{"n":"德国","v":"德国"},{"n":"泰国","v":"泰国"},{"n":"印度","v":"印度"},{"n":"意大利","v":"意大利"},{"n":"西班牙","v":"西班牙"},{"n":"加拿大","v":"加拿大"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
|
||||||
"2":[{"key":"id","name":"类型","value":[{"n":"全部","v":"2"},{"n":"国产剧","v":"13"},{"n":"港台剧","v":"14"},{"n":"日韩剧","v":"15"},{"n":"欧美剧","v":"16"},{"n":"纪 录片","v":"21"},{"n":"泰国剧","v":"24"}]},{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"古装","v":"古装"},{"n":"战争","v":"战争"},{"n":"青春偶像","v":"青春偶像"},{"n":"喜剧","v":"喜剧"},{"n":"家庭","v":"家庭"},{"n":"犯罪","v":"犯罪"},{"n":"动作","v":"动作"},{"n":"奇幻","v":"奇幻"},{"n":"剧情","v":"剧情"},{"n":"历史","v":"历史"},{"n":"经典","v":"经典"},{"n":"乡村","v":"乡村"},{"n":"情景","v":"情景"},{"n":"商战","v":"商战"},{"n":"网剧","v":"网剧"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国大陆","v":"中国大陆"},{"n":"中国台湾","v":"中国台湾"},{"n":"中国香港","v":"中国香港"},{"n":"韩国","v":"韩国"},{"n":"日本","v":"日本"},{"n":"美国","v":"美国"},{"n":"泰国","v":"泰国"},{"n":"英国","v":"英国"},{"n":"新加坡","v":"新加坡"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
|
||||||
"4":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"情感","v":"情感"},{"n":"科幻","v":"科幻"},{"n":"热血","v":"热血"},{"n":"推理","v":"推理"},{"n":"搞笑","v":"搞笑"},{"n":"冒险","v":" 冒险"},{"n":"萝莉","v":"萝莉"},{"n":"校园","v":"校园"},{"n":"动作","v":"动作"},{"n":"机战","v":"机战"},{"n":"运动","v":"运动"},{"n":"战争","v":"战争"},{"n":"少年","v":"少年"},{"n":"少女","v":"少女"},{"n":" 社会","v":"社会"},{"n":"原创","v":"原创"},{"n":"亲子","v":"亲子"},{"n":"益智","v":"益智"},{"n":"励志","v":"励志"},{"n":"其他","v":"其他"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"中国","v":"中国"},{"n":"日本","v":"日本"},{"n":"欧美","v":"欧美"},{"n":"其他","v":"其他"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}],
|
|
||||||
"3":[{"key":"class","name":"剧情","value":[{"n":"全部","v":""},{"n":"选秀","v":"选秀"},{"n":"情感","v":"情感"},{"n":"访谈","v":"访谈"},{"n":"播报","v":"播报"},{"n":"旅游","v":"旅游"},{"n":"音乐","v":"音乐"},{"n":"美食","v":"美食"},{"n":"纪实","v":"纪实"},{"n":"曲艺","v":"曲艺"},{"n":"生活","v":"生活"},{"n":"游戏互动","v":"游戏互动"},{"n":"财经","v":"财经"},{"n":"求职","v":"求职"}]},{"key":"area","name":"地区","value":[{"n":"全部","v":""},{"n":"内地","v":"内地"},{"n":"港台","v":"港台"},{"n":"日韩","v":"日韩"},{"n":"欧美","v":"欧美"}]},{"key":"year","name":"年份","value":[{"n":"全部","v":""},{"n":"2022","v":"2022"},{"n":"2021","v":"2021"},{"n":"2020","v":"2020"},{"n":"2019","v":"2019"},{"n":"2018","v":"2018"},{"n":"2017","v":"2017"},{"n":"2016","v":"2016"},{"n":"2015","v":"2015"},{"n":"2014","v":"2014"},{"n":"2013","v":"2013"},{"n":"2012","v":"2012"},{"n":"2011","v":"2011"},{"n":"2010","v":"2010"},{"n":"2009","v":"2009"},{"n":"2008","v":"2008"},{"n":"2007","v":"2007"},{"n":"2006","v":"2006"},{"n":"2005","v":"2005"},{"n":"2004","v":"2004"}]},{"key":"by","name":"排序","value":[{"n":"最新","v":"time"},{"n":"最热","v":"hits"},{"n":"评分","v":"score"}]}]}
|
|
||||||
}
|
|
||||||
|
|
||||||
header = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
|
|
||||||
}
|
|
||||||
|
|
||||||
def localProxy(self, param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,92 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getDependence(self):
|
|
||||||
return ['py_ali']
|
|
||||||
def getName(self):
|
|
||||||
return "py_pansou"
|
|
||||||
def init(self,extend):
|
|
||||||
self.ali = extend[0]
|
|
||||||
print("============py_pansou============")
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def detailContent(self,array):
|
|
||||||
tid = array[0]
|
|
||||||
print(self.getName())
|
|
||||||
pattern = '(https:\\/\\/www.aliyundrive.com\\/s\\/[^\\\"]+)'
|
|
||||||
url = self.regStr(tid,pattern)
|
|
||||||
if len(url) > 0:
|
|
||||||
return self.ali.detailContent(array)
|
|
||||||
|
|
||||||
rsp = self.fetch('https://www.alipansou.com'+tid)
|
|
||||||
url = self.regStr(rsp.text,pattern)
|
|
||||||
if len(url) == 0:
|
|
||||||
return ""
|
|
||||||
url = url.replace('\\','')
|
|
||||||
newArray = [url]
|
|
||||||
print(newArray)
|
|
||||||
return self.ali.detailContent(newArray)
|
|
||||||
|
|
||||||
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
map = {
|
|
||||||
'7':'文件夹',
|
|
||||||
'1':'视频'
|
|
||||||
}
|
|
||||||
ja = []
|
|
||||||
for tKey in map.keys():
|
|
||||||
url = "https://www.alipansou.com/search?k={0}&t={1}".format(key,tKey)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
aList = root.xpath("//van-row/a")
|
|
||||||
for a in aList:
|
|
||||||
title = ''
|
|
||||||
# title = a.xpath('string(.//template/div)')
|
|
||||||
# title = self.cleanText(title).strip()
|
|
||||||
|
|
||||||
divList = a.xpath('.//template/div')
|
|
||||||
for div in divList:
|
|
||||||
t = div.xpath('string(.)')
|
|
||||||
t = self.cleanText(t).strip()
|
|
||||||
title = title + t
|
|
||||||
if key in title:
|
|
||||||
pic = 'https://www.alipansou.com'+ self.xpText(a,'.//van-card/@thumb')
|
|
||||||
jo = {
|
|
||||||
'vod_id': a.xpath('@href')[0],
|
|
||||||
'vod_name': '[{0}]{1}'.format(key,title),
|
|
||||||
'vod_pic': pic
|
|
||||||
}
|
|
||||||
ja.append(jo)
|
|
||||||
result = {
|
|
||||||
'list':ja
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
return self.ali.playerContent(flag,id,vipFlags)
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -1,176 +0,0 @@
|
|||||||
# coding=utf-8
|
|
||||||
# !/usr/bin/python
|
|
||||||
import sys
|
|
||||||
import re
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Spider(Spider): # 元类 默认的元类 type
|
|
||||||
def getName(self):
|
|
||||||
return "完美看看"
|
|
||||||
|
|
||||||
def init(self, extend=""):
|
|
||||||
print("============{0}============".format(extend))
|
|
||||||
pass
|
|
||||||
|
|
||||||
def homeContent(self, filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"电影": "1",
|
|
||||||
"国产剧": "5",
|
|
||||||
"欧美剧": "2",
|
|
||||||
"韩剧": "3",
|
|
||||||
"泰剧": "9",
|
|
||||||
"日剧": "4",
|
|
||||||
"动漫": "6",
|
|
||||||
"综艺": "7",
|
|
||||||
"纪录片": "10"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name': k,
|
|
||||||
'type_id': cateManual[k]
|
|
||||||
})
|
|
||||||
|
|
||||||
result['class'] = classes
|
|
||||||
if (filter):
|
|
||||||
result['filters'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {
|
|
||||||
'list': []
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def categoryContent(self, tid, pg, filter, extend):
|
|
||||||
result = {}
|
|
||||||
url = 'https://www.wanmeikk.film/category/{0}-{1}.html'.format(tid, pg)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
aList = root.xpath("//div[@class='stui-pannel_bd']/ul[1]/li")
|
|
||||||
videos = []
|
|
||||||
for a in aList:
|
|
||||||
name = a.xpath('./div/a/@title')[0]
|
|
||||||
pic = a.xpath('./div/a/@data-original')[0]
|
|
||||||
mark = a.xpath("./div/a/span[@class='pic-text text-right']/text()")[0]
|
|
||||||
sid = a.xpath("./div/a/@href")[0].replace("/", "").replace("project", "").replace(".html", "")
|
|
||||||
videos.append({
|
|
||||||
"vod_id": sid,
|
|
||||||
"vod_name": name,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"vod_remarks": mark
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
|
|
||||||
def detailContent(self, array):
|
|
||||||
tid = array[0]
|
|
||||||
url = 'https://www.wanmeikk.film/project/{0}.html'.format(tid)
|
|
||||||
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
|
|
||||||
rsp = self.fetch(url, headers=header)
|
|
||||||
root = self.html(rsp.content)
|
|
||||||
divContent = root.xpath("//div[@class='col-lg-wide-75 col-xs-1']")[0]
|
|
||||||
title = divContent.xpath(".//h1[@class='title']/text()")[0]
|
|
||||||
pic = divContent.xpath(".//a[@class='stui-vodlist__thumb picture v-thumb']/img/@data-original")[0]
|
|
||||||
detail = divContent.xpath(".//p[@class='desc detail hidden-xs']/span[@class='detail-content']/text()")[0]
|
|
||||||
vod = {
|
|
||||||
"vod_id": tid,
|
|
||||||
"vod_name": title,
|
|
||||||
"vod_pic": pic,
|
|
||||||
"type_name": "",
|
|
||||||
"vod_year": "",
|
|
||||||
"vod_area": "",
|
|
||||||
"vod_remarks": "",
|
|
||||||
"vod_actor": "",
|
|
||||||
"vod_director": "",
|
|
||||||
"vod_content": detail
|
|
||||||
}
|
|
||||||
infoArray = divContent.xpath(".//div[@class='stui-content__detail']/p[@class='data']")
|
|
||||||
for info in infoArray:
|
|
||||||
content = info.xpath('string(.)')
|
|
||||||
if content.startswith('类型'):
|
|
||||||
infon = content.split('\xa0')
|
|
||||||
for inf in infon:
|
|
||||||
if inf.startswith('类型'):
|
|
||||||
vod['type_name'] = inf.replace("类型:", "")
|
|
||||||
if inf.startswith('地区'):
|
|
||||||
vod['vod_area'] = inf.replace("地区:", "")
|
|
||||||
if inf.startswith('年份'):
|
|
||||||
vod['vod_year'] = inf.replace("年份:", "")
|
|
||||||
if content.startswith('主演'):
|
|
||||||
vod['vod_actor'] = content.replace("\xa0", "/").replace("主演:", "")
|
|
||||||
if content.startswith('导演'):
|
|
||||||
vod['vod_director'] = content.replace("\xa0", "").replace("导演:", "")
|
|
||||||
vod_play_url = '$$$'
|
|
||||||
vod['vod_play_from'] = '完美看看'
|
|
||||||
purl = divContent.xpath(".//div[@class='stui-pannel_bd col-pd clearfix']/ul/li")
|
|
||||||
playList = []
|
|
||||||
vodItems = []
|
|
||||||
for plurl in purl:
|
|
||||||
plaurl = plurl.xpath(".//a/@href")[0]
|
|
||||||
name = plurl.xpath(".//a/text()")[0]
|
|
||||||
tId = self.regStr(plaurl, '/play/(\\S+).html')
|
|
||||||
vodItems.append(name + "$" + tId)
|
|
||||||
joinStr = '#'
|
|
||||||
joinStr = joinStr.join(vodItems)
|
|
||||||
playList.append(joinStr)
|
|
||||||
vod_play_url = vod_play_url.join(playList)
|
|
||||||
vod['vod_play_url'] = vod_play_url
|
|
||||||
result = {
|
|
||||||
'list': [
|
|
||||||
vod
|
|
||||||
]
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def searchContent(self, key, quick):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self, flag, id, vipFlags):
|
|
||||||
result = {}
|
|
||||||
url = 'https://www.wanmeikk.film/play/{0}.html'.format(id)
|
|
||||||
rsp = self.fetch(url)
|
|
||||||
root = self.html(rsp.text)
|
|
||||||
scripts = root.xpath("//div[@class='stui-player__video embed-responsive embed-responsive-16by9 clearfix']/script/text()")[0]
|
|
||||||
key = scripts.split("url")[1].replace('"', "").replace(':', "").replace(',', "").replace("'", "")
|
|
||||||
surl = 'https://www.wanmeikk.film/dplayer.php?url={0}'.format(key)
|
|
||||||
srsp = self.fetch(surl)
|
|
||||||
sroot = self.html(srsp.text)
|
|
||||||
murl = sroot.xpath("//script[@type='text/javascript']/text()")[0]
|
|
||||||
mp4url = re.findall(r"var urls = '(.*)';", murl)[0]
|
|
||||||
result["parse"] = 0
|
|
||||||
result["playUrl"] = ''
|
|
||||||
result["url"] = mp4url
|
|
||||||
result["header"] = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36"}
|
|
||||||
return result
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def isVideoFormat(self, url):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
|
|
||||||
def localProxy(self, param):
|
|
||||||
action = {
|
|
||||||
'url': '',
|
|
||||||
'header': '',
|
|
||||||
'param': '',
|
|
||||||
'type': 'string',
|
|
||||||
'after': ''
|
|
||||||
}
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
File diff suppressed because one or more lines are too long
@ -1,63 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import requests
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getDependence(self):
|
|
||||||
return ['py_ali']
|
|
||||||
def getName(self):
|
|
||||||
return "py_yiso"
|
|
||||||
def init(self,extend):
|
|
||||||
self.ali = extend[0]
|
|
||||||
print("============py_yiso============")
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
header = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; V2049A Build/SP1A.210812.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36",
|
|
||||||
"Referer": "https://yiso.fun/"
|
|
||||||
}
|
|
||||||
def detailContent(self,array):
|
|
||||||
return self.ali.detailContent(array)
|
|
||||||
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
url = "https://yiso.fun/api/search?name={0}&from=ali".format(key)
|
|
||||||
vodList = requests.get(url=url, headers=self.header, verify=False).json()["data"]["list"]
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
videos.append({
|
|
||||||
"vod_id": vod["url"],
|
|
||||||
"vod_name": vod["fileInfos"][0]["fileName"],
|
|
||||||
"vod_pic": "https://inews.gtimg.com/newsapp_bt/0/13263837859/1000",
|
|
||||||
"vod_remarks": vod['gmtCreate']
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list':videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
return self.ali.playerContent(flag,id,vipFlags)
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,85 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getDependence(self):
|
|
||||||
return ['py_ali']
|
|
||||||
def getName(self):
|
|
||||||
return "py_zhaozy"
|
|
||||||
def init(self,extend):
|
|
||||||
self.ali = extend[0]
|
|
||||||
print("============py_zhaozy============")
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
return result
|
|
||||||
header = {
|
|
||||||
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.54 Safari/537.36",
|
|
||||||
"Referer": "https://zhaoziyuan.me/"
|
|
||||||
}
|
|
||||||
def detailContent(self,array):
|
|
||||||
tid = array[0]
|
|
||||||
print(self.getName())
|
|
||||||
pattern = '(https://www.aliyundrive.com/s/[^\"]+)'
|
|
||||||
url = self.regStr(tid,pattern)
|
|
||||||
if len(url) > 0:
|
|
||||||
return self.ali.detailContent(array)
|
|
||||||
|
|
||||||
rsp = self.fetch('https://zhaoziyuan.me/'+tid)
|
|
||||||
url = self.regStr(rsp.text,pattern)
|
|
||||||
if len(url) == 0:
|
|
||||||
return ""
|
|
||||||
newArray = [url]
|
|
||||||
print(newArray)
|
|
||||||
return self.ali.detailContent(newArray)
|
|
||||||
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
map = {
|
|
||||||
'7':'文件夹',
|
|
||||||
'1':'视频'
|
|
||||||
}
|
|
||||||
ja = []
|
|
||||||
for tKey in map.keys():
|
|
||||||
url = "https://zhaoziyuan.me/so?filename={0}&t={1}".format(key,tKey)
|
|
||||||
rsp = self.fetch(url,headers=self.header)
|
|
||||||
root = self.html(self.cleanText(rsp.text))
|
|
||||||
aList = root.xpath("//li[@class='clear']//a")
|
|
||||||
for a in aList:
|
|
||||||
# title = a.xpath('./h3/text()')[0] + a.xpath('./p/text()')[0]
|
|
||||||
title = self.xpText(a,'./h3/text()') + self.xpText(a,'./p/text()')
|
|
||||||
pic = 'https://img0.baidu.com/it/u=603086994,1727626977&fm=253&fmt=auto?w=500&h=667'
|
|
||||||
jo = {
|
|
||||||
'vod_id': self.xpText(a,'@href'),
|
|
||||||
'vod_name': '[{0}]{1}'.format(key,title),
|
|
||||||
'vod_pic': pic
|
|
||||||
}
|
|
||||||
ja.append(jo)
|
|
||||||
result = {
|
|
||||||
'list':ja
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
return self.ali.playerContent(flag,id,vipFlags)
|
|
||||||
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {}
|
|
||||||
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
File diff suppressed because one or more lines are too long
136
plugin/py_小纸条.py
136
plugin/py_小纸条.py
@ -1,136 +0,0 @@
|
|||||||
#coding=utf-8
|
|
||||||
#!/usr/bin/python
|
|
||||||
import sys
|
|
||||||
sys.path.append('..')
|
|
||||||
from base.spider import Spider
|
|
||||||
import requests
|
|
||||||
import json
|
|
||||||
|
|
||||||
class Spider(Spider):
|
|
||||||
def getDependence(self):
|
|
||||||
return ['py_ali']
|
|
||||||
def getName(self):
|
|
||||||
return "py_gitcafe"
|
|
||||||
def init(self,extend):
|
|
||||||
self.ali = extend[0]
|
|
||||||
print("============py_gitcafe============")
|
|
||||||
pass
|
|
||||||
def isVideoFormat(self,url):
|
|
||||||
pass
|
|
||||||
def manualVideoCheck(self):
|
|
||||||
pass
|
|
||||||
def homeContent(self,filter):
|
|
||||||
result = {}
|
|
||||||
cateManual = {
|
|
||||||
"华语电视" :"hyds",
|
|
||||||
"日韩电视" :"rhds",
|
|
||||||
"欧美电视" :"omds",
|
|
||||||
"其他电视" :"qtds",
|
|
||||||
"华语电影" :"hydy",
|
|
||||||
"日韩电影" :"rhdy",
|
|
||||||
"欧美电影" :"omdy",
|
|
||||||
"其他电影" :"qtdy",
|
|
||||||
"华语动漫" :"hydm",
|
|
||||||
"日韩动漫" :"rhdm",
|
|
||||||
"欧美动漫" :"omdm",
|
|
||||||
"纪录片" :"jlp",
|
|
||||||
"综艺片" :"zyp",
|
|
||||||
"教育培训" :"jypx",
|
|
||||||
"其他视频" :"qtsp",
|
|
||||||
"华语音乐" :"hyyy",
|
|
||||||
"日韩音乐" :"rhyy",
|
|
||||||
"欧美音乐" :"omyy",
|
|
||||||
"其他音乐" :"qtyy"
|
|
||||||
}
|
|
||||||
classes = []
|
|
||||||
for k in cateManual:
|
|
||||||
classes.append({
|
|
||||||
'type_name':k,
|
|
||||||
'type_id':cateManual[k]
|
|
||||||
})
|
|
||||||
result['class'] = classes
|
|
||||||
if filter:
|
|
||||||
result['filter'] = self.config['filter']
|
|
||||||
return result
|
|
||||||
def homeVideoContent(self):
|
|
||||||
result = {}
|
|
||||||
if len(self.homeData.keys()) == 0:
|
|
||||||
url = self.baseUrl+'/alipaper/home.json'
|
|
||||||
self.homeData = self.fetch(url,headers=self.header).json()
|
|
||||||
cateList = self.homeData['data']
|
|
||||||
videos = []
|
|
||||||
for cate in cateList:
|
|
||||||
if cate['info']['code'] in self.category:
|
|
||||||
vodList = cate['data']
|
|
||||||
for vod in vodList:
|
|
||||||
videos.append({
|
|
||||||
"vod_id":"https://www.aliyundrive.com/s/" + vod['key'],
|
|
||||||
"vod_name":vod['title'],
|
|
||||||
"vod_pic":'https://txc.gtimg.com/data/375895/2022/0214/d6b96cc3799b6417d30e4715d2973f64.png',
|
|
||||||
"vod_remarks":''
|
|
||||||
})
|
|
||||||
result['list']=videos
|
|
||||||
return result
|
|
||||||
def categoryContent(self,tid,pg,filter,extend):
|
|
||||||
result = {}
|
|
||||||
url = self.baseUrl+'/tool/alipaper/'
|
|
||||||
form = {
|
|
||||||
"action": "viewcat",
|
|
||||||
"cat": tid,
|
|
||||||
"num":pg
|
|
||||||
}
|
|
||||||
|
|
||||||
rsp = requests.post(url,headers=self.header,data=form)
|
|
||||||
vodList = json.loads(self.cleanText(rsp.text))
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
videos.append({
|
|
||||||
"vod_id": 'https://www.aliyundrive.com/s/'+vod["key"],
|
|
||||||
"vod_name": vod["title"],
|
|
||||||
"vod_pic": "https://txc.gtimg.com/data/375895/2022/0214/d6b96cc3799b6417d30e4715d2973f64.png",
|
|
||||||
"vod_remarks": vod['cat']
|
|
||||||
})
|
|
||||||
result['list'] = videos
|
|
||||||
result['page'] = pg
|
|
||||||
result['pagecount'] = 9999
|
|
||||||
result['limit'] = 90
|
|
||||||
result['total'] = 999999
|
|
||||||
return result
|
|
||||||
category = ['hydm','hyds','hydy','omdm','omds','omdy','rhdm','rhds','rhdy','qtds','qtdy','qtsp','jlp','zyp']
|
|
||||||
def detailContent(self,array):
|
|
||||||
return self.ali.detailContent(array)
|
|
||||||
def searchContent(self,key,quick):
|
|
||||||
result = {}
|
|
||||||
url = self.baseUrl+'/tool/alipaper/'
|
|
||||||
form = {
|
|
||||||
"action": "search",
|
|
||||||
"keyword": key
|
|
||||||
}
|
|
||||||
vodList = requests.post(url,headers=self.header,data=form).json()
|
|
||||||
videos = []
|
|
||||||
for vod in vodList:
|
|
||||||
videos.append({
|
|
||||||
"vod_id": 'https://www.aliyundrive.com/s/'+vod["key"],
|
|
||||||
"vod_name": vod["title"],
|
|
||||||
"vod_pic": "https://txc.gtimg.com/data/375895/2022/0214/d6b96cc3799b6417d30e4715d2973f64.png",
|
|
||||||
"vod_remarks": vod['cat']
|
|
||||||
})
|
|
||||||
result = {
|
|
||||||
'list':videos
|
|
||||||
}
|
|
||||||
return result
|
|
||||||
def playerContent(self,flag,id,vipFlags):
|
|
||||||
return self.ali.playerContent(flag,id,vipFlags)
|
|
||||||
|
|
||||||
homeData = {}
|
|
||||||
baseUrl = 'https://gitcafe.net'
|
|
||||||
config = {
|
|
||||||
"player": {},
|
|
||||||
"filter": {}
|
|
||||||
}
|
|
||||||
header = {
|
|
||||||
"User-Agent": "Mozilla/5.0 (Linux; Android 12; V2049A Build/SP1A.210812.003; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/103.0.5060.129 Mobile Safari/537.36",
|
|
||||||
"Referer": "https://u.gitcafe.net/"
|
|
||||||
}
|
|
||||||
def localProxy(self,param):
|
|
||||||
return [200, "video/MP2T", action, ""]
|
|
@ -1,577 +0,0 @@
|
|||||||
{
|
|
||||||
"spider":"clan://tvbox/jar/0920.jar",
|
|
||||||
"wallpaper":"http://maoyingshi.cc/api.php",
|
|
||||||
"lives":[
|
|
||||||
{
|
|
||||||
"group":"redirect",
|
|
||||||
"channels":[
|
|
||||||
{
|
|
||||||
"name":"live",
|
|
||||||
"urls":[
|
|
||||||
"proxy://do=live&type=txt&ext=clan://TVBox/tv/live.txt"]}]}],
|
|
||||||
"sites":[
|
|
||||||
{
|
|
||||||
"key":"py_kuaikan",
|
|
||||||
"name":"快看〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_kuaikan",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_kuaikan.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_lezhu",
|
|
||||||
"name":"乐猪〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_lezhu",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_lezhu.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_3qu",
|
|
||||||
"name":"3QU〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_3qu",
|
|
||||||
"searchable":0,
|
|
||||||
"quickSearch":0,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_3qu.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_cyys",
|
|
||||||
"name":"创艺〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_cyys",
|
|
||||||
"searchable":0,
|
|
||||||
"quickSearch":0,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_cyys.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_wmkk",
|
|
||||||
"name":"完美看看〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_wmkk",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_wmkk.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_cup",
|
|
||||||
"name":"茶杯〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_cup",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_cup.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_star",
|
|
||||||
"name":"星光〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_star",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_star.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_bilibili",
|
|
||||||
"name":"哔哩〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_bilibili",
|
|
||||||
"searchable":0,
|
|
||||||
"quickSearch":0,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_bilibili.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_bilivd",
|
|
||||||
"name":"B站(带搜索)",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_bilivd",
|
|
||||||
"searchable":0,
|
|
||||||
"quickSearch":0,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_bilivd.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_cctv",
|
|
||||||
"name":"央视〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_cctv",
|
|
||||||
"searchable":0,
|
|
||||||
"quickSearch":0,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_cctv.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_czspp",
|
|
||||||
"name":"厂长〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_czspp",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_czspp.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_zxzj",
|
|
||||||
"name":"在线之家〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_zxzj",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_zxzj.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_voflix",
|
|
||||||
"name":"Voflix〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_voflix",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_voflix.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_bilimd",
|
|
||||||
"name":"🔥B站影视〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_bilimd",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_bilimd.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_gimytv",
|
|
||||||
"name":"剧迷〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_gimytv",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_gimytv.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_genmov",
|
|
||||||
"name":"跟剧〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_genmov",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_genmov.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_huya",
|
|
||||||
"name":"🔥虎牙〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_huya",
|
|
||||||
"searchable":0,
|
|
||||||
"quickSearch":0,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_huya.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_douyu",
|
|
||||||
"name":"🔥斗鱼〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_douyu",
|
|
||||||
"searchable":0,
|
|
||||||
"quickSearch":0,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_douyu.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_cokemv",
|
|
||||||
"name":"COKE",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_cokemv",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_cokemv.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_xmaomi",
|
|
||||||
"name":"猫咪〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_xmaomi",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_xmaomi.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_gitcafe",
|
|
||||||
"name":"小纸条〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_gitcafe",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":0,
|
|
||||||
"ext":"./py_gitcafe.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_zhaozy",
|
|
||||||
"name":"找资源〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_zhaozy",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":0,
|
|
||||||
"ext":"./py_zhaozy.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_yiso",
|
|
||||||
"name":"易搜〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_yiso",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":0,
|
|
||||||
"ext":"./py_yiso.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_pansou",
|
|
||||||
"name":"盘搜〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_pansou",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":0,
|
|
||||||
"ext":"./py_pansou.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"push_agent",
|
|
||||||
"name":"阿里〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_ali",
|
|
||||||
"searchable":0,
|
|
||||||
"quickSearch":0,
|
|
||||||
"filterable":0,
|
|
||||||
"ext":"./py_ali.py"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"key":"py_alist",
|
|
||||||
"name":"🦂Alist〔PY〕",
|
|
||||||
"type":3,
|
|
||||||
"api":"py_alist",
|
|
||||||
"searchable":1,
|
|
||||||
"quickSearch":1,
|
|
||||||
"filterable":1,
|
|
||||||
"ext":"./py_alist.py"
|
|
||||||
},
|
|
||||||
{"key":"csp_AppTT","name":"图图影视〔SP〕","type":3,"api":"csp_AppTT","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_Kunyu77","name":"七七〔SP〕","type":3,"api":"csp_Kunyu77","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_Lib","name":"LIBVIO〔SP〕","type":3,"api":"csp_Lib","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_LiteApple","name":"小苹果〔SP〕","type":3,"api":"csp_LiteApple","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"厂长影视","name":"厂长资源〔SP〕","type":3,"api":"csp_Czsapp","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_Cokemv","name":"Cokemv〔SP〕","type":3,"api":"csp_Cokemv","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_Kuaikan","name":"快看〔SP〕","type":3,"api":"csp_Kuaikan","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"spider_IKan","name":"爱看〔SP〕","type":3,"api":"csp_IKan","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"KanSJ_spider","name":"看视界〔SP〕","api":"csp_KanSJ","type":3,"filterable":1,"quickSearch":1,"searchable":1,"ext":""},
|
|
||||||
{"key":"Smdyy_spider","name":"神马影视〔SP〕","api":"csp_Smdyy","type":3,"filterable":1,"quickSearch":1,"searchable":1},
|
|
||||||
{"key":"追剧喵","name":"追剧喵〔SP〕","type":3,"api":"csp_ZJMiao","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"Lezhu_spider","name":"乐猪影视〔SP〕","api":"csp_Lezhu","type":3,"filterable":1,"quickSearch":1,"searchable":1},
|
|
||||||
{"key":"csp_Wmkk","name":"完美看看〔SP〕","api":"csp_Wmkk","type":3,"filterable":1,"quickSearch":1,"searchable":1},
|
|
||||||
{"key":"csp_Bttoo","name":"两个BT〔SP〕","type":3,"api":"csp_Bttoo","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_Auete","name":"Auete〔SP〕","type":3,"api":"csp_Auete","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_EEEDY","name":"3EDY(EXO)","type":3,"api":"csp_EEEDY","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"mjxq_spider","name":"美剧星球〔SP〕","type":3,"api":"csp_Mjxq","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_IQIYI","name":"爱奇艺〔SP〕","type":3,"api":"csp_IQIYI","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_QQ","name":"企鹅〔SP〕","type":3,"api":"csp_QQ","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_MGTV","name":"芒果TV〔SP〕","type":3,"api":"csp_MGTV","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_Lib","name":"LIBVIO〔SP〕","type":3,"api":"csp_Lib","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key":"csp_SP360","name":"360〔SP〕","type":3,"api":"csp_SP360","searchable":1,"quickSearch":1,"filterable":1},
|
|
||||||
{"key": "剧荒TV(SP)","name": "剧荒TV(SP)","type": 3,"api": "csp_Juhuang","searchable": 1,"quickSearch": 1,"filterable": 1},
|
|
||||||
{"key": "csp_Dy555","name":"555影院〔SP〕","type": 3,"api": "csp_Dy555","searchable": 1,"quickSearch": 1,"filterable": 1},
|
|
||||||
{"key":"csp_Bili","name":"哔哩套餐〔SP〕","type": 3,"api":"csp_Bili","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/哔哩哔哩.json"},
|
|
||||||
{"key": "csp_Yj1211","name": "️直播合集〔SP〕","type": 3,"api": "csp_Yj1211","searchable": 1,"quickSearch": 1,"filterable": 1},
|
|
||||||
{"key": "csp_Anime1","name": "小日本动漫〔SP〕","type": 3,"api": "csp_Anime1","searchable": 1,"quickSearch": 1,"filterable": 1},
|
|
||||||
{"key":"csp_bendi","name":"本地文件(打开存储权限)","type":3,"api":"csp_LocalFile","searchable":0,"quickSearch":0,"filterable":0,"type_flag":1"},
|
|
||||||
{"key":"csp_Alist2","name":"Alist合集(SP)","type":3,"api":"csp_Alist","searchable":0,"quickSearch":0,"filterable":0,"ext":"clan://tvbox/xb/Alist.json"},
|
|
||||||
{"key": "bdys","name": "哔嘀(磁力测试)","type": 3,"api": "csp_XPbd","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/bdys.json"},
|
|
||||||
{"key":"t4public","name":"T4公共(仅搜索)","type":4,"api":"https://t4.secan.icu/vod?sites=all&ali_token=阿里token&timeout=10","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key": "Gitcafe","name":"小纸条〔SP〕","type": 3,"api": "csp_Gitcafe","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"},
|
|
||||||
{"key":"AliPS","name":"盘搜(仅搜索)","type":3,"api":"csp_AliPS","searchable":1,"quickSearch":1,"filterable":1,"ext": "7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"},
|
|
||||||
{"key":"FindZY","name":"找资源(仅搜索)","type":3,"api":"csp_Zhaozy","searchable":1,"quickSearch":1,"filterable":1,"ext": "7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"},
|
|
||||||
{"key":"csp_Yiso","name":"易搜(仅搜索)","type":3,"api":"csp_Yiso","searchable":1,"quickSearch":1,"filterable":0,"ext":"7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"},
|
|
||||||
{"key": "push_agent","name":"推送(阿里/磁力)","type":3,"api":"csp_PushAgent","searchable":0,"quickSearch":0,"filterable":0,"ext": "7969124e7a4e4ccfb994db1a0e580be4","jar":"clan://tvbox/jar/Ali.jar"},
|
|
||||||
|
|
||||||
|
|
||||||
{"key":"天堂资源〔官源〕","name":"天堂资源〔官源〕","type":1,"api":"http://vipmv.cc/api.php/provide/vod/","searchable":1,"quickSearch":1,"categories":["电影","连续剧","综艺","动漫","国产剧","港台剧","日韩剧","欧美剧","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","哔哩哔哩"]},
|
|
||||||
{"key":"多多资源","name":"多多资源〔官源〕","type":1,"api":"https://www.ddzyz1.com/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":1,"categories":["国产剧","港台剧","日韩剧","欧美剧","泰国剧","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","灾难片","犯罪片","悬疑片","惊悚片","奇幻片","冒险片","武侠片","记录片","伦理","综艺","动漫","动画片","国产动漫","日韩动漫","欧美动漫","海外剧","国内综艺","海外综艺"]},
|
|
||||||
{"key":"北雁影视〔官源〕","name":"北雁影视〔官源〕","type":1,"api":"https://zy.beiyan.cc:4433/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":1,"filterable":1,"categories":["国产剧","港台剧","日韩剧","欧美剧","综艺","动漫"]},
|
|
||||||
{"key":"诺讯资源〔官源〕","name":"诺讯资源〔官源〕","type":1,"api":"http://caiji.nxflv.com/api.php/provide/vod/","searchable":1,"quickSearch":1,"categories":["国产剧","港台剧","日韩剧","欧美剧","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","综艺频道","动漫频道","综合频道"]},
|
|
||||||
{"key":"忆梦","name":"忆梦〔官源〕","type":1,"api":"http://anltv.cn/api.php/provide/vod/","searchable":1,"quickSearch":1,"categories":["国产剧","港台剧","日韩剧","欧美剧","电影(B站)","电视剧(B站)","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","犯罪片","悬疑片","惊悚片","奇幻片","冒险片","武侠片","动漫画","动画","番剧(B站)","国创(B站)","综艺","记录片(B站)","纪录片/微电影"]},
|
|
||||||
{"key":"木子看剧〔官源〕","name":"木子看剧〔官源〕","type":1,"api":"https://mzkj.maccms.cf/api.php/provide/vod/","searchable":1,"quickSearch":1,"categories":["电影","连续剧","综艺","动漫","哔哩哔哩","直播"]},
|
|
||||||
{"key": "M3U8资源","name": "M3U8资源〔官源〕","type": 1,"api": "https://www.zycaiji.net:7788/api.php/provide/vod/","searchable": 1,"quickSearch": 1,"categories":["国产剧","港台剧","日韩剧","欧美剧","动作片","喜剧片","爱情片","科幻片","恐怖片","剧情片","战争片","犯罪片","悬疑片","惊悚片","奇幻片","冒险片","记录片","动画片","综艺","动漫","番剧(B站专用)","国创(B站专用)","电影(B站专用)","电视剧(B站专用)"]},
|
|
||||||
{"key":"ASMR","name":" ASMR19〔官源〕","type":1,"api":"http://www.asmr19.in/api.php/provide/vod/","searchable":0,"quickSearch":0},
|
|
||||||
|
|
||||||
|
|
||||||
{"key":"csp_AppYsV2_优众影视","name":"优众影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://121.205.88.194:7878/xgapp.php/v2/"},
|
|
||||||
{"key":"csp_appysv2_零刻影院〔APP〕","name":"零刻影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://ys.ling00.cn/api.php/v1.vod"},
|
|
||||||
{"key":"快播资源","name":"快播资源〔APP〕","type":1,"api":"http://www.kuaibozy.com/api.php/provide/vod/","searchable":1,"quickSearch":1},
|
|
||||||
{"key":"csp_appysv2_萌蛋蛋〔APP〕","name":"萌蛋蛋〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.mengdandan.com/xgapp.php/v1/"},
|
|
||||||
{"key":"csp_appysv2_群鑫影视〔APP〕","name":"群鑫影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.qunxinys.com/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_渔渔影视〔APP〕","name":"渔渔影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://luobo.yugenye.site/api.php/v1.vod"},
|
|
||||||
{"key": "影图","name": "影图〔APP〕","type": 1,"api": "https://cj.vodimg.top/api.php/provide/vod/","searchable": 1,"quickSearch": 1},
|
|
||||||
{"key":"csp_appysv2_️美剧范〔APP〕","name":"️美剧范〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://ttzmz.net/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_万能影院〔APP〕","name":"万能影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.wnvod.net/lvdou_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_段友影视〔APP〕","name":"段友影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://js.66app.me/api.php/app/"},
|
|
||||||
{"key":"csp_appysv2_淘剧社〔APP〕","name":"淘剧社〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://app.shuhai99.com/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_迷你库","name":"迷你库〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.miniku.cc/xgapp.php/v1/"},
|
|
||||||
{"key":"csp_appysv2_筑梦云影视","name":"筑梦云影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://wzys.scp00.cn/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_一站VIP影视","name":"一站VIP影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.dpp8.xyz/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_影库","name":"影库〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://yingkudy.com/lvdou_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_鑫总资源","name":"鑫总资源〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://app.mmhkj.xyz/lvdou_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_悟空影院","name":"悟空影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://dapi.pntao.com/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_天诚影视","name":"天诚影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://tcspvip.cn/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_枇杷影院","name":"枇杷影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.pipamovie.com/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_诺诺影视","name":"诺诺影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://nnys.cuicanys.cn/lvdou_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_可乐影视","name":"可乐影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://klyingshi.com/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_玖卿乐播","name":"玖卿乐播〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://vod.nqcode.cn/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_佳佳影视","name":"佳佳影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.jiajia.pub/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_豆芽视频","name":"豆芽视频〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://bdintv.cn/lvdou_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_兜里TV","name":"兜里TV〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://app.douli.cc/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_百淘影视","name":"百淘影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://ys.58g8.com/lvdou_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_爱电影","name":"爱电影〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.idianying.com.cn/mogai_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_MX影院","name":"MX影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.889998.xyz/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_OK影视","name":"OK影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://123.ok00.xyz/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_52看剧","name":"52看剧〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://tool.xxmlb.com/qingdoujiekou.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_521看剧","name":"521看剧〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://521kanju.com/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_迪迪影院","name":"迪迪影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://dd88.icu:6080/xgapp.php/v2/"},
|
|
||||||
{"key":"csp_appysv2_爱酷影视","name":"爱酷影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.zhanlangbu.com/ruifenglb_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_益达影院","name":"益达影院〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://luobu.yss6080.com/mogai_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_555电影","name":"555电影〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://555dy3.com/api.php/app/"},
|
|
||||||
{"key":"csp_appysv2_懒猫影视","name":"懒猫影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://lanmao.lanmaoymw.cn/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_冷视TV","name":"冷视TV〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://len.tv/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_星辰TV","name":"星辰TV〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://www.xingchentv.cn/mogai_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_沭阳影视","name":"沭阳影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://zjr.jurentiaodeng.com/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_月儿影视","name":"月儿影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://yue52.xyz/api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_️瑞丰影视〔APP〕","name":"️瑞丰影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"http://121.204.249.135:4433/ruifenglb_api.php/v1.vod"},
|
|
||||||
{"key":"csp_appysv2_QC影视〔APP〕","name":"QC影视〔APP〕","type":3,"api":"csp_AppYsV2","searchable":1,"quickSearch":1,"filterable":1,"ext":"https://www.qcsvip.com/mogai_api.php/v1.vod"},
|
|
||||||
{"key": "csp_app_小鸟动漫","name": "小鸟动漫〔APP〕","type": 3,"api": "csp_AppYsV2","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "http://xydm.baicai.buzz/mogai_api.php/v1.vod"},
|
|
||||||
|
|
||||||
|
|
||||||
{"key":"csp_xpath_yinfans","name":"音范丝4K(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/yinfans.json"},
|
|
||||||
{"key":"csp_xpath_农民影视","name":"农民影视(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/nongminyingshi.json"},
|
|
||||||
{"key":"csp_xpath_zxzj","name":"在线之家(XPF)","type":3,"api":"csp_XPathFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/zxzj.json"},
|
|
||||||
{"key":"csp_xpath_libvio","name":"LIBVIO(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/libvio.json"},
|
|
||||||
{"key":"csp_xpath_cokemv","name":"COKEMV(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/cokemv.json"},
|
|
||||||
{"key":"csp_xpath_dadagui","name":"达达龟(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/dadagui.json"},
|
|
||||||
{"key":"csp_xpath_jbb","name":"剧白白(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/jubaibai.json"},
|
|
||||||
{"key":"csp_xpath_bttwoo","name":"两个BT(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/bttwoo.json"},
|
|
||||||
{"key":"csp_xpath_6d","name":"六度TV(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/6d.json"},
|
|
||||||
{"key":"csp_xpath_94sm","name":"94神马(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/94sm.json"},
|
|
||||||
{"key":"csp_xpath_saohuotv","name":"骚火影视(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/saohuotv.json"},
|
|
||||||
{"key":"csp_xpath_zbkyy","name":"真不卡影院(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/zbkyy.json"},
|
|
||||||
{"key":"csp_xpath_czspp","name":"厂长资源(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/czspp.json"},
|
|
||||||
{"key": "csp_xpath_wanmeikk","name": "完美看看(XP)","type": 3,"api": "csp_XPathMacFilter","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": "clan://tvbox/xp/wanmeikk.json"},
|
|
||||||
{"key":"csp_xpath_rttks","name":"人人影视(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/rttks.json"},
|
|
||||||
{"key":"csp_xpath_vip1280","name":"VIP电影(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/vip1280.json"},
|
|
||||||
{"key":"csp_xpath_tjyy","name":"奇优影院(XP)","type":3,"api":"csp_XPathMac","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/huigutongying.json"},
|
|
||||||
{"key":"csp_xpath_lezhutv","name":"乐猪TV(XPMac)","type":3,"api":"csp_XPathMac","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/lezhutv.json"},
|
|
||||||
{"key":"csp_xpath_jpys","name":"极品影视(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/jpys.json"},
|
|
||||||
{"key":"csp_xpath_lranc","name":"天天影视(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/lranc.json"},
|
|
||||||
{"key":"csp_xpath_maole","name":"喵乐影视(XPF)️","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/maole.json"},
|
|
||||||
{"key":"csp_xpath_xuangz","name":"尘落电影(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/xuangz.json"},
|
|
||||||
{"key":"csp_xpath_qdytv","name":"米来影视(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/qdytv.json"},
|
|
||||||
{"key":"csp_xpath_xqmi","name":"小强迷(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/xqmi.json"},
|
|
||||||
{"key":"csp_xpath_135kan","name":"135看看(XP)","type":3,"api":"csp_XPath","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xp/135kan.json"},
|
|
||||||
{"key":"csp_xpath_miaomiao","name":"喵喵(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/miaomiao.json"},
|
|
||||||
{"key":"csp_xpath_hyingku","name":"海影库(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/hyingku.json"},
|
|
||||||
{"key": "csp_xpath_蚂蚁影视","name": "蚂蚁影视(XPF)️","type": 3,"api": "csp_XPathMacFilter","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/myys.json"},
|
|
||||||
{"key": "csp_xpath_电影迷","name": "电影迷(XPF)️","type": 3,"api": "csp_XPathMacFilter","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/dym8.json"},
|
|
||||||
{"key": "csp_xpath_meiju56","name": "美剧网(XPF)","type": 3,"api": "csp_XPathFilter","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/meiju56.json"},
|
|
||||||
{"key":"csp_xpath_555dy","name":"555影视(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/555dy.json"},
|
|
||||||
{"key":"csp_xpath_mp4dy","name":"mp4电影(XPF)","type":3,"api":"csp_XPathMacFilter","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xp/mp4dy.json"},
|
|
||||||
{"key": "csp_xpath_bidiys","name": "哔嘀影视(XP)","type": 3,"api": "csp_XPath","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": "clan://tvbox/xp/bidiys.json"},
|
|
||||||
{"key": "csp_xpath_xfeiji","name": "小小影视(XP)","type": 3,"api": "csp_XPath","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": "clan://tvbox/xp/xfeiji.json"},
|
|
||||||
{"key": "csp_xpath_dmd","name": "动漫岛(XPF)","type": 3,"api": "csp_XPathMacFilter","searchable": 1,"quickSearch": 1,"filterable": 1,"ext": "clan://tvbox/xp/dmd.json"},
|
|
||||||
{"key": "csp_xpath_dm84","name": "动漫巴士(XP)","type": 3,"api": "csp_XPathFilter","searchable": 1,"quickSearch": 1,"filterable": 0,"ext": "clan://tvbox/xp/dm84.json"},
|
|
||||||
|
|
||||||
|
|
||||||
{"key":"csp_XYQBiu_氢视频","name":"氢视频(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/氢视频.json"},
|
|
||||||
{"key":"csp_XYQBiu_凌云影视","name":"凌云影视(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/凌云影视.json"},
|
|
||||||
{"key":"csp_XYQBiu_555影视","name":"555影视(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/555影视.json"},
|
|
||||||
{"key":"csp_XYQBiu_大米星球","name":"大米星球(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/大米星球.json"},
|
|
||||||
{"key":"csp_XYQBiu_影视工厂","name":"影视工厂(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/影视工厂.json"},
|
|
||||||
{"key":"csp_XYQBiu_片吧影院","name":"片吧影院(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/片吧影院.json"},
|
|
||||||
{"key":"csp_XYQBiu_vofix","name":"VOFIX(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/vofix.json"},
|
|
||||||
{"key":"csp_XYQBiu_莫扎兔","name":"莫扎兔(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/莫扎兔.json"},
|
|
||||||
{"key":"csp_XYQBiu_聚合电影","name":"聚合电影(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/聚合电影.json"},
|
|
||||||
{"key":"csp_XYQBiu_剧荒","name":"剧荒TV(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/剧荒.json"},
|
|
||||||
{"key":"csp_XYQBiu_斗鱼直播","name":"斗鱼直播(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/斗鱼直播.json"},
|
|
||||||
{"key":"csp_XYQBiu_虎牙直播","name":"虎牙直播(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/虎牙直播.json"},
|
|
||||||
{"key":"csp_XYQBiu_网易CC直播","name":"网易CC直播(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/网易CC直播.json"},
|
|
||||||
{"key":"csp_XYQBiu_17klive","name":"体育直播(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/17klive.json"},
|
|
||||||
{"key":"csp_XYQBiu_萌番组","name":"萌番组(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/萌番组.json"},
|
|
||||||
{"key":"csp_XYQBiu_酷狗MV","name":"酷狗MV(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/酷狗MV.json"},
|
|
||||||
{"key":"csp_XYQBiu_酷奇MV","name":"酷奇MV(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/酷奇MV.json"},
|
|
||||||
{"key":"csp_XYQBiu_好恐怖磁力","name":"好恐怖磁力(XYQ)","type":3,"api":"csp_XYQBiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyq/好恐怖磁力.json"},
|
|
||||||
|
|
||||||
|
|
||||||
{"key":"csp_XYQHiker_回响影视","name":"回响影视(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyqh/回响影视.json"},
|
|
||||||
{"key":"csp_XYQHiker_在线之家","name":"在线之家(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyqh/在线之家.json"},
|
|
||||||
{"key":"csp_XYQHiker_无插件直播","name":"体育直播(XYQH)","type":3,"api":"csp_XYQHiker","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xyqh/无插件直播.json"},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{"key":"csp_QXBiubiu_TVB云播","name":"TVB云播(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,
|
|
||||||
"ext":"clan://tvbox/xb/TVB云播.json"},
|
|
||||||
{"key":"csp_QXBiubiu_555电影","name":"555电影(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,
|
|
||||||
"ext":"clan://tvbox/xb/555电影.json"},
|
|
||||||
{"key":"csp_QXBiubiu_影视工厂","name":"影视工厂(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/影视工厂.json"},
|
|
||||||
{"key":"csp_QXBiubiu_剧白白","name":"剧白白(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/剧白白.json"},
|
|
||||||
{"key":"csp_QXBiubiu_600影视","name":"600影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/600影视.json"},
|
|
||||||
{"key":"csp_QXBiubiu_小强迷","name":"小强迷(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/小强迷.json"},
|
|
||||||
{"key":"csp_QXBiubiu_歪片星球","name":"歪片星球(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/歪片星球.json"},
|
|
||||||
{"key":"csp_biubiu_voflixHD","name":"VOFLIX HD(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/voflixHD.json"},
|
|
||||||
{"key":"csp_biubiu_黑狐影院","name":"黑狐影院(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/黑狐影院.json"},
|
|
||||||
{"key":"csp_biubiu_真不卡影院","name":"真不卡影院(XB)","type":3,"api":"csp_XBiubiu","searchable":0,"quickSearch":0,"filterable":0,"ext":"clan://tvbox/xb/真不卡影院.json"},
|
|
||||||
{"key":"csp_XBiubiu_速搜影视","name":"速搜影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/速搜影视.json"},
|
|
||||||
{"key":"csp_XBiubiu_极品影视","name":"极品影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/极品影视.json"},
|
|
||||||
{"key":"csp_biubiu_米来影视","name":"米来影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/米来影视.json"},
|
|
||||||
{"key":"csp_biubiu_旧梦影视","name":"旧梦影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/旧梦影视.json"},
|
|
||||||
{"key":"csp_biubiu_达达龟","name":"达达龟(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/达达龟.json"},
|
|
||||||
{"key":"csp_XBiubiu_宝仙HD","name":"宝仙HD(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/宝仙HD.json"},
|
|
||||||
{"key":"csp_XBiubiu_私人影院","name":"私人影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/私人影院.json"},
|
|
||||||
{"key":"csp_XBiubiu_夜空蓝光","name":"夜空蓝光(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/夜空蓝光.json"},
|
|
||||||
{"key":"csp_XBiubiu_AB影院","name":"AB影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/AB影院.json"},
|
|
||||||
{"key":"csp_biubiu_看一看影视","name":"看一看影视(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/看一看影视.json"},
|
|
||||||
{"key":"csp_XBiubiu_UM影院","name":"UM影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/UM影院.json"},
|
|
||||||
{"key":"csp_XBiubiu_厂长资源","name":"厂长资源(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/厂长资源.json"},
|
|
||||||
{"key":"csp_biubiu_干饭影视","name":"干饭影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/干饭影视.json"},
|
|
||||||
{"key":"'csp_biubiu_骚火电影","name":"骚火电影(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/骚火电影.json"},
|
|
||||||
{"key":"csp_biubiu_瓜皮TV","name":"瓜皮TV(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/瓜皮TV.json"},
|
|
||||||
{"key":"csp_biubiu_在线之家","name":"在线之家(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/在线之家.json"},
|
|
||||||
{"key":"csp_biubiu_花猫TV","name":"花猫TV(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/花猫TV.json"},
|
|
||||||
{"key":"csp_biubiu_饭团","name":"饭团(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/饭团.json"},
|
|
||||||
{"key":"csp_biubiu_搜狗影院","name":"搜狗影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/搜狗影院.json"},
|
|
||||||
{"key":"csp_biubiu_口袋影院","name":"口袋影院(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/口袋影院.json"},
|
|
||||||
{"key":"csp_biubiu_蓝莓影视","name":"蓝莓影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/蓝莓影视.json"},
|
|
||||||
{"key":"csp_biubiu_乐猪影视","name":"乐猪影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/乐猪影视.json"},
|
|
||||||
{"key":"csp_biubiu_七年影视","name":"七年影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/七年影视.json"},
|
|
||||||
{"key":"csp_biubiu_人人影视","name":"人人影视(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/人人影视.json"},
|
|
||||||
{"key":"csp_biubiu_蓝豆TV","name":"蓝豆TV(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/蓝豆TV.json"},
|
|
||||||
{"key":"csp_biubiu_桔子TV","name":"桔子TV(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/桔子tv.json"},
|
|
||||||
{"key":"csp_biubiu_哔嘀影视","name":"哔嘀影视(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/哔嘀影视.json"},
|
|
||||||
{"key":"csp_biubiu_GIMY影视","name":"GIMY影视(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/GIMY影视.json"},
|
|
||||||
{"key":"csp_biubiu_看片网","name":"看片网(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/看片网.json"},
|
|
||||||
{"key":"csp_biubiu_茶杯狐","name":"茶杯狐(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/茶杯狐.json"},
|
|
||||||
{"key":"csp_biubiu_GimyTV","name":"GimyTV(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/GimyTV.json"},
|
|
||||||
{"key":"csp_biubiu_F7好看剧","name":"F7好看剧(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/F7好看剧.json"},
|
|
||||||
{"key":"csp_biubiu_大米星球","name":"大米星球(XB)","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":0,"ext":"clan://tvbox/xb/大米星球.json"},
|
|
||||||
{"key":"csp_biubiu_听书网","name":"听书网(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/听书网.json"},
|
|
||||||
|
|
||||||
|
|
||||||
{"key":"csp_biubiu_四虎影院","name":"四虎影院(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/四虎影院.json"},
|
|
||||||
{"key":"csp_biubiu_爱看影院","name":"爱看影院(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/爱看影院.json"},
|
|
||||||
{"key":"csp_biubiu_GAOAA","name":"GAOAA(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/GAOAA.json"},
|
|
||||||
{"key":"csp_biubiu_香蕉视频","name":"香蕉视频(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/香蕉视频.json"},
|
|
||||||
{"key":"csp_biubiu_黄仓库","name":"黄仓库(XB)️","type":3,"api":"csp_XBiubiu","searchable":1,"quickSearch":1,"filterable":1,"ext":"clan://tvbox/xb/黄仓库.json"},
|
|
||||||
{"key":"哥哥妹妹","name":"哥哥妹妹","type":0,"api":"http://www.ggmmzy.com:9999/inc/xml","searchable":0,"quickSearch":0,"filterable":0},
|
|
||||||
{"key":"秀色资源","name":"秀色资源","type":0,"api":"https://api.xiuseapi.com/api.php/provide/vod/from/xiuse/at/xml/","playUrl":"https://api.xiusebf.com/m3u8/?url=","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"爱播资源","name":"爱播资源","type":1,"api":"https://cj1.apiabzy.com/api.php/provide/vod/?ac=list","playUrl":"https://player.aibozyplayer.com/m3u8/?url=","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"小姐姐资源","name":"小姐姐资源","type":0,"api":"https://xjjzyapi.com/home/cjapi/askl/mc/vod/xml","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"乐播资源","name":"乐播资源","type":0,"api":"https://lbapi9.com/api.php/provide/vod/at/xml/","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"番号资源","name":"番号资源","type":0,"api":"http://fhapi9.com/api.php/provide/vod/at/xml","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"老鸭资源","name":"老鸭资源","type":0,"api":"https://api.apilyzy.com/api.php/provide/vod/at/xml","playUrl":"https://player.77lehuo.com/aliplayer/?url=","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"花椒资源","name":"花椒资源","type":0,"api":"https://apihjzy.com/api.php/provide/vod/at/xml/","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"酷豆资源网","name":"酷豆资源网","type":1,"api":"https://api.kdapi.info/api.php/provide/vod/?ac=list","playUrl":"https://jx.kubohk.com/jx/?url=","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"探探资源","name":"探探资源","type":1,"api":"https://apittzy.com/api.php/provide/vod/","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"奶茶资源","name":"奶茶资源","type":1,"api":"https://caiji.naichaapi.com/inc/apijson_vod.php","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"美少女源","name":"美少女源","type":0,"api":"https://www.msnii.com/api/xml.php","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"淫水机源","name":"饮水机源","type":0,"api":"https://www.xrbsp.com/api/xml.php","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"香奶儿源","name":"香奶儿源","type":0,"api":"https://www.gdlsp.com/api/xml.php","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"白嫖资源","name":"白嫖资源","type":0,"api":"https://www.kxgav.com/api/xml.php","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"小湿妹源","name":"湿妹资源","type":0,"api":"https://www.afasu.com/api/xml.php","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"大地资源","name":"大地资源","type":0,"api":"https://dadiapi.com/api.php","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"速度资源","name":"速度资源","type":0,"api":"http://www.ggmmzy.com:9999/inc/xml","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"色窝资源","name":"色窝资源","type":1,"api":"https://sewozyapi.com/api.php/provide/vod/?ac=list","playUrl":"https://player.sewozyplayer.com/m3u8/?url=","searchable":1,"quickSearch":0,"filterable":0},
|
|
||||||
{"key":"精工厂资源","name":"精工厂资源","type":0,"api":"https://jgczyapi.com/home/cjapi/kld2/mc/vod/xml","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"52AV资源","name":"52AV资源","type":0,"api":"https://52zyapi.com/home/cjapi/asda/mc/vod/xml","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"大MM资源","name":"大MM资源","type":0,"api":"https://www.dmmapi.com/home/cjapi/asd2c7/mc/vod/xml","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"玖玖资源","name":"玖玖资源","type":0,"api":"http://99zywcj.com/inc/sapi.php?ac=videolist","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"狼少年","name":"狼少年","type":0,"api":"http://cjmygzy.com/inc/sapi.php?ac=videolist","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"环亚资源","name":"环亚资源","type":0,"api":"http://wmcj8.com/inc/sapi.php?ac=videolist","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"黄瓜TV资源","name":"黄瓜TV资源","type":0,"api":"https://www.caiji10.com/home/cjapi/cfs6/mc10/vod/xml","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"草榴视频","name":"草榴视频","type":0,"api":"https://www.caiji02.com/home/cjapi/cfas/mc10/vod/xml","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"佳丽资源","name":"佳丽资源","type":1,"api":"http://www.jializyzapi.com/api.php/provide/vod/","searchable":0,"quickSearch":0},
|
|
||||||
{"key":"影库资源-伦理","name":"影库资源-伦理","type":1,"api":"https://api.ykapi.net/api.php/provide/vod/?ac=list","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"酷伦理","name":"酷伦理-伦理","type":1,"api":"https://api.kudian70.com/api.php/provide/vod/","searchable":1,"quickSearch":1,"filterable":0},
|
|
||||||
{"key":"博天堂","name":"博天堂-伦理","type":0,"api":"http://bttcj.com/inc/sapi.php","searchable":1,"quickSearch":1,"filterable":0}
|
|
||||||
],
|
|
||||||
"parses":[
|
|
||||||
{"name":"解析聚合","type":3,"url":"Demo"},
|
|
||||||
{"name":"Json并发","type":2,"url":"Parallel"},
|
|
||||||
{"name":"Json轮询","type":2,"url":"Sequence"},
|
|
||||||
{"name":"手动解析 1","type":0,"url":"https://vip.parwix.com:4433/player/?url=","ext":{"flag":["qq","腾讯","qiyi","iqiyi","爱奇艺","奇艺","youku","优酷","mgtv","芒果","letv","乐视","pptv","PPTV","sohu","bilibili","哔哩哔哩","哔哩"]}},
|
|
||||||
{"name": "手动解析 2","type": 0,"url": "https://jx.bozrc.com:4433/player/?url=","ext": {"flag": ["qq", "腾讯", "qiyi", "爱奇艺", "奇艺", "youku", "优酷", "mgtv", "芒果", "letv", "乐视", "pptv", "PPTV", "sohu", "bilibili", "哔哩哔哩", "哔哩"]}},
|
|
||||||
{"name":"手动解析 3","type":0,"url":"https://jx.m3u8.tv/jiexi/?url="},
|
|
||||||
{"name":"手动解析 4","type":0,"url": "https://chaxun.truechat365.com/?url=","ext":{"flag":["qq","腾讯","qiyi","iqiyi","爱奇艺","奇艺","youku","优酷","mgtv","芒果","letv","乐视","pptv","PPTV","sohu","bilibili","哔哩哔哩","哔哩"]}},
|
|
||||||
{"name": "OK手动解析","type": 0,"url": "https://okjx.cc/?url="},
|
|
||||||
{"name": "ZNJSON解析","type": 1,"url": "https://svip.znjson.com/api/?key=gX8j9IPvoQ5mFmlIzu&url="},
|
|
||||||
{"name": "绿叶解析","type": 1,"url": "https://hc.izny.cn/json.php?url="},
|
|
||||||
{"name": "爱酷","type": 1,"url": "https://jx.zhanlangbu.com/API.php?appkey=53df3aa2fdb66bcbc4d05730b6fbfc71&url="},
|
|
||||||
{"name":"不知名1","type":1,"url":"http://api.ckflv.cn/?url="},
|
|
||||||
{"name": "懒人","type": 1,"url": "http://120.53.102.254/jx1/jx75.php?url="},
|
|
||||||
{"name": "江湖","type": 1,"url": "http://211.99.99.236:4567/jhjson/ceshi.php?url="},
|
|
||||||
{"name": "GGTV自用","type": 1,"url": "https://play.fuqizhishi.com/jx/API.php?appkey=xiaobai666&url="},
|
|
||||||
{"name": "GGTV搜集","type": 1,"url": "https://play.fuqizhishi.com/juhe/API.php?appkey=caijijuhe220902&url="},
|
|
||||||
{"name": "keyu","type": 1,"url": "http://newjiexi.gotka.top/keyu3.php?url=","ext": {"flag": ["qq", "腾讯", "qiyi", "爱奇艺", "奇艺", "youku", "优酷", "mgtv", "芒果", "letv", "乐视", "pptv", "PPTV", "sohu", "bilibili", "哔哩哔哩", "哔哩"],"header": {"User-Agent": "okhttp/4.1.0"}}},
|
|
||||||
{"name": "爱酷看看","type": 1,"url": "http://www.ikukk.com/?ac=1&url="},
|
|
||||||
{"name": "油果","type": 1,"url": "http://json.youguo520.top/fufeng/?url=","ext":{"flag":["qq","腾讯","qiyi","iqiyi","爱奇艺","奇艺","youku","优酷","mgtv","芒果","letv","乐视","pptv","PPTV","sohu","bilibili","哔哩哔哩","哔哩"],"header": {"User-Agent": "Dart/2.14 (dart:io)"}}},
|
|
||||||
{"name":"乐多","type":1,"url":"https://api.ldjx.cc/wp-api/getvodurl.php?token=1001&vid=","ext":{"flag":["leduo"]}},
|
|
||||||
{"name": "星辰手动","type": 0,"url": "https://svip.spchat.top/api/?key=s0rhPxBRt8u8YqmPtO&url="}
|
|
||||||
],
|
|
||||||
|
|
||||||
"flags":["youku","qq","iqiyi","qiyi","letv","sohu","tudou","pptv","mgtv","wasu","bilibili","renrenmi","1905", "xigua","ltnb","CL4K"],
|
|
||||||
"ijk":[
|
|
||||||
{"group":"软解码","options":[
|
|
||||||
{"category":4,"name":"opensles","value":"0"},
|
|
||||||
{"category":4,"name":"overlay-format","value":"842225234"},
|
|
||||||
{"category":4,"name":"framedrop","value":"1"},
|
|
||||||
{"category":4,"name":"soundtouch","value":"1"},
|
|
||||||
{"category":4,"name":"start-on-prepared","value":"1"},
|
|
||||||
{"category":1,"name":"http-detect-range-support","value":"0"},
|
|
||||||
{"category":1,"name":"fflags","value":"fastseek"},
|
|
||||||
{"category":2,"name":"skip_loop_filter","value":"48"},
|
|
||||||
{"category":4,"name":"reconnect","value":"1"},
|
|
||||||
{"category":4,"name":"enable-accurate-seek","value":"0"},
|
|
||||||
{"category":4,"name":"mediacodec","value":"0"},
|
|
||||||
{"category":4,"name":"mediacodec-auto-rotate","value":"0"},
|
|
||||||
{"category":4,"name":"mediacodec-handle-resolution-change","value":"0"},
|
|
||||||
{"category":4,"name":"mediacodec-hevc","value":"0"},
|
|
||||||
{"category":1,"name":"dns_cache_timeout","value":"600000000"}
|
|
||||||
]},
|
|
||||||
{"group":"硬解码","options":[
|
|
||||||
{"category":4,"name":"opensles","value":"0"},
|
|
||||||
{"category":4,"name":"overlay-format","value":"842225234"},
|
|
||||||
{"category":4,"name":"framedrop","value":"1"},
|
|
||||||
{"category":4,"name":"soundtouch","value":"1"},
|
|
||||||
{"category":4,"name":"start-on-prepared","value":"1"},
|
|
||||||
{"category":1,"name":"http-detect-range-support","value":"0"},
|
|
||||||
{"category":1,"name":"fflags","value":"fastseek"},
|
|
||||||
{"category":2,"name":"skip_loop_filter","value":"48"},
|
|
||||||
{"category":4,"name":"reconnect","value":"1"},
|
|
||||||
{"category":4,"name":"enable-accurate-seek","value":"0"},
|
|
||||||
{"category":4,"name":"mediacodec","value":"1"},
|
|
||||||
{"category":4,"name":"mediacodec-auto-rotate","value":"1"},
|
|
||||||
{"category":4,"name":"mediacodec-handle-resolution-change","value":"1"},
|
|
||||||
{"category":4,"name":"mediacodec-hevc","value":"1"},
|
|
||||||
{"category":1,"name":"dns_cache_timeout","value":"600000000"}
|
|
||||||
]}
|
|
||||||
],
|
|
||||||
"ads":["mimg.0c1q0l.cn","www.googletagmanager.com","www.google-analytics.com","mc.usihnbcq.cn","mg.g1mm3d.cn","mscs.svaeuzh.cn","cnzz.hhttm.top","tp.vinuxhome.com","cnzz.mmstat.com","www.baihuillq.com","s23.cnzz.com","z3.cnzz.com","c.cnzz.com","stj.v1vo.top","z12.cnzz.com","img.mosflower.cn","tips.gamevvip.com","ehwe.yhdtns.com","xdn.cqqc3.com","www.jixunkyy.cn","sp.chemacid.cn","hm.baidu.com","s9.cnzz.com","z6.cnzz.com","um.cavuc.com","mav.mavuz.com","wofwk.aoidf3.com","z5.cnzz.com","xc.hubeijieshikj.cn","tj.tianwenhu.com","xg.gars57.cn","k.jinxiuzhilv.com","cdn.bootcss.com","ppl.xunzhuo123.com","xomk.jiangjunmh.top","img.xunzhuo123.com","z1.cnzz.com","s13.cnzz.com","xg.huataisangao.cn","z7.cnzz.com","xg.huataisangao.cn","z2.cnzz.com","s96.cnzz.com","q11.cnzz.com","thy.dacedsfa.cn","xg.whsbpw.cn","s19.cnzz.com","z8.cnzz.com","s4.cnzz.com","f5w.as12df.top","ae01.alicdn.com","www.92424.cn","k.wudejia.com","vivovip.mmszxc.top","qiu.xixiqiu.com","cdnjs.hnfenxun.com","cms.qdwght.com"]
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user