r1a dev

惜秦皇汉武,略输文采;唐宗宋祖,稍逊风骚。俱往矣,数风流人物,还看今朝。

首页
关于
链接
Admin
RSS
Email


简易订阅整合工具

  • 作者: runoneall
  • 时间: 2025-02-11
  • 分类: 默认分类

一个用php写的简易订阅整合
支持:合并订阅,零散节点,去重,以普通或base64格式返回

<?php

function response($code, $message, $header = "")
{
    http_response_code($code);
    if ($header != "") {
        header($header);
    }
    echo $message;
    exit;
}

function download_file($url, $retry = 0)
{
    $attempt = 0;
    while ($attempt <= $retry) {
        $attempt++;
        $content = @file_get_contents($url);
        if ($content !== false) {
            return $content;
        }
    }
    response(500, "Failed to download file: $url", "Content-Type: text/plain; charset=UTF-8");
}

function load_file_to_array($file_path)
{
    $file_content = file_get_contents($file_path);
    $file_content = str_replace("\r\n", "\n", $file_content);
    $lines = explode("\n", $file_content);
    $lines = array_filter($lines);
    return $lines;
}

function load_string_to_array($string)
{
    $string = str_replace("\r\n", "\n", $string);
    $lines = explode("\n", $string);
    $lines = array_filter($lines);
    return $lines;
}

function response_nodes($node_array)
{
    $content = implode("\n", $node_array);
    $query_string = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : "";
    if ($query_string == "base64") {
        $content = base64_encode($content);
    }
    if ($query_string == "clash") {
        $options = [
            'http' => [
                'method' => 'POST',
                'header' => 'Content-Type: text/plain; charset=UTF-8',
                'content' => $content
            ]
        ];
        $context = stream_context_create($options);
        $content = file_get_contents(
            "https://v2ray2clash.netlify.app/.netlify/functions/clash",
            false,
            $context
        );
    }
    response(200, $content, "Content-Type: text/plain; charset=UTF-8");
}

// load sub and scatter node list
$sub_list = load_file_to_array("sub.txt");
$scatter_nodes = load_file_to_array("scatter.txt");

// get sub node list
$sub_nodes = array();
foreach ($sub_list as $sub) {
    $sub_content = download_file($sub, 3);
    if (strpos($sub_content, "://") === false) {
        $sub_content = base64_decode($sub_content);
    }
    $sub_nodes = array_merge($sub_nodes, load_string_to_array($sub_content));
}

// merge sub nodes and scatter nodes
$nodes = array_merge($sub_nodes, $scatter_nodes);
$nodes = array_filter($nodes);
$nodes = array_unique($nodes);

// response
response_nodes($nodes);

?>

在同级目录新建 sub.txt 放置订阅,例如

https://sub.vip.sd/JPa6vvFgygVtNP2sGJ2r/download/nlmjj?target=V2Ray
https://fly.j-s.us.kg/api/v1/client/subscribe?token=3275fdb3e5ff32434a293ca8ca8fe9dc

在同级目录新建 scatter.txt 放置零散节点,例如

ss://YWVzLTI1Ni1nY206NmQwNDMwNDEtOTY3Ni0zNDllLWE3MDYtMzgwYWY5NGUwNjJh@c9pwn-g01.fr01-ae5.entry.v50307shvkaa.art:20065#%E6%B3%95%E5%9B%BDW01
ss://YWVzLTI1Ni1nY206NmQwNDMwNDEtOTY3Ni0zNDllLWE3MDYtMzgwYWY5NGUwNjJh@kn183-g01.us01-ae5.entry.v50307shvkaa.art:20010#%E7%BE%8E%E5%9B%BDW01
ss://YWVzLTI1Ni1nY206NmQwNDMwNDEtOTY3Ni0zNDllLWE3MDYtMzgwYWY5NGUwNjJh@b0sdx-g01.ua01-ae5.entry.v50307shvkaa.art:20070#%E4%B9%8C%E5%85%8B%E5%85%B0W01
ss://YWVzLTI1Ni1nY206NmQwNDMwNDEtOTY3Ni0zNDllLWE3MDYtMzgwYWY5NGUwNjJh@uh4r9-g01.us02-ae5.entry.v50307shvkaa.art:20015#%E7%BE%8E%E5%9B%BDW02
ss://YWVzLTI1Ni1nY206NmQwNDMwNDEtOTY3Ni0zNDllLWE3MDYtMzgwYWY5NGUwNjJh@5e3gk-g01.de01-ae5.entry.v50307shvkaa.art:20050#%E5%BE%B7%E5%9B%BDW01
ss://YWVzLTI1Ni1nY206NmQwNDMwNDEtOTY3Ni0zNDllLWE3MDYtMzgwYWY5NGUwNjJh@6tfkp-g01.ar01-ae5.entry.v50307shvkaa.art:20025#%E9%98%BF%E6%A0%B9%E5%BB%B7W01
ss://YWVzLTI1Ni1nY206NmQwNDMwNDEtOTY3Ni0zNDllLWE3MDYtMzgwYWY5NGUwNjJh@tsh16-g01.ru01-ae5.entry.v50307shvkaa.art:20030#%E4%BF%84%E7%BD%97%E6%96%AFW01
ss://YWVzLTI1Ni1nY206NmQwNDMwNDEtOTY3Ni0zNDllLWE3MDYtMzgwYWY5NGUwNjJh@13uc8-g01.tr01-ae5.entry.v50307shvkaa.art:20035#%E5%9C%9F%E8%80%B3%E5%85%B6W01

默认url格式,要以base64返回应增加 ?base64 后缀
clash配置应增加 ?clash 后缀
demo: https://runoneall.serv00.net/NodeShare/

标签: none

评论已关闭

  • 上一篇: 一个简易订阅转换api
  • 下一篇: 基于URL锚点的路由系统
© 2025 r1a dev. Old Fasion Theme. Powered by Typecho.