Update clash_profile_conversion.sh

This commit is contained in:
wnlen
2026-01-17 20:06:15 +08:00
parent 297dc53373
commit f278ae30a1

View File

@ -3,7 +3,7 @@ set -euo pipefail
# 作用: # 作用:
# - 将订阅内容转换成 Clash Meta / Mihomo 可用的完整 YAML 配置 # - 将订阅内容转换成 Clash Meta / Mihomo 可用的完整 YAML 配置
# - 默认使用 subconverter HTTP /sub 接口(最稳) # - 默认使用 subconverter HTTP /sub 接口(最稳:用 -G + --data-urlencode
# - 失败则跳过,不影响主流程 # - 失败则跳过,不影响主流程
# #
# 输入/输出约定: # 输入/输出约定:
@ -25,12 +25,7 @@ OUT_FILE="${OUT_FILE:-$Temp_Dir/clash_config.yaml}"
# “更先进”的默认Clash Meta / Mihomo # “更先进”的默认Clash Meta / Mihomo
SUB_TARGET="${SUB_TARGET:-clashmeta}" # 推荐 clashmeta兼容面最广 SUB_TARGET="${SUB_TARGET:-clashmeta}" # 推荐 clashmeta兼容面最广
SUB_UDP="${SUB_UDP:-true}" SUB_URL="${CLASH_URL:-}" # 原始订阅 URL.env 里 export CLASH_URL=...
SUB_EMOJI="${SUB_EMOJI:-true}"
SUB_SORT="${SUB_SORT:-true}"
# 订阅原始 URL你 .env 里 export CLASH_URL=...
SUB_URL="${CLASH_URL:-}"
# 0) 输入不存在就跳过 # 0) 输入不存在就跳过
if [ ! -s "$IN_FILE" ]; then if [ ! -s "$IN_FILE" ]; then
@ -54,16 +49,14 @@ fi
# 3) 没有原始 URL 就不转subconverter 最稳是 url=... 拉取) # 3) 没有原始 URL 就不转subconverter 最稳是 url=... 拉取)
if [ -z "${SUB_URL:-}" ]; then if [ -z "${SUB_URL:-}" ]; then
echo "[WARN] CLASH_URL empty, cannot convert via /sub?url=..., skip" echo "[WARN] CLASH_URL empty, cannot convert via /sub, skip"
exit 0 exit 0
fi fi
TMP_OUT="$Temp_Dir/.clash_config.converted.yaml"
rm -f "$TMP_OUT" 2>/dev/null || true
# 4) 调用 subconverter用 -G + --data-urlencode避免 url 参数里含 ? & 导致 400 # 4) 调用 subconverter用 -G + --data-urlencode避免 url 参数里含 ? & 导致 400
# 注意SUB_URL 必须是原始订阅 URL例如 https://.../subscribe?token=xxx # 注意SUB_URL 必须是原始订阅 URL例如 https://.../subscribe?token=xxx
TMP_OUT="${OUT_FILE}.tmp" TMP_OUT="${OUT_FILE}.tmp"
rm -f "$TMP_OUT" 2>/dev/null || true
set +e set +e
curl -fsSLG "${SUBCONVERTER_URL}/sub" \ curl -fsSLG "${SUBCONVERTER_URL}/sub" \
@ -73,28 +66,13 @@ curl -fsSLG "${SUBCONVERTER_URL}/sub" \
rc=$? rc=$?
set -e set -e
if [ $rc -ne 0 ] || [ ! -s "${TMP_OUT}" ]; then
echo "[WARN] convert failed (rc=${rc}), skip"
rm -f "${TMP_OUT}" 2>/dev/null || true
exit 0
fi
mv -f "${TMP_OUT}" "${OUT_FILE}"
echo "[OK] converted via subconverter -> ${OUT_FILE} (target=${SUB_TARGET})"
# 5) 执行转换(失败则回退)
set +e
curl -fsSL --connect-timeout 3 -m 25 "$CONVERT_URL" -o "$TMP_OUT"
rc=$?
set -e
if [ "$rc" -ne 0 ] || [ ! -s "$TMP_OUT" ]; then if [ "$rc" -ne 0 ] || [ ! -s "$TMP_OUT" ]; then
echo "[WARN] convert failed (rc=$rc), keep original" echo "[WARN] convert failed (rc=${rc}), skip"
rm -f "$TMP_OUT" 2>/dev/null || true rm -f "$TMP_OUT" 2>/dev/null || true
exit 0 exit 0
fi fi
mv -f "$TMP_OUT" "$OUT_FILE" mv -f "$TMP_OUT" "$OUT_FILE"
echo "[OK] converted via subconverter -> $OUT_FILE (target=${SUB_TARGET})" echo "[OK] converted via subconverter -> ${OUT_FILE} (target=${SUB_TARGET})"
true true