File size: 1,966 Bytes
02e3866
 
 
 
 
762894e
02e3866
 
 
 
 
18dbfcc
02e3866
18dbfcc
 
 
 
 
 
 
 
 
 
 
 
c4083d1
18dbfcc
 
 
02e3866
 
 
 
 
18dbfcc
02e3866
 
 
 
 
 
 
 
c4083d1
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from server.decoder import decode_url_to_configs
import base64
from fastapi import APIRouter,BackgroundTasks
from server.utils import subscription_link_list


router = APIRouter()
@router.get('/')
def getServerList(background_tasks: BackgroundTasks)->str:
    # 获取订阅链接列表
    SubscribeUrlList = subscription_link_list(router.fileName)
    # 初始化一个空列表,用于存储所有解析出的节点
    all_node_lists = []
    # 遍历每个订阅链接
    for subscribe_url in SubscribeUrlList:
        try:
            # 尝试解析当前订阅链接
            NodeList = dump_configs(subscribe_url)
            # 如果解析成功,将解析出的节点列表添加到总列表中
            all_node_lists.extend(NodeList)
        except Exception as e:
            # 如果解析失败,打印错误信息并继续处理下一个订阅链接
            print(f"解析订阅链接 {subscribe_url} 时发生错误: {e}")
    all_node_lists = get_unique_node_list(all_node_lists) # 去重且不改变顺序

    # 将所有节点拼接成一个字符串,每个节点之间用换行符分隔
    combined_links = "\n".join(all_node_lists)
    combined_links_bytes = combined_links.encode("utf-8")
    # 对字节串进行 Base64 编码
    encoded_links = base64.b64encode(combined_links_bytes)
    # 将编码后的字节串转换为字符串
    encoded_links_str = encoded_links.decode("utf-8")
    # 输出 Base64 编码后的订阅地址集合
    return encoded_links_str




def dump_configs(url:str)->list:
    #返回全部节点信息的列表
    configs = decode_url_to_configs(url)
    return configs

# 删除jms解析导致的重复节点
def get_unique_node_list(NodeList:list)->list:
    unique_node_list = []
    for node in NodeList:
        if node not in unique_node_list:
            unique_node_list.append(node)
    NodeList = unique_node_list
    return NodeList