#!/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