uu_pixiv_api / getServerList.py
rogerxavier's picture
Upload 10 files
762894e verified
#!/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