支持本地资源引用使用参数

This commit is contained in:
Kop-Shawn
2020-05-23 10:16:16 +08:00
parent 3d9c463090
commit ca9d717890

View File

@@ -1,5 +1,5 @@
/** /**
# Quantumult X 资源解析器 (2020-05-22: 19:59 ) # Quantumult X 资源解析器 (2020-05-23: 10:59 )
本资源解析器作者: Shawn(请勿私聊问怎么用)有bug请反馈: @Shawn_KOP_bot 本资源解析器作者: Shawn(请勿私聊问怎么用)有bug请反馈: @Shawn_KOP_bot
更新请关注tg频道: https://t.me/QuanX_API 更新请关注tg频道: https://t.me/QuanX_API
@@ -8,8 +8,9 @@
附加功能: rewrite(重写) /filter(分流) 过滤, 可用于解决无法单独禁用远程引用中某(几)条 rewrite/hostname/filter, 以及直接导入 Surge 类型规则 list 的问题 附加功能: rewrite(重写) /filter(分流) 过滤, 可用于解决无法单独禁用远程引用中某(几)条 rewrite/hostname/filter, 以及直接导入 Surge 类型规则 list 的问题
0⃣ 请在订阅链接后加入 "#" 后再加参数, 不同参数间请使用 "&" 来连接, 如: 0⃣ 请在"订阅链接"后加入 "#" 后再加参数, 不同参数间请使用 "&" 来连接, 如:
"https://mysub.com#in=香港+台湾&emoji=1&tfo=1" "https://mysub.com#in=香港+台湾&emoji=1&tfo=1"
(如是本地资源引用,请将参数"#in=xxx"填入资源文件第一行)
1⃣ "节点" 订阅--参数说明: 1⃣ "节点" 订阅--参数说明:
- in, out, 分别为 保留/排除, 多参数用 "+" 连接(逻辑"或"), 逻辑"与"请用"."连接,可直接用中文, 空格用"%20"代替 (如 "in=香港.IPLC.04+台湾&out=香港%20BGP" ); - in, out, 分别为 保留/排除, 多参数用 "+" 连接(逻辑"或"), 逻辑"与"请用"."连接,可直接用中文, 空格用"%20"代替 (如 "in=香港.IPLC.04+台湾&out=香港%20BGP" );
@@ -38,30 +39,32 @@ https://Advertising.list#policy=MineGroup&out=aweme, tag=🚦去广告update-
0⃣ 在QuantumultX 配置文件中[general] 部分,加入 resource_parser_url=https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/resource-parser.js 0⃣ 在QuantumultX 配置文件中[general] 部分,加入 resource_parser_url=https://raw.githubusercontent.com/KOP-XIAO/QuantumultX/master/Scripts/resource-parser.js
⚠️⚠️如提示"没有自定义解析器",请长按右下角图标后点击左侧刷新按钮,更新资源,后台退出 app直到出现解析器说明 ⚠️⚠️如提示"没有自定义解析器",请长按右下角图标后点击左侧刷新按钮,更新资源,后台退出 app直到出现解析器说明
1⃣ 假设原始订阅连接为: https://raw.githubusercontent.com/crossutility/Quantumult-X/master/server-complete.txt , 1⃣ 假设原始订阅连接为: https://raw.githubusercontent.com/crossutility/Quantumult-X/master/server-complete.txt ,
2⃣ 假设你想要保留的参数为 in=tls+ss, 想要过滤的参数为 out=http+2, 请注意下面订阅链接后一定要加 ”#“ 符号 2⃣ 假设你想要保留的参数为 in=tls+ss, 想要过滤的参数为 out=http+2, 请注意下面订阅链接后一定要加 "#" 符号
3⃣ 则填入 Quanx 节点引用的的总链接为 https://raw.githubusercontent.com/crossutility/Quantumult-X/master/server-complete.txt#in=tls+ss&out=http+2 3⃣ 则填入 Quanx 节点引用的的总链接为 https://raw.githubusercontent.com/crossutility/Quantumult-X/master/server-complete.txt#in=tls+ss&out=http+2
4⃣ 填入上述链接, 并打开的资源解析器开关 4⃣ 填入上述链接, 并打开的资源解析器开关
------------------------------ ------------------------------
⚠️⚠️ 由于 rewrite/filter 的 UI 中暂时没有提供解析器开关,想使用的请自行去配置文件中的相关行,添加参数"opt-parser=true"以开启,如: ⚠️⚠️ 由于 rewrite/filter 的 UI 中暂时没有提供解析器开关,想使用的请自行去配置文件中的相关行,添加参数"opt-parser=true"以开启,如:
https://Advertising.list#policy=Shawn&out=aweme, tag=🚦去广告update-interval=86400, opt-parser=true, enabled=true https://Advertising.list#policy=Shawn&out=aweme, tag=🚦去广告update-interval=86400, opt-parser=true, enabled=true
*/ */
//$notify("test",$resource.link)
var content0=$resource.content; var content0=$resource.content;
var para=decodeURIComponent($resource.link); var link0=$resource.link;
var para=(link0.indexOf("http")!=-1 && link0.indexOf("://")!=-1)?decodeURIComponent(link0):content0.split("\n")[0];
var mark0=para.indexOf("#")!=-1? true:false;
var type0=Type_Check(content0); var type0=Type_Check(content0);
var Pin0=para.indexOf("in=")!=-1? para.split("#")[1].split("in=")[1].split("&")[0].split("+"):null; var Pin0=mark0 && para.indexOf("in=")!=-1? para.split("#")[1].split("in=")[1].split("&")[0].split("+"):null;
var Pout0=para.indexOf("out=")!=-1? para.split("#")[1].split("out=")[1].split("&")[0].split("+"):null; var Pout0=mark0 && para.indexOf("out=")!=-1? para.split("#")[1].split("out=")[1].split("&")[0].split("+"):null;
var Pemoji=para.indexOf("emoji=")!=-1? para.split("#")[1].split("emoji=")[1].split("&")[0].split("+"):null; var Pemoji=mark0 && para.indexOf("emoji=")!=-1? para.split("#")[1].split("emoji=")[1].split("&")[0].split("+"):null;
var Pudp0=para.indexOf("udp=")!=-1? para.split("#")[1].split("udp=")[1].split("&")[0].split("+"):0; var Pudp0=mark0 && para.indexOf("udp=")!=-1? para.split("#")[1].split("udp=")[1].split("&")[0].split("+"):0;
var Ptfo0=para.indexOf("tfo=")!=-1? para.split("#")[1].split("tfo=")[1].split("&")[0].split("+"):0; var Ptfo0=mark0 && para.indexOf("tfo=")!=-1? para.split("#")[1].split("tfo=")[1].split("&")[0].split("+"):0;
var Pinfo=para.indexOf("info=")!=-1? para.split("#")[1].split("info=")[1].split("&")[0].split("+"):0; var Pinfo=mark0 && para.indexOf("info=")!=-1? para.split("#")[1].split("info=")[1].split("&")[0].split("+"):0;
var Prname=para.indexOf("rename=")!=-1? para.split("#")[1].split("rename=")[1].split("&")[0].split("+"):null; var Prname=mark0 && para.indexOf("rename=")!=-1? para.split("#")[1].split("rename=")[1].split("&")[0].split("+"):null;
var Ppolicy=para.indexOf("policy=")!=-1? para.split("#")[1].split("policy=")[1].split("&")[0].split("+"):"Shawn"; var Ppolicy=mark0 && para.indexOf("policy=")!=-1? para.split("#")[1].split("policy=")[1].split("&")[0].split("+"):"Shawn";
var Pcert0=para.indexOf("cert=")!=-1? para.split("#")[1].split("cert=")[1].split("&")[0].split("+"):1; var Pcert0=mark0 && para.indexOf("cert=")!=-1? para.split("#")[1].split("cert=")[1].split("&")[0].split("+"):1;
var Psort0=para.indexOf("sort=")!=-1? para.split("#")[1].split("sort=")[1].split("&")[0].split("+"):0; var Psort0=mark0 && para.indexOf("sort=")!=-1? para.split("#")[1].split("sort=")[1].split("&")[0].split("+"):0;
var PTls13=para.indexOf("tls13=")!=-1? para.split("#")[1].split("tls13=")[1].split("&")[0].split("+"):0; var PTls13=mark0 && para.indexOf("tls13=")!=-1? para.split("#")[1].split("tls13=")[1].split("&")[0].split("+"):0;
var Pntf0= para.indexOf("ntf=")!=-1? para.split("#")[1].split("ntf=")[1].split("&")[0].split("+"):0; var Pntf0= mark0 && para.indexOf("ntf=")!=-1? para.split("#")[1].split("ntf=")[1].split("&")[0].split("+"):0;
//$notify(type0) //$notify(type0,"tt",content0)
//响应头流量处理部分 //响应头流量处理部分
var subinfo=$resource.info; var subinfo=$resource.info;
@@ -105,14 +108,14 @@ if(type0=="Subs-B64Encode"){
total=content0.split("\n"); total=content0.split("\n");
total=Rule_Handle(total,Pout0); total=Rule_Handle(total,Pout0);
}else if(content0.trim()==""){ }else if(content0.trim()==""){
$notify("‼️链接內容为空","⁉️请自行检查原始链接以及过滤参数",para); $notify("‼️链接返回內容为空","⁉️请自行复制原始链接到浏览器, 确认链接是否失效",para.split("#")[0]);
flag=0; flag=0;
$done({content : ""}) $done({content : ""})
}else { }else if(type0=="unknown"){
$notify("😭 太难写了", "👻 本解析器 暂未支持/未能识别 该订阅格式", "☠️ 已尝试直接导入Quantumult X"); $notify("😭 太难写了", "👻 本解析器 暂未支持/未能识别 该订阅格式", "☠️ 已尝试直接导入Quantumult X");
$done({content : content0}); $done({content : content0});
flag=-1; flag=-1;
} }else { flag=0 }
if(flag==3){ if(flag==3){
$done({content : total.join("\n")}); $done({content : total.join("\n")});
@@ -151,12 +154,13 @@ if(flag==3){
//判断订阅类型 //判断订阅类型
function Type_Check(subs){ function Type_Check(subs){
var type="" var type="unknown"
var RuleK=["host","domain","ip-cidr","geoip","user-agent","ip6-cidr"]; var RuleK=["host","domain","ip-cidr","geoip","user-agent","ip6-cidr"];
var QuanXK=["shadowsocks=","trojan=","vmess=","http="]; var QuanXK=["shadowsocks=","trojan=","vmess=","http="];
var SurgeK=["=ss","=vmess","=trojan","=http","=custom"]; var SurgeK=["=ss","=vmess","=trojan","=http","=custom"];
var SubK=["dm1lc3M6Ly","c3NyOi8v","dHJvamFu","c3M6Ly"]; var SubK=["dm1lc3M6Ly","c3NyOi8v","dHJvamFu","c3M6Ly"];
var SubK2=["ss://","vmess://","ssr://","trojan://"]; var SubK2=["ss://","vmess://","ssr://","trojan://"];
var html="<!DOCTYPE html>"
var subi=subs.replace(/ /g,"") var subi=subs.replace(/ /g,"")
const RuleCheck = (item) => subs.toLowerCase().indexOf(item)!=-1; const RuleCheck = (item) => subs.toLowerCase().indexOf(item)!=-1;
const QuanXCheck = (item) => subi.toLowerCase().indexOf(item)!=-1; const QuanXCheck = (item) => subi.toLowerCase().indexOf(item)!=-1;
@@ -175,8 +179,11 @@ function Type_Check(subs){
type="Surge" type="Surge"
} else if(subs.indexOf("hostname")!=-1){ } else if(subs.indexOf("hostname")!=-1){
type="rewrite" type="rewrite"
} else if(RuleK.some(RuleCheck)){ } else if(RuleK.some(RuleCheck) && subs.indexOf(html)==-1){
type="Rule"; type="Rule";
} else if(subs.indexOf(html)!=-1){
$notify("‼️链接返回内容有误","⁉️请自行复制原始链接到浏览器, 确认链接是否失效",para.split("#")[0]);
type="web"
} }
return type return type
} }
@@ -313,7 +320,8 @@ function SubsEd2QX(subs,Pudp,Ptfo,Pcert,Ptls13){
node = Surge2QX(list0[i]) node = Surge2QX(list0[i])
} }
//$notify("Final","results",node) //$notify("Final","results",node)
QXlist.push(node) if(node!=""){
QXlist.push(node)}
} }
} }
return QXlist return QXlist
@@ -345,8 +353,10 @@ function Subs2QX(subs,Pudp,Ptfo,Pcert,Ptls13){
}else if(SurgeK.some(SurgeCheck)){ }else if(SurgeK.some(SurgeCheck)){
node = Surge2QX(list0[i]) node = Surge2QX(list0[i])
} }
QXlist.push(node) if(node!=""){
QXlist.push(node)}
} }
//$notify("final", "list", QXlist)
return QXlist return QXlist
} }
@@ -360,11 +370,11 @@ function TagCheck_QX(content){
var nm=item.split("tag")[1].split("=")[1].trim() // get tag var nm=item.split("tag")[1].split("=")[1].trim() // get tag
if(nm==""){ if(nm==""){
nm=" ["+item.split("=")[0]+"] "+item.split("=")[1].split(",")[0].split(":")[0] nm=" ["+item.split("=")[0]+"] "+item.split("=")[1].split(",")[0].split(":")[0]
$notify("⚠️ 订阅内出现空节点名:", "✅ 已自动将节点“类型+IP”作为节点名","✅ "+nm) $notify("⚠️ 订阅内出现空节点名:", "✅ 已自动将节点"类型+IP"作为节点名","✅ "+nm)
item=item.split("tag")[0]+"tag="+nm item=item.split("tag")[0]+"tag="+nm
} }
while(nmlist.indexOf(nm)!=-1){ while(nmlist.indexOf(nm)!=-1){
$notify("⚠️ 订阅内出现重复节点名:", "⚠️ "+ nm, "✅ 已自动添加“”符号作为区分:"+nm+"") $notify("⚠️ 订阅内出现重复节点名:", "⚠️ "+ nm, "✅ 已自动添加""符号作为区分:"+nm+"")
nm=nm+"" nm=nm+""
item=item.split("tag")[0]+"tag="+nm item=item.split("tag")[0]+"tag="+nm
} }