50 lines
1.6 KiB
Python
50 lines
1.6 KiB
Python
# Description: 过滤并添加节点
|
||
import urllib3
|
||
from urllib3.exceptions import InsecureRequestWarning
|
||
urllib3.disable_warnings(InsecureRequestWarning)
|
||
import json
|
||
import yaml
|
||
import requests
|
||
|
||
def try_node(ip, port):
|
||
print(f"正在测试节点{ip}:{port}")
|
||
try:
|
||
request = requests.get(f"https://{ip}:{port}", timeout=3, verify=False)
|
||
if request.status_code == 200:
|
||
return True
|
||
else:
|
||
return False
|
||
except:
|
||
return False
|
||
|
||
|
||
if __name__ == "__main__":
|
||
# 读取temp_nodes.yaml文件,若没有则跳过
|
||
try:
|
||
with open("temp_nodes.yaml", "r", encoding="utf-8") as f:
|
||
nodes = yaml.load(f, Loader=yaml.FullLoader)
|
||
except:
|
||
nodes = []
|
||
# 读取all_nodes.yaml文件,若没有则创建
|
||
try:
|
||
with open("all_nodes.yaml", "r", encoding="utf-8") as f:
|
||
all_nodes = yaml.load(f, Loader=yaml.FullLoader)
|
||
except:
|
||
all_nodes = []
|
||
# 合并节点并去重
|
||
all_nodes += nodes
|
||
unique_data_set = set(json.dumps(item) for item in all_nodes)
|
||
unique_data_list = [json.loads(item) for item in unique_data_set]
|
||
# 检验节点可连接性
|
||
for node in unique_data_list:
|
||
ip = node["ip"]
|
||
port = node["port"]
|
||
if not try_node(ip, port):
|
||
unique_data_list.remove(node)
|
||
print(f"节点{ip}:{port}不可连接")
|
||
print("共有" + str(len(unique_data_list)) + "个节点可用")
|
||
|
||
# 写入all_nodes.yaml文件
|
||
with open("all_nodes.yaml", "w", encoding="utf-8") as f:
|
||
yaml.dump(unique_data_list, f, allow_unicode=True)
|