Compare commits

..

5 Commits

Author SHA1 Message Date
fd503529e7 更新新加坡到 tag-选择 2025-03-03 16:02:05 +08:00
57e17ca4be 更新新加坡到 tag-选择 2025-01-23 11:33:05 +08:00
e744708954 Update .gitignore 2024-10-01 00:58:03 +08:00
f520fc44f3 Update .gitignore 2024-10-01 00:57:43 +08:00
8cd306af56 Update getTagProxyInfoToOpenwrtFormat.py 2024-10-01 00:57:24 +08:00
3 changed files with 65 additions and 16 deletions

4
.gitignore vendored
View File

@@ -2,4 +2,6 @@
.idea
/cache/
.Ds_Store
.Ds_Store
tag.conf

View File

@@ -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"
subscription_url = "https://huaikhwang.central-world.org/api/v1/trails/bolster?token=26d553424da6d84dccb20dd05dc844c0"
regions_list = ['香港', '新加坡', '美国']
# 转换并保存配置
convert_subscription_to_config(subscription_url)
convert_subscription_to_config(subscription_url, regions_list)

View File

@@ -26,6 +26,9 @@ def get_lines_containing_us(lines):
for line in lines:
if '美国' in line:
lines_with_us.append(line)
if '新加坡' in line:
lines_with_us.append(line)
return lines_with_us
@@ -68,6 +71,8 @@ def get_us_proxies(source_file):
for proxy in data['proxies']:
if '美国' in proxy['name']:
us_proxies.append(proxy['name'])
if '新加坡' in proxy['name']:
us_proxies.append(proxy['name'])
# print(us_proxies)
return us_proxies
@@ -97,7 +102,7 @@ def get_rules(source_file, groups_name_list, cache_files):
'🎬 YouTube', '🎬 Netflix', '🎬 DisneyPlus', '🎬 巴哈姆特', '🎬 viuTV', '🎬 KKTV', '🎬 日本媒体', '🎬 韩国媒体',
'🎬 AppleTV+', '🎬 HBOGO', '🎬 HBOMAX', '🎬 PrimeVideo', '🎬 EMBY', '🎬 Dazn', '🎶 TikTok', '🎵 Spotify',
'🎵 AppleMusic', '🎵 TIDAL', '🎵 Qobuz', '🎬 B站东南亚', '🌏 国外流媒体', '🔖 OneDrive', '☁️ iCloud',
'🌏 国外网站', '🐟 漏网之鱼', "📲 Instagram"]
'🌏 国外网站', '🐟 漏网之鱼', "📲 Instagram","🎬 台湾媒体","🌏 学术网站"]
print(difference(groups_name_list, domestic))
if 'rules' in data: