Spaces:
Running
Running
#!/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() | |
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 |