Update getTagProxyInfoToOpenwrtFormat.py
parent
5fd8552653
commit
8cd306af56
|
|
@ -14,31 +14,70 @@ def base64_decode(encoded_str):
|
|||
def get_subscription(url):
|
||||
response = requests.get(url)
|
||||
if response.status_code == 200:
|
||||
print("订阅数据获取成功")
|
||||
return response.text
|
||||
else:
|
||||
raise Exception(f"无法获取订阅数据: HTTP 状态码 {response.status_code}")
|
||||
|
||||
|
||||
# 解析订阅内容
|
||||
# 解析订阅内容,返回明文格式
|
||||
def parse_subscription(subscription):
|
||||
decoded_data = base64_decode(subscription)
|
||||
proxy_list = decoded_data.split('\n')
|
||||
return [proxy for proxy in proxy_list if proxy]
|
||||
decoded_data = base64_decode(subscription) # 解码Base64后的订阅内容
|
||||
proxy_list = decoded_data.split('\n') # 分割成代理列表
|
||||
proxy_list = [proxy for proxy in proxy_list if proxy] # 过滤掉空白行
|
||||
|
||||
parsed_proxies = []
|
||||
|
||||
for ss_url in proxy_list:
|
||||
if ss_url.startswith("ss://"):
|
||||
base_str = ss_url[5:] # 去掉 'ss://'
|
||||
|
||||
# 解码Base64(加密方式:密码)
|
||||
encryption_and_password_encoded = base_str.split("@")[0]
|
||||
encryption_and_password = base64_decode(encryption_and_password_encoded)
|
||||
encryption_method, password = encryption_and_password.split(":")
|
||||
|
||||
# 解析服务器地址和端口
|
||||
server_info = base_str.split("@")[1].split("/?")[0]
|
||||
server, port = server_info.split(":")
|
||||
|
||||
# 解析插件信息
|
||||
plugin_str = urllib.parse.unquote(base_str.split("/?")[1].split("#")[0])
|
||||
plugin_params = {}
|
||||
plugin_parts = plugin_str.split(";")
|
||||
for part in plugin_parts:
|
||||
if "=" in part:
|
||||
key, value = part.split("=")
|
||||
plugin_params[key] = value
|
||||
|
||||
# 解析备注
|
||||
alias_encoded = base_str.split("#")[1].rstrip("\r")
|
||||
alias = urllib.parse.unquote(alias_encoded)
|
||||
|
||||
# 生成明文格式
|
||||
parsed_ss_url = f"ss://{encryption_method + ':' + password}@{server}:{port}/?plugin={plugin_params.get('plugin', '')};obfs={plugin_params.get('obfs', '')};obfs-host={plugin_params.get('obfs-host', '')}#{alias}"
|
||||
parsed_proxies.append(parsed_ss_url)
|
||||
|
||||
return parsed_proxies
|
||||
|
||||
# 过滤香港、新加坡和美国节点
|
||||
def filter_proxies_by_region(ss_url_list):
|
||||
def filter_proxies_by_region(ss_url_list, regions_list):
|
||||
filtered_proxies = []
|
||||
for ss_url in ss_url_list:
|
||||
if any(region in ss_url for region in ['香港', '新加坡', '美国']):
|
||||
# print(f"ss_url: {ss_url}")
|
||||
|
||||
# 检查节点名是否包含特定地区关键字
|
||||
if any(region in ss_url for region in regions_list):
|
||||
filtered_proxies.append(ss_url)
|
||||
|
||||
return filtered_proxies
|
||||
|
||||
|
||||
# 解析 SS 链接,提取信息
|
||||
def parse_ss_url(ss_url):
|
||||
print("ss_url:", ss_url)
|
||||
base_str = ss_url[5:] # 移除 'ss://'
|
||||
encryption_and_password = base64_decode(base_str.split("@")[0])
|
||||
encryption_and_password = base_str.split("@")[0]
|
||||
encryption_method, password = encryption_and_password.split(":")
|
||||
|
||||
server_info = base_str.split("@")[1].split("/?")[0]
|
||||
|
|
@ -53,8 +92,9 @@ def parse_ss_url(ss_url):
|
|||
key, value = part.split("=")
|
||||
plugin_params[key] = value
|
||||
|
||||
alias = urllib.parse.unquote(base_str.split("#")[1].rstrip("\r"))
|
||||
|
||||
# 解码别名部分
|
||||
alias_cache = base_str.split("#")[1].rstrip("\r")
|
||||
alias = alias_cache[3:]
|
||||
return {
|
||||
"alias": alias,
|
||||
"server": server,
|
||||
|
|
@ -69,6 +109,7 @@ def parse_ss_url(ss_url):
|
|||
# 生成配置文件
|
||||
def generate_config(proxy_info, local_port=1234):
|
||||
config = f"""
|
||||
config servers
|
||||
option switch_enable '0'
|
||||
option type 'ss'
|
||||
option alias '{proxy_info['alias']}'
|
||||
|
|
@ -92,12 +133,12 @@ def save_to_file(configs, file_name):
|
|||
|
||||
|
||||
# 主函数
|
||||
def convert_subscription_to_config(subscription_url):
|
||||
def convert_subscription_to_config(subscription_url, regions_list):
|
||||
subscription_data = get_subscription(subscription_url)
|
||||
ss_url_list = parse_subscription(subscription_data)
|
||||
|
||||
# 过滤出符合要求的节点
|
||||
filtered_proxies = filter_proxies_by_region(ss_url_list)
|
||||
filtered_proxies = filter_proxies_by_region(ss_url_list, regions_list)
|
||||
|
||||
# 解析并生成配置
|
||||
configs = []
|
||||
|
|
@ -107,12 +148,13 @@ def convert_subscription_to_config(subscription_url):
|
|||
configs.append(config)
|
||||
|
||||
# 保存配置到文件
|
||||
save_to_file(configs, 'config_servers.conf')
|
||||
save_to_file(configs, 'tag.conf')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 订阅地址
|
||||
subscription_url = "https://link.nobodys.uk/api/v1/client/subscribe?token=26d553424da6d84dccb20dd05dc844c0"
|
||||
regions_list = ['香港', '新加坡', '美国']
|
||||
|
||||
# 转换并保存配置
|
||||
convert_subscription_to_config(subscription_url)
|
||||
convert_subscription_to_config(subscription_url, regions_list)
|
||||
|
|
|
|||
Loading…
Reference in New Issue